Alexander Wels has uploaded a new change for review.

Change subject: webadmin: Store rest api session id in http session
......................................................................

webadmin: Store rest api session id in http session

- Altered the location that webadmin stores the REST API
  session id it needs for the UI plugins from local storage
  to the HTTP session.

Change-Id: I6fe9af54054aefe694876b1805a4a44f9bba0482
Signed-off-by: Alexander Wels <[email protected]>
---
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/CommunicationProvider.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/GWTRPCCommunicationProvider.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/OperationProcessor.java
A 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/StorageCallback.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/VdcOperationManager.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java
9 files changed, 161 insertions(+), 11 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/87/25987/1

diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java
index dceea50..3521e19 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/Frontend.java
@@ -20,6 +20,7 @@
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.ui.frontend.communication.RefreshActiveModelEvent;
+import org.ovirt.engine.ui.frontend.communication.StorageCallback;
 import org.ovirt.engine.ui.frontend.communication.UserCallback;
 import org.ovirt.engine.ui.frontend.communication.VdcOperation;
 import org.ovirt.engine.ui.frontend.communication.VdcOperationCallback;
@@ -632,7 +633,7 @@
 
     /**
      * A convenience method that calls {@link 
#runMultipleActions(VdcActionType, List, List, Object)} with
-     * running callbacks even on empty run
+     * running callbacks even on empty run.
      *
      * @param actionType The action to be repeated.
      * @param parameters The parameters of each action.
@@ -877,6 +878,14 @@
         }
     }
 
+    public void storeValue(final String key, final String value) {
+        getOperationManager().store(key, value);
+    }
+
+    public void retrieveValue(final String key, final StorageCallback 
callback) {
+        getOperationManager().retrieve(key, callback);
+    }
+
     // TODO: Externalize to a better location, should support translation via
     // resource bundle file.
     /**
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/CommunicationProvider.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/CommunicationProvider.java
index 796462e..e26165c 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/CommunicationProvider.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/CommunicationProvider.java
@@ -31,4 +31,18 @@
      */
     void logout(Object userObject, UserCallback<?> callback);
 
+    /**
+     * Store a {@code String} key value pair on the server side.
+     * @param key The key.
+     * @param value The value.
+     * @param callback The callback to call once the value has been stored.
+     */
+    void store(String key, String value, StorageCallback callback);
+
+    /**
+     * Retrieve the value associated with the key.
+     * @param key The key
+     * @param the callback to call with the result.
+     */
+    void retrieve(String key, StorageCallback callback);
 }
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/GWTRPCCommunicationProvider.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/GWTRPCCommunicationProvider.java
index a3d8f23..037eb83 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/GWTRPCCommunicationProvider.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/GWTRPCCommunicationProvider.java
@@ -379,4 +379,33 @@
         });
     }
 
+    @Override
+    public void store(final String key, final String value, final 
StorageCallback callback) {
+        getService().storeInHttpSession(key, value, new AsyncCallback<Void>() {
+            @Override
+            public void onSuccess(final Void result) {
+                callback.onSuccess(null);
+            }
+
+            @Override
+            public void onFailure(final Throwable caught) {
+                callback.onFailure(caught);
+            }
+        });
+    }
+
+    @Override
+    public void retrieve(final String key, final StorageCallback callback) {
+        getService().getFromHttpSession(key, new AsyncCallback<String>() {
+            @Override
+            public void onSuccess(final String result) {
+                callback.onSuccess(result);
+            }
+
+            @Override
+            public void onFailure(final Throwable caught) {
+                callback.onFailure(caught);
+            }
+        });
+    }
 }
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/OperationProcessor.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/OperationProcessor.java
index 09824d8..380ec90 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/OperationProcessor.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/OperationProcessor.java
@@ -267,4 +267,32 @@
         communicationProvider.logout(userObject, callback);
     }
 
+    /**
+     * Default store where the caller doesn't care about the result.
+     * @param key The key
+     * @param value The value to store.
+     */
+    public void store(final String key, final String value) {
+        store(key, value, new StorageCallback() {
+
+            @Override
+            public void onSuccess(String result) {
+                // Do nothing
+            }
+
+            @Override
+            public void onFailure(Throwable caught) {
+                //Do nothing
+            }
+
+        });
+    }
+
+    public void store(final String key, final String value, final 
StorageCallback callback) {
+        communicationProvider.store(key, value, callback);
+    }
+
+    public void retrieve(final String key, final StorageCallback callback) {
+        communicationProvider.retrieve(key, callback);
+    }
 }
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/StorageCallback.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/StorageCallback.java
new file mode 100644
index 0000000..15f8cbd
--- /dev/null
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/StorageCallback.java
@@ -0,0 +1,15 @@
+package org.ovirt.engine.ui.frontend.communication;
+
+public interface StorageCallback {
+    /**
+     * Success callback.
+     * @param result Either the value, or null if there is no value to return.
+     */
+    void onSuccess(String result);
+
+    /**
+     * Failure callback.
+     * @param caught Any exceptions caught during the processing of the 
operation.
+     */
+    void onFailure(Throwable caught);
+}
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/VdcOperationManager.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/VdcOperationManager.java
index 22ef675..fc3d17f 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/VdcOperationManager.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/communication/VdcOperationManager.java
@@ -152,4 +152,21 @@
         loggedIn = isLoggedIn;
     }
 
+    /**
+     * Store a value on the back-end in the session.
+     * @param key The key.
+     * @param value The value.
+     */
+    public void store(final String key, final String value) {
+        processor.store(key, value);
+    }
+
+    /**
+     * Retrieve a stored value from the back-end session.
+     * @param key The key.
+     * @param callback The callback to call with the value.
+     */
+    public void retrieve(final String key, final StorageCallback callback) {
+        processor.retrieve(key, callback);
+    }
 }
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java
index 69d102d..ad34db0 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/gwtservices/GenericApiGWTService.java
@@ -45,4 +45,7 @@
 
     public VdcReturnValueBase Login(String userName, String password, String 
profileName, VdcActionType loginType);
 
+    public void storeInHttpSession(String key, String value);
+
+    public String getFromHttpSession(String key);
 }
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java
index 68979c0..f7f3dc1 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java
@@ -186,6 +186,22 @@
     }
 
     @Override
+    public void storeInHttpSession(String key, String value) {
+        HttpServletRequest request = this.getThreadLocalRequest();
+        HttpSession session = request.getSession();
+        session.setAttribute(key, value);
+    }
+
+    @Override
+    public String getFromHttpSession(String key) {
+        HttpServletRequest request = this.getThreadLocalRequest();
+        HttpSession session = request.getSession();
+        Object value = session.getAttribute(key);
+        assert value instanceof String : "Retrieving non string value from 
session"; //$NON-NLS-1$
+        return (String)value;
+    }
+
+    @Override
     protected void doUnexpectedFailure(Throwable error) {
         // If the user is using a version of the application different to what
         // the server expects the names of the RPC serialization policy files
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java
index eaf785f..f860e4e 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java
@@ -4,6 +4,8 @@
 import java.util.logging.Logger;
 
 import org.ovirt.engine.ui.common.system.ClientStorage;
+import org.ovirt.engine.ui.frontend.Frontend;
+import org.ovirt.engine.ui.frontend.communication.StorageCallback;
 import org.ovirt.engine.ui.frontend.utils.BaseContextPathData;
 
 import com.google.gwt.core.client.Scheduler;
@@ -71,6 +73,8 @@
     private final String restApiBaseUrl;
 
     private String sessionTimeout;
+
+    private String restApiSessionId;
 
     @Inject
     public RestApiSessionManager(EventBus eventBus, ClientStorage 
clientStorage) {
@@ -159,14 +163,24 @@
      * Attempts to reuse existing REST API session that was previously 
{@linkplain #acquireSession acquired}.
      */
     public void reuseSession() {
-        String sessionId = getSessionId();
+        getSessionId(new StorageCallback() {
 
-        if (sessionId != null) {
-            RestApiSessionAcquiredEvent.fire(eventBus, sessionId);
-            scheduleKeepAliveHeartbeat();
-        } else {
-            RestApiSessionManager.logger.severe("Engine REST API session ID is 
not available"); //$NON-NLS-1$
-        }
+            @Override
+            public void onSuccess(String result) {
+                if (result != null) {
+                    restApiSessionId = result;
+                    RestApiSessionAcquiredEvent.fire(eventBus, result);
+                    scheduleKeepAliveHeartbeat();
+                } else {
+                    RestApiSessionManager.logger.severe("Engine REST API 
session ID is not available"); //$NON-NLS-1$
+                }
+            }
+
+            @Override
+            public void onFailure(Throwable caught) {
+                RestApiSessionManager.logger.severe("Engine REST API session 
ID is not available"); //$NON-NLS-1$
+            }
+        });
     }
 
     /**
@@ -177,15 +191,20 @@
     }
 
     String getSessionId() {
-        return clientStorage.getLocalItem(SESSION_ID_KEY);
+        return restApiSessionId;
+    }
+
+    void getSessionId(final StorageCallback callback) {
+        Frontend.getInstance().retrieveValue(SESSION_ID_KEY, callback);
     }
 
     void setSessionId(String sessionId) {
-        clientStorage.setLocalItem(SESSION_ID_KEY, sessionId);
+        Frontend.getInstance().storeValue(SESSION_ID_KEY, sessionId);
+        restApiSessionId = sessionId;
     }
 
     void clearSessionId() {
-        clientStorage.removeLocalItem(SESSION_ID_KEY);
+        setSessionId(null);
     }
 
 }


-- 
To view, visit http://gerrit.ovirt.org/25987
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6fe9af54054aefe694876b1805a4a44f9bba0482
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alexander Wels <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to