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;
}
}