正在缓存weblogic服务响应

时间:2016-01-14 20:11:46

标签: java grails caching groovy

我正在使用从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;
    }

那么,我该怎么做才能避免缓存此服务响应? 在此先感谢!!!

1 个答案:

答案 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 
}