You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2015/05/01 17:23:48 UTC
svn commit: r1677166 - in /openwebbeans/trunk: ./ samples/reservation/
samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/
samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/user/
samples/reservation/src/main/j...
Author: struberg
Date: Fri May 1 15:23:47 2015
New Revision: 1677166
URL: http://svn.apache.org/r1677166
Log:
upgrade myfaces and compiler plugin
Please note that we only use the latest MyFaces-2.0.x and not 2.2.x
as we don't like to accidently pick up newer JSF API methods
Added:
openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/controller/InitializeDatabase.java
Removed:
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/SessionContextManager.java
Modified:
openwebbeans/trunk/pom.xml
openwebbeans/trunk/samples/reservation/pom.xml
openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/RegisterBean.java
openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/user/UserReservationBean.java
openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/security/JSFSecurityPhaseListener.java
openwebbeans/trunk/samples/reservation/src/main/webapp/WEB-INF/web.xml
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContextsService.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ApplicationContext.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ConversationContext.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/SessionContext.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/se/DefaultContextsService.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/JsfConversationService.java
openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/Jsf12ConversationService.java
openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ContextsService.java
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/EndWebBeansConfigurationListener.java
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationFilter.java
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
Modified: openwebbeans/trunk/pom.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/pom.xml?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/pom.xml (original)
+++ openwebbeans/trunk/pom.xml Fri May 1 15:23:47 2015
@@ -80,7 +80,7 @@
<tomcat6.version>6.0.43</tomcat6.version>
<tomcat7.version>7.0.61</tomcat7.version>
<openejb.version>3.1.4</openejb.version>
- <myfaces.version>2.0.7</myfaces.version>
+ <myfaces.version>2.0.23</myfaces.version>
<xbean.version>4.1</xbean.version>
<arquillian.version>1.1.2.Final</arquillian.version>
<cdi.tck.version>1.2.4.Final</cdi.tck.version>
@@ -349,8 +349,9 @@
</plugin>
<plugin>
+ <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
- <version>2.3.2</version>
+ <version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
Modified: openwebbeans/trunk/samples/reservation/pom.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/samples/reservation/pom.xml?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/samples/reservation/pom.xml (original)
+++ openwebbeans/trunk/samples/reservation/pom.xml Fri May 1 15:23:47 2015
@@ -36,102 +36,59 @@ under the License.
<deploy.skip>true</deploy.skip>
</properties>
- <build>
- <finalName>reservation</finalName>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>openjpa-maven-plugin</artifactId>
- <version>1.2</version>
- <configuration>
- <includes>org/apache/webbeans/reservation/entity/*.class</includes>
- <addDefaultConstructor>true</addDefaultConstructor>
- <enforcePropertyRestrictions>true</enforcePropertyRestrictions>
- <sqlAction>build</sqlAction>
- <sqlFile>${project.build.directory}/database.sql</sqlFile>
- </configuration>
- <executions>
- <execution>
- <id>mappingtool</id>
- <phase>process-classes</phase>
- <goals>
- <goal>enhance</goal>
- </goals>
- </execution>
- </executions>
- <dependencies>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.14</version>
- </dependency>
- <dependency>
- <groupId>org.apache.openjpa</groupId>
- <artifactId>openjpa</artifactId>
- <version>2.0.1</version>
- </dependency>
- </dependencies>
- </plugin>
-
- </plugins>
- </build>
+ <!--
+ * Start this sample with
+ * $> mvn clean install tomcat7:run
+ *
+ * To debug it run with:
+ * $> mvnDebug tomcat7:run
+ -->
<dependencies>
- <!-- My Faces API -->
+ <!-- MyFaces IMPL -->
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
- <scope>provided</scope>
</dependency>
-
- <!-- Servlet Api -->
<dependency>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-servlet_3.0_spec</artifactId>
- <scope>provided</scope>
+ <groupId>org.apache.myfaces.core</groupId>
+ <artifactId>myfaces-impl</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jstl</artifactId>
+ <version>1.2</version>
</dependency>
- <!-- JPA API -->
+ <!-- CDI and atinject APIs -->
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-jpa_2.0_spec</artifactId>
- <scope>provided</scope>
+ <artifactId>geronimo-jcdi_1.1_spec</artifactId>
</dependency>
-
- <!-- HSQLDB -->
<dependency>
- <groupId>hsqldb</groupId>
- <artifactId>hsqldb</artifactId>
- <version>1.8.0.7</version>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-atinject_1.0_spec</artifactId>
</dependency>
-
- <!-- EL API -->
+ <!-- Interceptor API -->
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-el_2.2_spec</artifactId>
- <scope>provided</scope>
+ <artifactId>geronimo-interceptor_1.2_spec</artifactId>
</dependency>
-
- <!-- Common Validator -->
<dependency>
- <groupId>commons-validator</groupId>
- <artifactId>commons-validator</artifactId>
- <version>1.3.1</version>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-annotation_1.2_spec</artifactId>
</dependency>
- <!-- Interceptor API -->
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-interceptor_1.2_spec</artifactId>
+ <artifactId>geronimo-servlet_3.0_spec</artifactId>
<scope>provided</scope>
</dependency>
-
- <!-- OWB Resource for Injections -->
<dependency>
- <groupId>org.apache.openwebbeans</groupId>
- <artifactId>openwebbeans-resource</artifactId>
- <version>${project.version}</version>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-el_2.2_spec</artifactId>
<scope>provided</scope>
</dependency>
@@ -140,19 +97,22 @@ under the License.
<groupId>org.apache.openwebbeans</groupId>
<artifactId>openwebbeans-impl</artifactId>
<version>${project.version}</version>
- <scope>provided</scope>
+ <scope>runtime</scope>
</dependency>
+ <!-- Web Plugin -->
<dependency>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-jcdi_1.1_spec</artifactId>
- <scope>provided</scope>
+ <groupId>org.apache.openwebbeans</groupId>
+ <artifactId>openwebbeans-web</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
</dependency>
-
+ <!-- pseudo PersistenceContext injection -->
<dependency>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-atinject_1.0_spec</artifactId>
- <scope>provided</scope>
+ <groupId>org.apache.openwebbeans</groupId>
+ <artifactId>openwebbeans-resource</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
</dependency>
<!-- JSF Plugin -->
@@ -160,24 +120,35 @@ under the License.
<groupId>org.apache.openwebbeans</groupId>
<artifactId>openwebbeans-jsf</artifactId>
<version>${project.version}</version>
- <scope>provided</scope>
+ <scope>runtime</scope>
</dependency>
- <!-- EL Plugin -->
+
+ <!-- OpenJPA -->
<dependency>
- <groupId>org.apache.openwebbeans</groupId>
- <artifactId>openwebbeans-el10</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jpa_2.0_spec</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.openjpa</groupId>
+ <artifactId>openjpa</artifactId>
+ <version>2.4.0</version>
+ <scope>runtime</scope>
</dependency>
+ <!-- HSQLDB -->
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.8.0.7</version>
+ <scope>runtime</scope>
+ </dependency>
- <!-- Web Plugin -->
+ <!-- Common Validator -->
<dependency>
- <groupId>org.apache.openwebbeans</groupId>
- <artifactId>openwebbeans-web</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
+ <groupId>commons-validator</groupId>
+ <artifactId>commons-validator</artifactId>
+ <version>1.3.1</version>
</dependency>
<dependency>
@@ -185,102 +156,51 @@ under the License.
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
-
</dependencies>
- <profiles>
- <profile>
- <id>tomcat</id>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.tomcat.maven</groupId>
- <artifactId>tomcat7-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- <dependencies>
- <!-- MyFaces IMPL -->
- <dependency>
- <groupId>org.apache.myfaces.core</groupId>
- <artifactId>myfaces-api</artifactId>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.myfaces.core</groupId>
- <artifactId>myfaces-impl</artifactId>
- <scope>compile</scope>
- </dependency>
-
- <!-- CDI and atinject APIs -->
- <dependency>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-jcdi_1.1_spec</artifactId>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-atinject_1.0_spec</artifactId>
- <scope>compile</scope>
- </dependency>
- <!-- Interceptor API -->
- <dependency>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-interceptor_1.2_spec</artifactId>
- <scope>compile</scope>
- </dependency>
-
- <!-- OWB Impl -->
- <dependency>
- <groupId>org.apache.openwebbeans</groupId>
- <artifactId>openwebbeans-impl</artifactId>
- <version>${project.version}</version>
- <scope>compile</scope>
- </dependency>
-
- <!-- Web Plugin -->
- <dependency>
- <groupId>org.apache.openwebbeans</groupId>
- <artifactId>openwebbeans-web</artifactId>
- <version>${project.version}</version>
- <scope>compile</scope>
- </dependency>
-
- <!-- our tomcat7++ integration module -->
- <dependency>
- <groupId>org.apache.openwebbeans</groupId>
- <artifactId>openwebbeans-tomcat7</artifactId>
- <version>${project.version}</version>
- <scope>compile</scope>
- </dependency>
-
- <!-- JSF Plugin -->
- <dependency>
- <groupId>org.apache.openwebbeans</groupId>
- <artifactId>openwebbeans-jsf</artifactId>
- <version>${project.version}</version>
- <scope>compile</scope>
- </dependency>
-
-
- <!-- OpenJPA -->
- <dependency>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-jpa_2.0_spec</artifactId>
- <scope>compile</scope>
- </dependency>
-
-
- <dependency>
- <groupId>org.apache.openjpa</groupId>
- <artifactId>openjpa</artifactId>
- <version>2.0.1</version>
- <scope>compile</scope>
- </dependency>
-
-
-
- </dependencies>
- </profile>
- </profiles>
+ <build>
+ <finalName>reservation</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>openjpa-maven-plugin</artifactId>
+ <version>1.2</version>
+ <configuration>
+ <includes>org/apache/webbeans/reservation/entity/*.class</includes>
+ <addDefaultConstructor>true</addDefaultConstructor>
+ <enforcePropertyRestrictions>true</enforcePropertyRestrictions>
+ <sqlAction>build</sqlAction>
+ <sqlFile>${project.build.directory}/database.sql</sqlFile>
+ </configuration>
+ <executions>
+ <execution>
+ <id>mappingtool</id>
+ <phase>process-classes</phase>
+ <goals>
+ <goal>enhance</goal>
+ </goals>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.14</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.openjpa</groupId>
+ <artifactId>openjpa</artifactId>
+ <version>2.0.1</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.tomcat.maven</groupId>
+ <artifactId>tomcat7-maven-plugin</artifactId>
+ </plugin>
+
+ </plugins>
+ </build>
+
</project>
Modified: openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/RegisterBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/RegisterBean.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/RegisterBean.java (original)
+++ openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/RegisterBean.java Fri May 1 15:23:47 2015
@@ -18,13 +18,10 @@
*/
package org.apache.webbeans.reservation.beans;
-import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Default;
import javax.inject.Inject;
import javax.inject.Named;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
import org.apache.commons.logging.Log;
import org.apache.webbeans.reservation.bindings.ApplicationLog;
@@ -35,29 +32,18 @@ import org.apache.webbeans.reservation.u
@RequestScoped
public class RegisterBean
{
+ private @Inject @Default RegisterController personController;
private @Inject @ApplicationLog Log logger;
-
+
private String name;
-
private String surname;
-
private Integer age;
-
private String userName;
-
private String password;
-
+
private boolean admin;
-
- private @Inject @Default RegisterController personController;
-
- private @Inject @Default BeanManager manager;
-
- public RegisterBean()
- {
-
- }
-
+
+
public String register()
{
@@ -71,14 +57,6 @@ public class RegisterBean
}
- @PostConstruct
- public void init()
- {
- Bean<?> bean = manager.getBeans("logger").iterator().next();
-
- logger = (Log)manager.getReference(bean, null, manager.createCreationalContext(bean));
- }
-
/**
* @return the name
Modified: openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/user/UserReservationBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/user/UserReservationBean.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/user/UserReservationBean.java (original)
+++ openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/user/UserReservationBean.java Fri May 1 15:23:47 2015
@@ -84,11 +84,9 @@ public class UserReservationBean impleme
try
{
date = new SimpleDateFormat("dd/MM/yyyy").parse(getReservationDate());
-
}
catch(Exception e)
{
-
JSFUtility.addErrorMessage("Please give a date with dd/MM/yyyy", "");
return null;
}
Added: openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/controller/InitializeDatabase.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/controller/InitializeDatabase.java?rev=1677166&view=auto
==============================================================================
--- openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/controller/InitializeDatabase.java (added)
+++ openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/controller/InitializeDatabase.java Fri May 1 15:23:47 2015
@@ -0,0 +1,47 @@
+/*
+ * 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.webbeans.reservation.controller;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.Initialized;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+
+import org.apache.webbeans.reservation.controller.admin.AdminController;
+
+/**
+ * Initialize an admin and a normal user in the db.
+ */
+@ApplicationScoped
+public class InitializeDatabase
+{
+ private @Inject RegisterController registerController;
+ private @Inject AdminController adminController;
+
+ public void initUsers(@Observes @Initialized(ApplicationScoped.class) Object payload)
+ {
+ registerController.registerUser("administrator", "administrator", "administrator", "administrator", 66, true);
+ registerController.registerUser("customer", "customer", "customer", "customer", 27, false);
+
+ adminController.createNewHotel("Pillton", 5, "New York", "USA");
+ adminController.createNewHotel("Karriot", 5, "Paris", "France");
+ adminController.createNewHotel("Oper", 5, "Vienna", "Austria");
+ }
+
+}
Modified: openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/security/JSFSecurityPhaseListener.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/security/JSFSecurityPhaseListener.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/security/JSFSecurityPhaseListener.java (original)
+++ openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/security/JSFSecurityPhaseListener.java Fri May 1 15:23:47 2015
@@ -45,7 +45,7 @@ public class JSFSecurityPhaseListener im
User user = null;
try
{
- tracker = (SessionTracker)context.getApplication().evaluateExpressionGet(context, "#{sessionTracker}", SessionTracker.class);
+ tracker = context.getApplication().evaluateExpressionGet(context, "#{sessionTracker}", SessionTracker.class);
user = tracker.getUser();
}
Modified: openwebbeans/trunk/samples/reservation/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/samples/reservation/src/main/webapp/WEB-INF/web.xml?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/samples/reservation/src/main/webapp/WEB-INF/web.xml (original)
+++ openwebbeans/trunk/samples/reservation/src/main/webapp/WEB-INF/web.xml Fri May 1 15:23:47 2015
@@ -46,4 +46,8 @@ under the License.
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
+
+ <listener>
+ <listener-class>org.apache.webbeans.servlet.WebBeansConfigurationListener</listener-class>
+ </listener>
</web-app>
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContextsService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContextsService.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContextsService.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContextsService.java Fri May 1 15:23:47 2015
@@ -32,9 +32,14 @@ public abstract class AbstractContextsSe
{
protected final WebBeansContext webBeansContext;
+ protected boolean supportsConversation = false;
+
+
protected AbstractContextsService(WebBeansContext webBeansContext)
{
this.webBeansContext = webBeansContext;
+ supportsConversation = webBeansContext.getOpenWebBeansConfiguration().supportsConversation();
+
}
@Override
@@ -122,5 +127,15 @@ public abstract class AbstractContextsSe
conversationManager.destroyUnrequiredConversations();
}
+ @Override
+ public void removeThreadLocals()
+ {
+ // no ThreadLocals to clean up by default
+ }
+ @Override
+ public void setSupportConversations(boolean supportConversations)
+ {
+ this.supportsConversation = supportConversations;
+ }
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ApplicationContext.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ApplicationContext.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ApplicationContext.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ApplicationContext.java Fri May 1 15:23:47 2015
@@ -48,7 +48,5 @@ public class ApplicationContext extends
public void destroy(Contextual<?> contextual)
{
super.destroy(contextual);
-
- // and now we also need to
}
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ConversationContext.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ConversationContext.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ConversationContext.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ConversationContext.java Fri May 1 15:23:47 2015
@@ -49,9 +49,15 @@ public class ConversationContext extends
private ConversationImpl conversation;
- /*
- * Constructor
- */
+ // for serialisation
+ public ConversationContext()
+ {
+ this(WebBeansContext.currentInstance());
+ }
+
+ /**
+ * Constructor
+ */
public ConversationContext(WebBeansContext webBeansContext)
{
super(ConversationScoped.class);
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/SessionContext.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/SessionContext.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/SessionContext.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/SessionContext.java Fri May 1 15:23:47 2015
@@ -44,11 +44,23 @@ public class SessionContext extends Abst
{
private static final long serialVersionUID = 1L;
+ /**
+ * Whether this is a synthetic SessionContext or a 'real', means backed
+ * by a real servlet session
+ */
+ private boolean syntheticSession = false;
+
public SessionContext()
{
super(SessionScoped.class);
}
+ public SessionContext(boolean syntheticSession)
+ {
+ super(SessionScoped.class);
+ this.syntheticSession = syntheticSession;
+ }
+
@Override
public void setComponentInstanceMap()
{
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java Fri May 1 15:23:47 2015
@@ -39,7 +39,6 @@ import org.apache.webbeans.context.Conve
import org.apache.webbeans.context.RequestContext;
import org.apache.webbeans.context.creational.CreationalContextImpl;
import org.apache.webbeans.logger.WebBeansLoggerFacade;
-import org.apache.webbeans.spi.ContextsService;
import org.apache.webbeans.spi.ConversationService;
/**
@@ -56,7 +55,6 @@ public class ConversationManager
private final WebBeansContext webBeansContext;
- private final ContextsService contextsService;
/**
* Creates new conversation manager
@@ -64,7 +62,6 @@ public class ConversationManager
public ConversationManager(WebBeansContext webBeansContext)
{
this.webBeansContext = webBeansContext;
- this.contextsService = webBeansContext.getContextsService();
// we need to register this for serialisation in clusters
webBeansContext.getBeanManagerImpl().addInternalBean(ConversationStorageBean.INSTANCE);
@@ -80,10 +77,11 @@ public class ConversationManager
{
ConversationService conversationService = webBeansContext.getConversationService();
+ Set<ConversationContext> conversationContexts = getConversations(true);
+
String conversationId = conversationService.getConversationId();
if (conversationId != null && conversationId.length() > 0)
{
- Set<ConversationContext> conversationContexts = getConversations(false);
if (conversationContexts != null)
{
for (ConversationContext conversationContext : conversationContexts)
@@ -98,6 +96,7 @@ public class ConversationManager
ConversationContext conversationContext = new ConversationContext(webBeansContext);
conversationContext.setActive(true);
+ conversationContexts.add(conversationContext);
webBeansContext.getBeanManagerImpl().fireEvent(getLifecycleEventPayload(conversationContext), InitializedLiteral.INSTANCE_CONVERSATION_SCOPED);
@@ -204,7 +203,7 @@ public class ConversationManager
if (payLoad == null)
{
- RequestContext requestContext = (RequestContext) contextsService.getCurrentContext(RequestScoped.class);
+ RequestContext requestContext = (RequestContext) webBeansContext.getContextsService().getCurrentContext(RequestScoped.class);
if (requestContext != null)
{
payLoad = requestContext.getRequestObject();
@@ -226,7 +225,7 @@ public class ConversationManager
private Set<ConversationContext> getConversations(boolean create)
{
Set<ConversationContext> conversationContexts = null;
- Context sessionContext = contextsService.getCurrentContext(SessionScoped.class);
+ Context sessionContext = webBeansContext.getContextsService().getCurrentContext(SessionScoped.class);
if (sessionContext != null)
{
if (!create)
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/se/DefaultContextsService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/se/DefaultContextsService.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/se/DefaultContextsService.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/se/DefaultContextsService.java Fri May 1 15:23:47 2015
@@ -451,4 +451,6 @@ public class DefaultContextsService exte
cleanupConversations(conversationContext.get());
}
+
+
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java Fri May 1 15:23:47 2015
@@ -30,6 +30,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
import javax.enterprise.event.ObserverException;
import javax.enterprise.event.TransactionPhase;
@@ -83,6 +84,13 @@ public final class NotificationManager
private final Map<Type, Set<ObserverMethod<?>>> observers = new ConcurrentHashMap<Type, Set<ObserverMethod<?>>>();
private final WebBeansContext webBeansContext;
+ /**
+ * Contains information whether certain Initialized and Destroyed events have observer methods.
+ */
+ private final ConcurrentMap<Annotation, Boolean> hasLifecycleEventObservers = new ConcurrentHashMap<Annotation, Boolean>();
+
+
+
public static final Set<Class> CONTAINER_EVENT_CLASSES = new HashSet<Class>();
static {
CONTAINER_EVENT_CLASSES.add(AfterBeanDiscovery.class);
@@ -108,6 +116,31 @@ public final class NotificationManager
{
this.webBeansContext = webBeansContext;
}
+
+ /**
+ *
+ * @param lifecycleEvent e.g. {@link org.apache.webbeans.annotation.DestroyedLiteral#INSTANCE_REQUEST_SCOPED}
+ * @return whether the given Initialized or Destroyed event has observer methods.
+ */
+ public boolean hasLifecycleObserver(Annotation lifecycleEvent)
+ {
+ Boolean hasObserver = hasLifecycleEventObservers.get(lifecycleEvent);
+ if (hasObserver == null)
+ {
+ hasObserver = Boolean.FALSE;
+ for (ObserverMethod<?> observerMethod : getObserverMethods())
+ {
+ if (observerMethod.getObservedQualifiers().contains(lifecycleEvent))
+ {
+ hasObserver = Boolean.TRUE;
+ break;
+ }
+ }
+ hasLifecycleEventObservers.putIfAbsent(lifecycleEvent, hasObserver);
+ }
+
+ return hasObserver;
+ }
public List<ObserverMethod<?>> getObserverMethods()
{
Modified: openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/JsfConversationService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/JsfConversationService.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/JsfConversationService.java (original)
+++ openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/JsfConversationService.java Fri May 1 15:23:47 2015
@@ -34,7 +34,12 @@ public class JsfConversationService impl
@Override
public String getConversationId()
{
- return JSFUtil.getConversationId();
+ String conversationId = JSFUtil.getConversationId();
+ if (conversationId == null || conversationId.length() == 0)
+ {
+ return null;
+ }
+ return conversationId;
}
@Override
Modified: openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/Jsf12ConversationService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/Jsf12ConversationService.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/Jsf12ConversationService.java (original)
+++ openwebbeans/trunk/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/Jsf12ConversationService.java Fri May 1 15:23:47 2015
@@ -34,7 +34,12 @@ public class Jsf12ConversationService im
@Override
public String getConversationId()
{
- return JSFUtil.getConversationId();
+ String conversationId = JSFUtil.getConversationId();
+ if (conversationId == null || conversationId.length() == 0)
+ {
+ return null;
+ }
+ return conversationId;
}
@Override
Modified: openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ContextsService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ContextsService.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ContextsService.java (original)
+++ openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ContextsService.java Fri May 1 15:23:47 2015
@@ -107,4 +107,18 @@ public interface ContextsService
* @param scopeType scope type
*/
public void deActivateContext(Class<? extends Annotation> scopeType);
+
+ /**
+ * Whenever a thread ends we need to remove any ThreadLocals from the ContextsService
+ */
+ public void removeThreadLocals();
+
+ /**
+ * This method can be used to disable conversation support in core CDI.
+ * This is needed as the spec defines that a user can define it's
+ * own Conversation handling by providing a Filter with the name
+ * "CDI Conversation Filter".
+ * @param supportConversations whether converstaions should be supported
+ */
+ public void setSupportConversations(boolean supportConversations);
}
Modified: openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/EndWebBeansConfigurationListener.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/EndWebBeansConfigurationListener.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/EndWebBeansConfigurationListener.java (original)
+++ openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/EndWebBeansConfigurationListener.java Fri May 1 15:23:47 2015
@@ -35,7 +35,8 @@ import org.apache.webbeans.config.WebBea
import org.apache.webbeans.el.ELContextStore;
import org.apache.webbeans.logger.WebBeansLoggerFacade;
import org.apache.webbeans.spi.ContainerLifecycle;
-import org.apache.webbeans.web.context.WebContextsService;
+import org.apache.webbeans.spi.ContextsService;
+
/**
* This listener should be the last in the invocation chain.
@@ -50,6 +51,7 @@ public class EndWebBeansConfigurationLis
private WebBeansContext webBeansContext;
private ContainerLifecycle lifeCycle;
+ private ContextsService contextsService;
/**
* Default constructor
@@ -72,6 +74,7 @@ public class EndWebBeansConfigurationLis
{
// this must return the booted OWB container as the BeginWebBeansConfigurationListener did already run
this.lifeCycle = webBeansContext.getService(ContainerLifecycle.class);
+ contextsService = webBeansContext.getContextsService();
}
/**
@@ -80,7 +83,10 @@ public class EndWebBeansConfigurationLis
@Override
public void contextDestroyed(ServletContextEvent event)
{
- lifeCycle.stopApplication(event);
+ if (lifeCycle != null)
+ {
+ lifeCycle.stopApplication(event);
+ }
// just to be sure that we didn't lazily create anything...
cleanupRequestThreadLocals();
@@ -161,7 +167,11 @@ public class EndWebBeansConfigurationLis
*/
private void cleanupRequestThreadLocals()
{
- WebContextsService.removeThreadLocals();
+ if (contextsService != null)
+ {
+ contextsService.removeThreadLocals();
+ }
}
}
+
Modified: openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationFilter.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationFilter.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationFilter.java (original)
+++ openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationFilter.java Fri May 1 15:23:47 2015
@@ -24,7 +24,6 @@ import org.apache.webbeans.config.WebBea
import org.apache.webbeans.el.ELContextStore;
import org.apache.webbeans.logger.WebBeansLoggerFacade;
import org.apache.webbeans.spi.ContainerLifecycle;
-import org.apache.webbeans.spi.FailOverService;
import org.apache.webbeans.util.WebBeansUtil;
import org.apache.webbeans.web.context.WebContextsService;
import org.apache.webbeans.web.util.ServletCompatibilityUtil;
@@ -39,8 +38,6 @@ import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -66,9 +63,9 @@ public class WebBeansConfigurationFilter
/**Manages the container lifecycle*/
protected ContainerLifecycle lifeCycle = null;
- protected FailOverService failoverService = null;
private WebBeansContext webBeansContext;
private ServletContext servletContext;
+ private WebContextsService webContextsService;
/**
* Default constructor
@@ -76,7 +73,7 @@ public class WebBeansConfigurationFilter
public WebBeansConfigurationFilter()
{
webBeansContext = WebBeansContext.getInstance();
- failoverService = webBeansContext.getService(FailOverService.class);
+ webContextsService = (WebContextsService) webBeansContext.getContextsService();
}
/**
@@ -177,20 +174,6 @@ public class WebBeansConfigurationFilter
logger.log(Level.FINE, "Destroying a request : [{0}]", request.getRemoteAddr());
}
- if (failoverService != null &&
- failoverService.isSupportFailOver())
- {
- if(request instanceof HttpServletRequest)
- {
- HttpServletRequest httpRequest = (HttpServletRequest)request;
- HttpSession session = httpRequest.getSession(false);
- if (session != null)
- {
- failoverService.sessionIsIdle(session);
- }
- }
- }
-
// clean up the EL caches after each request
ELContextStore elStore = ELContextStore.getInstance(false);
if (elStore != null)
@@ -224,7 +207,6 @@ public class WebBeansConfigurationFilter
*/
private void cleanupRequestThreadLocals()
{
- // TODO maybe there are more to cleanup
- WebContextsService.removeThreadLocals();
+ webContextsService.removeThreadLocals();
}
}
Modified: openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java (original)
+++ openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java Fri May 1 15:23:47 2015
@@ -64,29 +64,28 @@ public class WebContextsService extends
private static final String OWB_SESSION_CONTEXT_ATTRIBUTE = "OPENWEBBEANS_SESSION_CONTEXT";
/**Current request context*/
- private static ThreadLocal<RequestContext> requestContexts = null;
+ protected static ThreadLocal<RequestContext> requestContexts = null;
/**Current session context*/
- private static ThreadLocal<SessionContext> sessionContexts = null;
+ protected static ThreadLocal<SessionContext> sessionContexts = null;
/**
* A single applicationContext
*/
- private ApplicationContext sharedApplicationContext ;
+ protected ApplicationContext applicationContext;
- private SingletonContext sharedSingletonContext;
+ protected SingletonContext singletonContext;
/**Current conversation context*/
- private static ThreadLocal<ConversationContext> conversationContexts = null;
+ protected static ThreadLocal<ConversationContext> conversationContexts = null;
/**Current dependent context*/
- private static DependentContext dependentContext;
+ protected static DependentContext dependentContext;
/**Conversation context manager*/
- private final ConversationManager conversationManager;
+ protected final ConversationManager conversationManager;
+
- private boolean supportsConversation = false;
-
/**Initialize thread locals*/
static
@@ -101,28 +100,28 @@ public class WebContextsService extends
}
/**
+ * Creates a new instance.
+ */
+ public WebContextsService(WebBeansContext webBeansContext)
+ {
+ super(webBeansContext);
+ conversationManager = webBeansContext.getConversationManager();
+
+ applicationContext = new ApplicationContext();
+ applicationContext.setActive(true);
+ }
+
+ /**
* Removes the ThreadLocals from the ThreadMap to prevent memory leaks.
*/
- public static void removeThreadLocals()
+ public void removeThreadLocals()
{
requestContexts.remove();
sessionContexts.remove();
conversationContexts.remove();
RequestScopedBeanInterceptorHandler.removeThreadLocals();
}
-
- /**
- * Creates a new instance.
- */
- public WebContextsService(WebBeansContext webBeansContext)
- {
- super(webBeansContext);
- supportsConversation = webBeansContext.getOpenWebBeansConfiguration().supportsConversation();
- conversationManager = webBeansContext.getConversationManager();
- sharedApplicationContext = new ApplicationContext();
- sharedApplicationContext.setActive(true);
- }
/**
* {@inheritDoc}
@@ -147,13 +146,13 @@ public class WebContextsService extends
endContext(ApplicationScoped.class, destroyObject);
// we also need to destroy the shared ApplicationContext
- sharedApplicationContext.destroy();
+ applicationContext.destroy();
//Destroy singleton context
endContext(Singleton.class, destroyObject);
- if (sharedSingletonContext != null)
+ if (singletonContext != null)
{
- sharedSingletonContext.destroy();
+ singletonContext.destroy();
}
//Thread local values to null
@@ -178,15 +177,15 @@ public class WebContextsService extends
{
if(scopeType.equals(RequestScoped.class))
{
- destroyRequestContext((ServletRequestEvent)endParameters);
+ destroyRequestContext(endParameters);
}
else if(scopeType.equals(SessionScoped.class))
{
- destroySessionContext((HttpSession)endParameters);
+ destroySessionContext(endParameters);
}
else if(scopeType.equals(ApplicationScoped.class))
{
- destroyApplicationContext((ServletContext)endParameters);
+ destroyApplicationContext(endParameters);
}
else if(supportsConversation && scopeType.equals(ConversationScoped.class))
{
@@ -198,7 +197,13 @@ public class WebContextsService extends
}
else if (scopeType.equals(Singleton.class))
{
- destroySingletonContext((ServletContext)endParameters);
+ destroySingletonContext(endParameters);
+ }
+ else
+ {
+ logger.warning("CDI-OpenWebBeans container does not support context scope "
+ + scopeType.getSimpleName()
+ + ". Scopes @Dependent, @RequestScoped, @ApplicationScoped and @Singleton are supported scope types");
}
}
@@ -218,7 +223,7 @@ public class WebContextsService extends
}
else if(scopeType.equals(ApplicationScoped.class))
{
- return sharedApplicationContext;
+ return applicationContext;
}
else if(supportsConversation && scopeType.equals(ConversationScoped.class))
{
@@ -230,7 +235,7 @@ public class WebContextsService extends
}
else if (scopeType.equals(Singleton.class))
{
- return sharedSingletonContext;
+ return singletonContext;
}
return null;
@@ -244,15 +249,15 @@ public class WebContextsService extends
{
if (scopeType.equals(RequestScoped.class))
{
- initRequestContext((ServletRequestEvent)startParameter);
+ initRequestContext(startParameter);
}
else if (scopeType.equals(SessionScoped.class))
{
- initSessionContext((HttpSession)startParameter);
+ initSessionContext(startParameter);
}
else if (scopeType.equals(ApplicationScoped.class))
{
- initApplicationContext((ServletContext)startParameter);
+ initApplicationContext(startParameter);
}
else if (supportsConversation && scopeType.equals(ConversationScoped.class))
{
@@ -264,7 +269,13 @@ public class WebContextsService extends
}
else if (scopeType.equals(Singleton.class))
{
- initSingletonContext((ServletContext)startParameter);
+ initSingletonContext(startParameter);
+ }
+ else
+ {
+ logger.warning("CDI-OpenWebBeans container does not support context scope "
+ + scopeType.getSimpleName()
+ + ". Scopes @Dependent, @RequestScoped, @ApplicationScoped and @Singleton are supported scope types");
}
}
@@ -289,45 +300,36 @@ public class WebContextsService extends
/**
* Initialize requext context with the given request object.
- * @param event http servlet request event
+ * @param startupObject http servlet request event or system specific payload
*/
- private void initRequestContext(ServletRequestEvent event)
+ protected void initRequestContext(Object startupObject )
{
- RequestContext rq = new ServletRequestContext();
- rq.setActive(true);
+ ServletRequestContext requestContext = new ServletRequestContext();
+ requestContext.setActive(true);
- requestContexts.set(rq);// set thread local
+ requestContexts.set(requestContext);// set thread local
- if(event != null)
+ Object payload = null;
+
+ if(startupObject != null && startupObject instanceof ServletRequestEvent)
{
- HttpServletRequest request = (HttpServletRequest) event.getServletRequest();
- ((ServletRequestContext)rq).setServletRequest(request);
+ HttpServletRequest request = (HttpServletRequest) ((ServletRequestEvent) startupObject).getServletRequest();
+ requestContext.setServletRequest(request);
if (request != null)
{
- //Re-initialize thread local for session
- HttpSession session = request.getSession(false);
-
- if(session != null)
- {
- initSessionContext(session);
- }
-
- webBeansContext.getBeanManagerImpl().fireEvent(request, InitializedLiteral.INSTANCE_REQUEST_SCOPED);
+ payload = request;
}
}
- else
- {
- webBeansContext.getBeanManagerImpl().fireEvent(new Object(), InitializedLiteral.INSTANCE_REQUEST_SCOPED);
- }
+ webBeansContext.getBeanManagerImpl().fireEvent(payload != null ? payload : new Object(), InitializedLiteral.INSTANCE_REQUEST_SCOPED);
}
/**
* Destroys the request context and all of its components.
- * @param requestEvent http servlet request object
+ * @param endObject http servlet request object or other payload
*/
- private void destroyRequestContext(ServletRequestEvent requestEvent)
+ protected void destroyRequestContext(Object endObject)
{
// cleanup open conversations first
if (supportsConversation)
@@ -335,7 +337,6 @@ public class WebContextsService extends
cleanupConversations();
}
-
//Get context
RequestContext context = getRequestContext();
@@ -352,20 +353,28 @@ public class WebContextsService extends
elStore.destroyELContextStore();
}
- Object payload = requestEvent != null && requestEvent.getServletRequest() != null ? requestEvent.getServletRequest() : new Object();
- webBeansContext.getBeanManagerImpl().fireEvent(payload, DestroyedLiteral.INSTANCE_REQUEST_SCOPED);
+ Object payload = null;
+
+ if (endObject != null && endObject instanceof ServletRequestEvent)
+ {
+ payload = ((ServletRequestEvent) endObject).getServletRequest();
+ }
+ webBeansContext.getBeanManagerImpl().fireEvent(payload != null ? payload : new Object(), DestroyedLiteral.INSTANCE_REQUEST_SCOPED);
//Clear thread locals
conversationContexts.set(null);
conversationContexts.remove();
+
sessionContexts.set(null);
sessionContexts.remove();
+
requestContexts.set(null);
requestContexts.remove();
RequestScopedBeanInterceptorHandler.removeThreadLocals();
}
+
private void cleanupConversations()
{
cleanupConversations(conversationContexts.get());
@@ -374,18 +383,22 @@ public class WebContextsService extends
/**
* Creates the session context at the session start.
* Or assign a
- * @param session http session object
+ * @param startupObject HttpSession object or other startup
*/
- private void initSessionContext(HttpSession session)
+ protected void initSessionContext(Object startupObject)
{
SessionContext currentSessionContext;
+ HttpSession session = startupObject instanceof HttpSession ? (HttpSession) startupObject : null;
+
if (session == null)
{
// no session -> create a dummy SessionContext
// this is handy if you create asynchronous tasks or
// batches which use a 'admin' user.
currentSessionContext = new SessionContext();
+ currentSessionContext.setActive(true);
+
webBeansContext.getBeanManagerImpl().fireEvent(new Object(), InitializedLiteral.INSTANCE_SESSION_SCOPED);
}
else
@@ -402,16 +415,18 @@ public class WebContextsService extends
if (currentSessionContext == null)
{
currentSessionContext = new SessionContext();
- //Activate
currentSessionContext.setActive(true);
webBeansContext.getBeanManagerImpl().fireEvent(session, InitializedLiteral.INSTANCE_SESSION_SCOPED);
+ session.setAttribute(OWB_SESSION_CONTEXT_ATTRIBUTE, currentSessionContext);
}
}
}
-
- // we do that in any case.
- // This is needed to trigger delta-replication on most servers
- session.setAttribute(OWB_SESSION_CONTEXT_ATTRIBUTE, currentSessionContext);
+ else
+ {
+ // we do that in any case.
+ // This is needed to trigger delta-replication on most servers
+ session.setAttribute(OWB_SESSION_CONTEXT_ATTRIBUTE, currentSessionContext);
+ }
}
@@ -422,67 +437,81 @@ public class WebContextsService extends
/**
* Destroys the session context and all of its components at the end of the
* session.
- * @param session http session object. Can be {@code null} for non-http SessionContexts. Such a context only lives for one thread.
+ * @param endObject http session object. Can be {@code null} or different object for non-http SessionContexts. Such a context only lives for one thread.
*/
- private void destroySessionContext(HttpSession session)
+ protected void destroySessionContext(Object endObject)
{
- //Get current session context from ThreadLocal
+ // Get current session context from ThreadLocal
SessionContext context = sessionContexts.get();
- if (session != null)
+ Object payload = null;
+
+ if (endObject != null && endObject instanceof HttpSession)
{
+ HttpSession session = (HttpSession) endObject;
if (context == null)
{
+ // init in this case only attaches the existing session to the ThreadLocal
initSessionContext(session);
context = sessionContexts.get();
}
+ payload = session;
}
- //Destroy context
+ // Destroy context
if (context != null)
{
context.destroy();
- webBeansContext.getBeanManagerImpl().fireEvent(session, DestroyedLiteral.INSTANCE_SESSION_SCOPED);
+ webBeansContext.getBeanManagerImpl().fireEvent(payload != null ? payload : new Object(), DestroyedLiteral.INSTANCE_SESSION_SCOPED);
}
- //Clear thread locals
+ // As the Conversations get stored inside the SessionContext we now also
+ // did destroy the ConversationContext implicitly
+ conversationContexts.set(null);
+ conversationContexts.remove();
+
+ // Clear thread locals
sessionContexts.set(null);
sessionContexts.remove();
+
}
/**
* Creates the application context at the application startup
- * @param servletContext servlet context object
+ * @param startupObject servlet context object or other startup
+ *
*/
- private void initApplicationContext(ServletContext servletContext)
+ protected void initApplicationContext(Object startupObject)
{
- if (sharedApplicationContext != null)
+ if (applicationContext != null)
{
+ applicationContext.setActive(true);
return;
}
ApplicationContext newApplicationContext = new ApplicationContext();
newApplicationContext.setActive(true);
- if (sharedApplicationContext == null)
+ if (applicationContext == null)
{
- sharedApplicationContext = newApplicationContext;
- webBeansContext.getBeanManagerImpl().fireEvent(servletContext != null ? servletContext : new Object(), InitializedLiteral.INSTANCE_APPLICATION_SCOPED);
+ applicationContext = newApplicationContext;
+ Object payLoad = startupObject != null && startupObject instanceof ServletContext ? (ServletContext) startupObject : new Object();
+ webBeansContext.getBeanManagerImpl().fireEvent(payLoad, InitializedLiteral.INSTANCE_APPLICATION_SCOPED);
}
}
/**
* Destroys the application context and all of its components at the end of
* the application.
- * @param servletContext servlet context object
+ * @param endObject servlet context object or other payload
*/
- private void destroyApplicationContext(ServletContext servletContext)
+ protected void destroyApplicationContext(Object endObject)
{
//look for thread local
//this can be set by initRequestContext
- ApplicationContext context = sharedApplicationContext;
- sharedSingletonContext = null;
+ ApplicationContext context = applicationContext;
+ singletonContext = null;
//Destroy context
if(context != null)
@@ -493,16 +522,17 @@ public class WebContextsService extends
// this is needed to get rid of ApplicationScoped beans which are cached inside the proxies...
webBeansContext.getBeanManagerImpl().clearCacheProxies();
- webBeansContext.getBeanManagerImpl().fireEvent(servletContext != null ? servletContext : new Object(), DestroyedLiteral.INSTANCE_APPLICATION_SCOPED);
+ Object payload = endObject != null && endObject instanceof ServletContext ? endObject : new Object();
+ webBeansContext.getBeanManagerImpl().fireEvent(payload, DestroyedLiteral.INSTANCE_APPLICATION_SCOPED);
}
/**
* Initialize singleton context.
- * @param servletContext servlet context
+ * @param startupObject servlet context
*/
- private void initSingletonContext(ServletContext servletContext)
+ protected void initSingletonContext(Object startupObject)
{
- if (sharedSingletonContext != null)
+ if (singletonContext != null)
{
return;
}
@@ -510,35 +540,37 @@ public class WebContextsService extends
SingletonContext newSingletonContext = new SingletonContext();
newSingletonContext.setActive(true);
- if (sharedSingletonContext == null)
+ if (singletonContext == null)
{
- sharedSingletonContext = newSingletonContext;
+ singletonContext = newSingletonContext;
}
- webBeansContext.getBeanManagerImpl().fireEvent(servletContext != null ? servletContext : new Object(), InitializedLiteral.INSTANCE_SINGLETON_SCOPED);
+ Object payLoad = startupObject != null && startupObject instanceof ServletContext ? (ServletContext) startupObject : new Object();
+ webBeansContext.getBeanManagerImpl().fireEvent(payLoad, InitializedLiteral.INSTANCE_SINGLETON_SCOPED);
}
/**
* Destroy singleton context.
- * @param servletContext servlet context
+ * @param endObject servlet context or other payload
*/
- private void destroySingletonContext(ServletContext servletContext)
+ protected void destroySingletonContext(Object endObject)
{
- SingletonContext context = sharedSingletonContext;
+ SingletonContext context = singletonContext;
if (context != null)
{
context.destroy();
}
- webBeansContext.getBeanManagerImpl().fireEvent(servletContext != null ? servletContext : new Object(), DestroyedLiteral.INSTANCE_SINGLETON_SCOPED);
+ Object payload = endObject != null && endObject instanceof ServletContext ? endObject : new Object();
+ webBeansContext.getBeanManagerImpl().fireEvent(payload, DestroyedLiteral.INSTANCE_SINGLETON_SCOPED);
}
/**
* Initialize conversation context.
* @param startObject either a ServletRequest or a ConversationContext
*/
- private void initConversationContext(Object startObject)
+ protected void initConversationContext(Object startObject)
{
if (conversationContexts.get() != null)
{
@@ -557,8 +589,13 @@ public class WebContextsService extends
/**
* Destroy conversation context.
*/
- private void destroyConversationContext()
+ protected void destroyConversationContext()
{
+ if (conversationContexts.get() == null)
+ {
+ return;
+ }
+
ConversationContext context = getConversationContext();
if (context != null)
@@ -623,7 +660,6 @@ public class WebContextsService extends
throw new BusyConversationException("Propogated conversation with cid=" + conversationId +
" is used by other request. It creates a new transient conversation");
}
-
}
return conversationContext;
@@ -640,7 +676,12 @@ public class WebContextsService extends
logger.log(Level.FINE, ">lazyStartSessionContext");
}
- Context context = getCurrentContext(RequestScoped.class);
+ RequestContext context = getRequestContext();
+ if (context == null)
+ {
+ logger.log(Level.WARNING, "Could NOT lazily initialize session context because NO active request context");
+ }
+
if (context instanceof ServletRequestContext)
{
ServletRequestContext requestContext = (ServletRequestContext) context;
@@ -656,23 +697,19 @@ public class WebContextsService extends
{
logger.log(Level.FINE, "Lazy SESSION context initialization SUCCESS");
}
+
+ return;
}
catch (Exception e)
{
logger.log(Level.SEVERE, WebBeansLoggerFacade.constructMessage(OWBLogConst.ERROR_0013, e));
}
-
- }
- else
- {
- logger.log(Level.WARNING, "Could NOT lazily initialize session context because NO active request context");
}
}
- else
- {
- initSessionContext(null);
- logger.log(Level.FINE, "Starting a non-web backed SessionContext");
- }
+
+ // in any other case
+ initSessionContext(null);
+ logger.log(Level.FINE, "Starting a non-web backed SessionContext");
}
Modified: openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java?rev=1677166&r1=1677165&r2=1677166&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java (original)
+++ openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java Fri May 1 15:23:47 2015
@@ -20,26 +20,22 @@ package org.apache.webbeans.web.lifecycl
import org.apache.webbeans.annotation.InitializedLiteral;
import org.apache.webbeans.config.OWBLogConst;
-import org.apache.webbeans.config.OpenWebBeansConfiguration;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.exception.WebBeansException;
import org.apache.webbeans.lifecycle.AbstractLifeCycle;
import org.apache.webbeans.logger.WebBeansLoggerFacade;
import org.apache.webbeans.spi.ResourceInjectionService;
import org.apache.webbeans.spi.adaptor.ELAdaptor;
-import org.apache.webbeans.web.context.WebContextsService;
import org.apache.webbeans.web.util.ServletCompatibilityUtil;
import javax.el.ELResolver;
+import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.spi.BeanManager;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.jsp.JspApplicationContext;
import javax.servlet.jsp.JspFactory;
-import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
/**
@@ -106,22 +102,6 @@ public final class WebContainerLifecycle
@Override
protected void afterStartApplication(final Object startupObject)
{
- String strDelay = getWebBeansContext().getOpenWebBeansConfiguration().getProperty(OpenWebBeansConfiguration.CONVERSATION_PERIODIC_DELAY,"150000");
- long delay = Long.parseLong(strDelay);
-
- service = Executors.newScheduledThreadPool(1, new ThreadFactory()
- {
- @Override
- public Thread newThread(Runnable runable)
- {
- Thread t = new Thread(runable, "OwbConversationCleaner-"
- + ServletCompatibilityUtil.getServletInfo((ServletContext) (startupObject)));
- t.setDaemon(true);
- return t;
- }
- });
- service.scheduleWithFixedDelay(new ConversationCleaner(), delay, delay, TimeUnit.MILLISECONDS);
-
ELAdaptor elAdaptor = getWebBeansContext().getService(ELAdaptor.class);
ELResolver resolver = elAdaptor.getOwbELResolver();
//Application is configured as JSP
@@ -135,8 +115,16 @@ public final class WebContainerLifecycle
// Add BeanManager to the 'javax.enterprise.inject.spi.BeanManager' servlet context attribute
ServletContext servletContext = (ServletContext)(startupObject);
servletContext.setAttribute(BeanManager.class.getName(), getBeanManager());
+ if (webBeansContext.getBeanManagerImpl().getNotificationManager().hasLifecycleObserver(InitializedLiteral.INSTANCE_APPLICATION_SCOPED))
+ {
+ // we need to temporarily start the ReqeustContext
+ webBeansContext.getContextsService().startContext(RequestScoped.class, null);
- webBeansContext.getBeanManagerImpl().fireEvent(servletContext != null ? servletContext : new Object(), InitializedLiteral.INSTANCE_APPLICATION_SCOPED);
+ webBeansContext.getBeanManagerImpl().fireEvent(servletContext != null ? servletContext : new Object(), InitializedLiteral.INSTANCE_APPLICATION_SCOPED);
+
+ // shut down the RequestContext again
+ webBeansContext.getContextsService().endContext(RequestScoped.class, null);
+ }
}
@Override
@@ -199,7 +187,7 @@ public final class WebContainerLifecycle
*/
private void cleanupShutdownThreadLocals()
{
- WebContextsService.removeThreadLocals();
+ contextsService.removeThreadLocals();
}
/**