You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-scm@portals.apache.org by ms...@apache.org on 2016/01/21 16:12:26 UTC

[3/3] portals-pluto git commit: implemented fixes that allow the @PortletSessionScoped annotations to work properly. Mapped @SessionScoped annotations to @PortletSessionScoped. Enhanced the V3 annotated portlet demo to exercise the scope annotations. The

implemented fixes that allow the @PortletSessionScoped annotations to work
properly. Mapped @SessionScoped annotations to @PortletSessionScoped.
Enhanced the V3 annotated portlet demo to exercise the scope annotations.
The following scope annotations should now work as expected:
@SessionScoped, @RequestScoped, @PortletSessionScoped,
@PortletRequestScoped, and @ApplicationScoped.


Project: http://git-wip-us.apache.org/repos/asf/portals-pluto/repo
Commit: http://git-wip-us.apache.org/repos/asf/portals-pluto/commit/1b0fc2e5
Tree: http://git-wip-us.apache.org/repos/asf/portals-pluto/tree/1b0fc2e5
Diff: http://git-wip-us.apache.org/repos/asf/portals-pluto/diff/1b0fc2e5

Branch: refs/heads/V3Prototype
Commit: 1b0fc2e532dccb099678fb5d58b709f10cd70a58
Parents: 1fc34d1
Author: Scott Nicklous <ms...@apache.org>
Authored: Thu Jan 21 15:49:59 2016 +0100
Committer: Scott Nicklous <ms...@apache.org>
Committed: Thu Jan 21 15:49:59 2016 +0100

----------------------------------------------------------------------
 .../samples/AppSessionRandomNumberBean.java     |  2 +-
 .../samples/ApplicationRandomNumberBean.java    |  2 +-
 .../portals/samples/HelloWorldRender.java       | 14 ++++-
 .../samples/PortletRequestRandomNumberBean.java | 52 ++++++++++++++++++
 .../samples/PortletSessionRandomNumberBean.java |  2 +-
 .../samples/RequestRandomNumberBean.java        |  2 +-
 .../samples/SessionRandomNumberBean.java        | 55 ++++++++++++++++++++
 .../processor/PortletSessionBeanHolder.java     | 28 +++++-----
 .../processor/PortletSessionScopedBeanMap.java  | 24 +++++++--
 .../processor/PortletSessionScopedConfig.java   | 23 +++++---
 10 files changed, 174 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/1b0fc2e5/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/AppSessionRandomNumberBean.java
----------------------------------------------------------------------
diff --git a/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/AppSessionRandomNumberBean.java b/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/AppSessionRandomNumberBean.java
index f15f642..c044b2b 100644
--- a/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/AppSessionRandomNumberBean.java
+++ b/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/AppSessionRandomNumberBean.java
@@ -36,7 +36,7 @@ public class AppSessionRandomNumberBean implements Serializable {
    private int randomNumber;
    
    public AppSessionRandomNumberBean() {
-      randomNumber = ((int)(Math.random() * 1000)) - 500;
+      randomNumber = ((int)(Math.random() * 1000));
    }
 
    /**

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/1b0fc2e5/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/ApplicationRandomNumberBean.java
----------------------------------------------------------------------
diff --git a/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/ApplicationRandomNumberBean.java b/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/ApplicationRandomNumberBean.java
index d478ff4..40bc9e8 100644
--- a/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/ApplicationRandomNumberBean.java
+++ b/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/ApplicationRandomNumberBean.java
@@ -32,7 +32,7 @@ public class ApplicationRandomNumberBean {
    private int randomNumber;
    
    public ApplicationRandomNumberBean() {
-      randomNumber = ((int)(Math.random() * 1000)) - 500;
+      randomNumber = ((int)(Math.random() * 1000));
    }
 
    /**

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/1b0fc2e5/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/HelloWorldRender.java
----------------------------------------------------------------------
diff --git a/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/HelloWorldRender.java b/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/HelloWorldRender.java
index c8cd7a0..71e27da 100644
--- a/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/HelloWorldRender.java
+++ b/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/HelloWorldRender.java
@@ -37,12 +37,18 @@ public class HelloWorldRender {
    private RequestRandomNumberBean reqrn;
    
    @Inject
+   private PortletRequestRandomNumberBean pltreqrn;
+   
+   @Inject
    private PortletSessionRandomNumberBean pltsessrn;
    
    @Inject
    private AppSessionRandomNumberBean appsessrn;
    
    @Inject
+   private SessionRandomNumberBean sessrn;
+   
+   @Inject
    private ApplicationRandomNumberBean apprn;
 
    /**
@@ -65,15 +71,19 @@ public class HelloWorldRender {
       }
       txt.append("!!</h3>\n");
       
-      txt.append("<table><tr><td align='left'>\n");
+      txt.append("<p><table cellspacing='2' cellpadding='0'><tr><td align='left'>\n");
       txt.append("Application Scoped number:</td><td>").append(apprn.getRandomNumber());
       txt.append("</td></tr><tr><td>\n");
+      txt.append("Session scoped number:</td><td>").append(sessrn.getRandomNumber());
+      txt.append("</td></tr><tr><td>\n");
       txt.append("Portlet session scoped (Application) number:</td><td>").append(appsessrn.getRandomNumber());
       txt.append("</td></tr><tr><td>\n");
       txt.append("Portlet session scoped (Portlet) number:</td><td>").append(pltsessrn.getRandomNumber());
       txt.append("</td></tr><tr><td>\n");
+      txt.append("Portlet Request number:</td><td>").append(pltreqrn.getRandomNumber());
+      txt.append("</td></tr><tr><td>\n");
       txt.append("Request number:</td><td>").append(reqrn.getRandomNumber());
-      txt.append("</td></tr></table>\n");
+      txt.append("</td></tr></table></p>\n");
       
       return txt.toString();
    }

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/1b0fc2e5/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/PortletRequestRandomNumberBean.java
----------------------------------------------------------------------
diff --git a/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/PortletRequestRandomNumberBean.java b/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/PortletRequestRandomNumberBean.java
new file mode 100644
index 0000000..407d561
--- /dev/null
+++ b/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/PortletRequestRandomNumberBean.java
@@ -0,0 +1,52 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+
+package org.apache.portals.samples;
+
+import javax.portlet.annotations.PortletRequestScoped;
+
+/**
+ * Provides a random number generated once per request.
+ * @author Scott Nicklous
+ *
+ */
+@PortletRequestScoped
+public class PortletRequestRandomNumberBean {
+   
+   private int randomNumber;
+   
+   public PortletRequestRandomNumberBean() {
+      randomNumber = ((int)(Math.random() * 1000));
+   }
+
+   /**
+    * @return the randomNumber
+    */
+   public int getRandomNumber() {
+      return randomNumber;
+   }
+
+   /**
+    * @param randomNumber the randomNumber to set
+    */
+   public void setRandomNumber(int randomNumber) {
+      this.randomNumber = randomNumber;
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/1b0fc2e5/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/PortletSessionRandomNumberBean.java
----------------------------------------------------------------------
diff --git a/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/PortletSessionRandomNumberBean.java b/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/PortletSessionRandomNumberBean.java
index 5272b1e..e3a0ee0 100644
--- a/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/PortletSessionRandomNumberBean.java
+++ b/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/PortletSessionRandomNumberBean.java
@@ -35,7 +35,7 @@ public class PortletSessionRandomNumberBean implements Serializable{
    private int randomNumber;
    
    public PortletSessionRandomNumberBean() {
-      randomNumber = ((int)(Math.random() * 1000)) - 500;
+      randomNumber = ((int)(Math.random() * 1000));
    }
 
    /**

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/1b0fc2e5/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/RequestRandomNumberBean.java
----------------------------------------------------------------------
diff --git a/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/RequestRandomNumberBean.java b/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/RequestRandomNumberBean.java
index 6ad9f05..62e1b06 100644
--- a/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/RequestRandomNumberBean.java
+++ b/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/RequestRandomNumberBean.java
@@ -32,7 +32,7 @@ public class RequestRandomNumberBean {
    private int randomNumber;
    
    public RequestRandomNumberBean() {
-      randomNumber = ((int)(Math.random() * 1000)) - 500;
+      randomNumber = ((int)(Math.random() * 1000));
    }
 
    /**

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/1b0fc2e5/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/SessionRandomNumberBean.java
----------------------------------------------------------------------
diff --git a/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/SessionRandomNumberBean.java b/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/SessionRandomNumberBean.java
new file mode 100644
index 0000000..4a341e5
--- /dev/null
+++ b/PortletV3AnnotatedDemo/src/main/java/org/apache/portals/samples/SessionRandomNumberBean.java
@@ -0,0 +1,55 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+
+package org.apache.portals.samples;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.SessionScoped;
+
+/**
+ * Provides a random number generated once per request.
+ * @author Scott Nicklous
+ *
+ */
+@SessionScoped
+public class SessionRandomNumberBean implements Serializable {
+   private static final long serialVersionUID = -5412855426733207637L;
+
+   private int randomNumber;
+   
+   public SessionRandomNumberBean() {
+      randomNumber = ((int)(Math.random() * 1000));
+   }
+
+   /**
+    * @return the randomNumber
+    */
+   public int getRandomNumber() {
+      return randomNumber;
+   }
+
+   /**
+    * @param randomNumber the randomNumber to set
+    */
+   public void setRandomNumber(int randomNumber) {
+      this.randomNumber = randomNumber;
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/1b0fc2e5/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionBeanHolder.java
----------------------------------------------------------------------
diff --git a/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionBeanHolder.java b/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionBeanHolder.java
index 665e221..949610b 100644
--- a/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionBeanHolder.java
+++ b/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionBeanHolder.java
@@ -74,30 +74,28 @@ public class PortletSessionBeanHolder implements Serializable {
       PortletSession ps = req.getPortletSession();
       String windowId = req.getWindowID();
 
-      if (isDebug) {
-         StringBuilder txt = new StringBuilder(80);
-         txt.append("Setting portlet session bean holder.");
-         txt.append(" ThreadId: ").append(Thread.currentThread().getId());
-         txt.append(", PortletSession: ").append(ps.getId());
-         txt.append(", WindowId: ").append(windowId);
-         LOG.debug(txt.toString());
-      }
-
       PortletSessionScopedBeanMap map = (PortletSessionScopedBeanMap) ps.getAttribute(ATTRIBNAME,
             PortletSession.APPLICATION_SCOPE);
+      
+      boolean createdMap = false;
       if (map == null) {
          map = new PortletSessionScopedBeanMap();
          ps.setAttribute(ATTRIBNAME, map, PortletSession.APPLICATION_SCOPE);
-
-         if (isDebug) {
-            StringBuilder txt = new StringBuilder(80);
-            txt.append("Created new portlet session bean map.");
-            LOG.debug(txt.toString());
-         }
+         createdMap = true;
       }
 
       PortletSessionBeanHolder holder = new PortletSessionBeanHolder(map, windowId, config);
       holders.set(holder);
+
+      if (isDebug) {
+         StringBuilder txt = new StringBuilder(80);
+         txt.append("Set portlet session bean holder.");
+         txt.append(" ThreadId: ").append(Thread.currentThread().getId());
+         txt.append(", PortletSession: ").append(ps.getId());
+         txt.append(", WindowId: ").append(windowId);
+         txt.append(", Added new BeanMap to session: ").append(createdMap);
+         LOG.debug(txt.toString());
+      }
    }
 
    /**

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/1b0fc2e5/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionScopedBeanMap.java
----------------------------------------------------------------------
diff --git a/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionScopedBeanMap.java b/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionScopedBeanMap.java
index 0f264d3..b4c3fb8 100644
--- a/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionScopedBeanMap.java
+++ b/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionScopedBeanMap.java
@@ -47,6 +47,7 @@ public class PortletSessionScopedBeanMap implements HttpSessionBindingListener,
    
    private static final Logger LOG = LoggerFactory.getLogger(PortletSessionScopedBeanMap.class);
    private static final boolean isDebug = LOG.isDebugEnabled();
+   private static final boolean isTrace = LOG.isTraceEnabled();
    
    // Used in the bean map to designate application scoped beans.
    private static final String WINDOW_ID_APPLICATION = "application";
@@ -82,12 +83,13 @@ public class PortletSessionScopedBeanMap implements HttpSessionBindingListener,
          id = WINDOW_ID_APPLICATION;
       }
 
+      boolean addedMap = false;
       synchronized (beans) {
          Map<Contextual<?>, BeanInstance<?>> beanMap = beans.get(id);
          if (beanMap == null) {
             beanMap = new HashMap<Contextual<?>, BeanInstance<?>>();
             beans.put(id, beanMap);
-            LOG.debug("Added new bean map.");
+            addedMap = true;
          }
          beanMap.put(bean, bi);
       }
@@ -98,8 +100,11 @@ public class PortletSessionScopedBeanMap implements HttpSessionBindingListener,
          if (bean instanceof Bean<?>) {
             Bean<?> b = (Bean<?>) bean;
             txt.append(b.getBeanClass().getSimpleName());
+         } else {
+            txt.append("Contextual");
          }
          txt.append(", window ID: ").append(id);
+         txt.append(", added new map: ").append(addedMap);
          LOG.debug(txt.toString());
       }
    }
@@ -112,13 +117,26 @@ public class PortletSessionScopedBeanMap implements HttpSessionBindingListener,
          id = WINDOW_ID_APPLICATION;
       }
 
+      boolean gotMap = false;
       synchronized(beans) {
          Map<Contextual<?>, BeanInstance<?>> beanMap = beans.get(id);
          if (beanMap != null) {
-            instance = (T) beanMap.get(bean).instance;
+            gotMap = true;
+            BeanInstance<?> bi = beanMap.get(bean);
+            if (bi != null) {
+               instance = (T) bi.instance;
+            }
          }
       }
-      LOG.debug("Window ID: " + id + ", instance: " + instance);
+      
+      if (isTrace) {
+         StringBuilder txt = new StringBuilder();
+         txt.append("Window ID: ").append(id);
+         txt.append(", retrieved map: ").append(gotMap);
+         txt.append(", instance null: ").append(instance == null);
+         LOG.debug(txt.toString());
+      }
+      
       return instance;
    }
    

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/1b0fc2e5/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionScopedConfig.java
----------------------------------------------------------------------
diff --git a/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionScopedConfig.java b/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionScopedConfig.java
index 7a14ae9..ce8d445 100644
--- a/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionScopedConfig.java
+++ b/pluto-container/src/main/java/org/apache/pluto/container/bean/processor/PortletSessionScopedConfig.java
@@ -34,11 +34,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Configuration for PortletStateScoped CDI beans with PORTLET_SCOPE.
- * <p>
- * ===================================
- * === Only used for test purposes ===
- * ===================================
+ * Configuration for PortletStateScoped CDI beans.
  * 
  * @author Scott Nicklous
  *
@@ -159,7 +155,22 @@ public class PortletSessionScopedConfig  implements Serializable {
    public Boolean isPortletScoped(Contextual<?> bean) {
       PortletSessionScoped anno = context2Anno.get(bean);
       assert anno != null;
-      return (anno.value() == PortletSession.PORTLET_SCOPE);
+      boolean isPS = (anno.value() == PortletSession.PORTLET_SCOPE);
+      
+      if (isTrace) {
+         StringBuilder txt = new StringBuilder();
+         txt.append("Bean: ");
+         if (bean instanceof Bean<?>) {
+            Bean<?> b = (Bean<?>) bean;
+            txt.append(b.getBeanClass().getSimpleName());
+         } else {
+            txt.append("Contextual");
+         }
+         txt.append(", isPortletScoped: ").append(isPS);
+         LOG.debug(txt.toString());
+      }
+      
+      return isPS;
    }
 
 }