我正在使用从weblogic按组获取用户,组和用户的服务。我从互联网上获得了这个代码,但是我真的不太了解它。 现在,返回组的服务工作正常(没有缓存),但是当我尝试按组加载用户或用户时,只能正常工作第一个请求。如果我重启我的grails服务器总是第一次工作。
此方法获取组(工作正常)
def getListOfGroups() {
def connectorFactory = connect(serviceAccount, servicePassword)
def connection = connectorFactory.getMBeanServerConnection()
Object defaultAuthenticator = getWeblogicAuthenticator(connection, authenticator)
def allGroups = []
def objectArray = new Object[2]
def stringArray = new String[2]
objectArray[0] = "*"
objectArray[1] = Integer.valueOf(9999)
stringArray[0] = "java.lang.String"
stringArray[1] = "java.lang.Integer"
String cursor = (String) connection.invoke(defaultAuthenticator, "listGroups", objectArray, stringArray);
def cursorArray = new Object[1]
cursorArray[0] = cursor
def stringCursorArray = new String[1]
stringCursorArray[0] = "java.lang.String"
boolean haveCurrent =
((Boolean) connection.invoke(defaultAuthenticator,
"haveCurrent",
cursorArray,
stringCursorArray)).booleanValue();
while (haveCurrent) {
String currentName =
(String) connection.invoke(defaultAuthenticator,
"getCurrentName",
cursorArray,
stringCursorArray);
allGroups.add(currentName);
connection.invoke(defaultAuthenticator,
"advance",
cursorArray,
stringCursorArray);
haveCurrent =
((Boolean) connection.invoke(defaultAuthenticator,
"haveCurrent",
cursorArray,
stringCursorArray)).booleanValue();
}
ArrayList<HashMap<String,String>> arrayGrupos = new ArrayList<>()
allGroups.each {
HashMap<String,String> mapItem = new HashMap<String,String>()
mapItem.put("value",it)
arrayGrupos.add(mapItem)
}
return allGroups;
}
这是获取用户(缓存)的方法:
def getUsers() {
if (!users) {
def connectorFactory = connect(serviceAccount, servicePassword)
def connection = connectorFactory.getMBeanServerConnection()
Object defaultAuthenticator = getWeblogicAuthenticator(connection, authenticator)
def allUsers = []
def objectArray = new Object[3]
def stringArray = new String[3]
objectArray[0] = papyrusCaseGroup
objectArray[1] = "*"
objectArray[2] = Integer.valueOf(9999)
stringArray[0] = "java.lang.String"
stringArray[1] = "java.lang.String"
stringArray[2] = "java.lang.Integer"
String cursor = (String) connection.invoke(defaultAuthenticator, "listGroupMembers", objectArray, stringArray);
def cursorArray = new Object[1]
cursorArray[0] = cursor
def stringCursorArray = new String[1]
stringCursorArray[0] = "java.lang.String"
boolean haveCurrent =
((Boolean) connection.invoke(defaultAuthenticator,
"haveCurrent",
cursorArray,
stringCursorArray)).booleanValue();
while (haveCurrent) {
String currentName =
(String) connection.invoke(defaultAuthenticator,
"getCurrentName",
cursorArray,
stringCursorArray);
allUsers.add(currentName);
connection.invoke(defaultAuthenticator,
"advance",
cursorArray,
stringCursorArray);
haveCurrent =
((Boolean) connection.invoke(defaultAuthenticator,
"haveCurrent",
cursorArray,
stringCursorArray)).booleanValue();
}
ArrayList<HashMap<String,String>> arrayUsers = new ArrayList<>()
allUsers.each {
HashMap<String,String> mapItem = new HashMap<String,String>()
mapItem.put("value",it)
arrayUsers.add(mapItem)
}
users = arrayUsers
return users
}
else
return users
//return allUsers;
}
那么,我该怎么做才能避免缓存此服务响应? 在此先感谢!!!
答案 0 :(得分:1)
第二个似乎将结果缓存到users
并使用if (!users) {
检查缓存结果
要删除它,代码应如下所示:
def getUsers() {
def connectorFactory = connect(serviceAccount, servicePassword)
def connection = connectorFactory.getMBeanServerConnection()
Object defaultAuthenticator = getWeblogicAuthenticator(connection, authenticator)
def allUsers = []
def objectArray = new Object[3]
def stringArray = new String[3]
objectArray[0] = papyrusCaseGroup
objectArray[1] = "*"
objectArray[2] = Integer.valueOf(9999)
stringArray[0] = "java.lang.String"
stringArray[1] = "java.lang.String"
stringArray[2] = "java.lang.Integer"
String cursor = (String) connection.invoke(defaultAuthenticator, "listGroupMembers", objectArray, stringArray);
def cursorArray = new Object[1]
cursorArray[0] = cursor
def stringCursorArray = new String[1]
stringCursorArray[0] = "java.lang.String"
boolean haveCurrent =
((Boolean) connection.invoke(defaultAuthenticator,
"haveCurrent",
cursorArray,
stringCursorArray)).booleanValue();
while (haveCurrent) {
String currentName =
(String) connection.invoke(defaultAuthenticator,
"getCurrentName",
cursorArray,
stringCursorArray);
allUsers.add(currentName);
connection.invoke(defaultAuthenticator,
"advance",
cursorArray,
stringCursorArray);
haveCurrent =
((Boolean) connection.invoke(defaultAuthenticator,
"haveCurrent",
cursorArray,
stringCursorArray)).booleanValue();
}
ArrayList<HashMap<String,String>> arrayUsers = new ArrayList<>()
allUsers.each {
HashMap<String,String> mapItem = new HashMap<String,String>()
mapItem.put("value",it)
arrayUsers.add(mapItem)
}
return arrayUsers
}