You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by an...@apache.org on 2015/11/20 12:01:45 UTC

[1/3] tomee git commit: Possible race condition in set and get

Repository: tomee
Updated Branches:
  refs/heads/tomee-1.7.x 6140f87f0 -> 70ac3f9ce


Possible race condition in set and get

Possible race condition in set and get for
TransactionSynchronizationRegistry


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/879e03ab
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/879e03ab
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/879e03ab

Branch: refs/heads/tomee-1.7.x
Commit: 879e03ab40f4aa483e650641cba6f446dec0368b
Parents: 6140f87
Author: AndyGee <an...@gmx.de>
Authored: Fri Nov 20 11:59:53 2015 +0100
Committer: AndyGee <an...@gmx.de>
Committed: Fri Nov 20 11:59:53 2015 +0100

----------------------------------------------------------------------
 .../core/transaction/JtaTransactionPolicy.java  | 33 +++++++++++++++-----
 1 file changed, 26 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/879e03ab/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/JtaTransactionPolicy.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/JtaTransactionPolicy.java b/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/JtaTransactionPolicy.java
index 4755037..b51e79c 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/JtaTransactionPolicy.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/JtaTransactionPolicy.java
@@ -48,7 +48,7 @@ public abstract class JtaTransactionPolicy implements TransactionPolicy {
     protected final TransactionType transactionType;
 
     protected final TransactionManager transactionManager;
-    private final TransactionSynchronizationRegistry synchronizationRegistry;
+    private TransactionSynchronizationRegistry synchronizationRegistry;
     private Map<Object, Object> resources;
     private final List<TransactionSynchronization> synchronizations = new LinkedList<TransactionSynchronization>();
     private boolean rollbackOnly;
@@ -56,15 +56,24 @@ public abstract class JtaTransactionPolicy implements TransactionPolicy {
     public JtaTransactionPolicy(final TransactionType transactionType, final TransactionManager transactionManager) {
         this.transactionType = transactionType;
         this.transactionManager = transactionManager;
-        synchronizationRegistry = SystemInstance.get().getComponent(TransactionSynchronizationRegistry.class);
     }
 
+    private TransactionSynchronizationRegistry getSynchronizationRegistry() {
+        if (null == this.synchronizationRegistry) {
+            this.synchronizationRegistry = SystemInstance.get().getComponent(TransactionSynchronizationRegistry.class);
+        }
+
+        return this.synchronizationRegistry;
+    }
+
+    @Override
     public TransactionType getTransactionType() {
         return transactionType;
     }
 
     public abstract Transaction getCurrentTransaction();
 
+    @Override
     public boolean isTransactionActive() {
         final Transaction trasaction = getCurrentTransaction();
         if (trasaction == null) {
@@ -79,6 +88,7 @@ public abstract class JtaTransactionPolicy implements TransactionPolicy {
         }
     }
 
+    @Override
     public boolean isRollbackOnly() {
         final Transaction trasaction = getCurrentTransaction();
         if (trasaction != null) {
@@ -93,6 +103,7 @@ public abstract class JtaTransactionPolicy implements TransactionPolicy {
         }
     }
 
+    @Override
     public void setRollbackOnly() {
         setRollbackOnly(null);
     }
@@ -107,9 +118,10 @@ public abstract class JtaTransactionPolicy implements TransactionPolicy {
         }
     }
 
+    @Override
     public Object getResource(final Object key) {
         if (isTransactionActive()) {
-            return synchronizationRegistry.getResource(key);
+            return this.getSynchronizationRegistry().getResource(key);
         }
 
         if (resources == null) {
@@ -118,9 +130,10 @@ public abstract class JtaTransactionPolicy implements TransactionPolicy {
         return resources.get(key);
     }
 
+    @Override
     public void putResource(final Object key, final Object value) {
         if (isTransactionActive()) {
-            synchronizationRegistry.putResource(key, value);
+            this.getSynchronizationRegistry().putResource(key, value);
         }
 
         if (resources == null) {
@@ -129,10 +142,12 @@ public abstract class JtaTransactionPolicy implements TransactionPolicy {
         resources.put(key, value);
     }
 
+    @Override
     public Object removeResource(final Object key) {
         if (isTransactionActive()) {
-            final Object value = synchronizationRegistry.getResource(key);
-            synchronizationRegistry.putResource(key, null);
+            final TransactionSynchronizationRegistry sr = this.getSynchronizationRegistry();
+            final Object value = sr.getResource(key);
+            sr.putResource(key, null);
             return value;
         }
 
@@ -142,13 +157,16 @@ public abstract class JtaTransactionPolicy implements TransactionPolicy {
         return resources.remove(key);
     }
 
+    @Override
     public void registerSynchronization(final TransactionSynchronization synchronization) {
         if (isTransactionActive()) {
-            synchronizationRegistry.registerInterposedSynchronization(new Synchronization() {
+            this.getSynchronizationRegistry().registerInterposedSynchronization(new Synchronization() {
+                @Override
                 public void beforeCompletion() {
                     synchronization.beforeCompletion();
                 }
 
+                @Override
                 public void afterCompletion(final int s) {
                     final TransactionSynchronization.Status status;
                     if (s == Status.STATUS_COMMITTED) {
@@ -185,6 +203,7 @@ public abstract class JtaTransactionPolicy implements TransactionPolicy {
         }
     }
 
+    @Override
     public void enlistResource(final XAResource xaResource) throws SystemException {
         final Transaction transaction = getCurrentTransaction();
         if (transaction != null) {


[2/3] tomee git commit: EOL

Posted by an...@apache.org.
EOL


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/4662843a
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/4662843a
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/4662843a

Branch: refs/heads/tomee-1.7.x
Commit: 4662843a3020a7b2fa43a53fdee66c7065f0874b
Parents: 879e03a
Author: AndyGee <an...@gmx.de>
Authored: Fri Nov 20 12:00:41 2015 +0100
Committer: AndyGee <an...@gmx.de>
Committed: Fri Nov 20 12:00:41 2015 +0100

----------------------------------------------------------------------
 examples/applet/pom.xml                         |   2 +-
 .../WebApp1/pom.xml                             | 206 +++----
 .../WebApp2/pom.xml                             | 196 +++----
 examples/cdi-produces-field/README.md           | 540 +++++++++----------
 examples/myfaces-codi-demo/README.md            | 128 ++---
 5 files changed, 536 insertions(+), 536 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/4662843a/examples/applet/pom.xml
----------------------------------------------------------------------
diff --git a/examples/applet/pom.xml b/examples/applet/pom.xml
index b41c2c6..2d5825c 100644
--- a/examples/applet/pom.xml
+++ b/examples/applet/pom.xml
@@ -57,7 +57,7 @@
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
+        <artifactId>maven-compiler-plugin</artifactId>
         <version>3.1</version>
         <configuration>
           <source>1.6</source>

http://git-wip-us.apache.org/repos/asf/tomee/blob/4662843a/examples/bval-evaluation-redeployment/WebApp1/pom.xml
----------------------------------------------------------------------
diff --git a/examples/bval-evaluation-redeployment/WebApp1/pom.xml b/examples/bval-evaluation-redeployment/WebApp1/pom.xml
index 8935c5a..65820d1 100644
--- a/examples/bval-evaluation-redeployment/WebApp1/pom.xml
+++ b/examples/bval-evaluation-redeployment/WebApp1/pom.xml
@@ -1,103 +1,103 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.superbiz</groupId>
-    <artifactId>bval-evaluation-redeployment</artifactId>
-    <version>1.1.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>WebApp1</artifactId>
-  <version>1.1.1-SNAPSHOT</version>
-  <packaging>war</packaging>
-
-  <name>WebApp1</name>
-
-  <properties>
-    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.openejb</groupId>
-      <artifactId>javaee-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.jaxrs</groupId>
-      <artifactId>jackson-jaxrs-json-provider</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.openejb</groupId>
-      <artifactId>openejb-cxf-rs</artifactId>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <configuration>
-          <source>1.6</source>
-          <target>1.6</target>
-          <compilerArguments>
-            <endorseddirs>${endorsed.dir}</endorseddirs>
-          </compilerArguments>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-war-plugin</artifactId>
-        <configuration>
-          <failOnMissingWebXml>false</failOnMissingWebXml>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>validate</phase>
-            <goals>
-              <goal>copy</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${endorsed.dir}</outputDirectory>
-              <silent>true</silent>
-              <artifactItems>
-                <artifactItem>
-                  <groupId>javax</groupId>
-                  <artifactId>javaee-endorsed-api</artifactId>
-                  <version>6.0</version>
-                  <type>jar</type>
-                </artifactItem>
-              </artifactItems>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.superbiz</groupId>
+    <artifactId>bval-evaluation-redeployment</artifactId>
+    <version>1.1.1-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>WebApp1</artifactId>
+  <version>1.1.1-SNAPSHOT</version>
+  <packaging>war</packaging>
+
+  <name>WebApp1</name>
+
+  <properties>
+    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>javaee-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.jaxrs</groupId>
+      <artifactId>jackson-jaxrs-json-provider</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>openejb-cxf-rs</artifactId>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.6</source>
+          <target>1.6</target>
+          <compilerArguments>
+            <endorseddirs>${endorsed.dir}</endorseddirs>
+          </compilerArguments>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-war-plugin</artifactId>
+        <configuration>
+          <failOnMissingWebXml>false</failOnMissingWebXml>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>validate</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${endorsed.dir}</outputDirectory>
+              <silent>true</silent>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>javax</groupId>
+                  <artifactId>javaee-endorsed-api</artifactId>
+                  <version>6.0</version>
+                  <type>jar</type>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/tomee/blob/4662843a/examples/bval-evaluation-redeployment/WebApp2/pom.xml
----------------------------------------------------------------------
diff --git a/examples/bval-evaluation-redeployment/WebApp2/pom.xml b/examples/bval-evaluation-redeployment/WebApp2/pom.xml
index 8b86921..55675d6 100644
--- a/examples/bval-evaluation-redeployment/WebApp2/pom.xml
+++ b/examples/bval-evaluation-redeployment/WebApp2/pom.xml
@@ -1,98 +1,98 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.superbiz</groupId>
-    <artifactId>bval-evaluation-redeployment</artifactId>
-    <version>1.1.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>WebApp2</artifactId>
-  <version>1.1.1-SNAPSHOT</version>
-  <packaging>war</packaging>
-
-  <name>WebApp2</name>
-
-  <properties>
-    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.openejb</groupId>
-      <artifactId>javaee-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.jaxrs</groupId>
-      <artifactId>jackson-jaxrs-json-provider</artifactId>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <configuration>
-          <source>1.6</source>
-          <target>1.6</target>
-          <compilerArguments>
-            <endorseddirs>${endorsed.dir}</endorseddirs>
-          </compilerArguments>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-war-plugin</artifactId>
-        <configuration>
-          <failOnMissingWebXml>false</failOnMissingWebXml>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>validate</phase>
-            <goals>
-              <goal>copy</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${endorsed.dir}</outputDirectory>
-              <silent>true</silent>
-              <artifactItems>
-                <artifactItem>
-                  <groupId>javax</groupId>
-                  <artifactId>javaee-endorsed-api</artifactId>
-                  <version>6.0</version>
-                  <type>jar</type>
-                </artifactItem>
-              </artifactItems>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.superbiz</groupId>
+    <artifactId>bval-evaluation-redeployment</artifactId>
+    <version>1.1.1-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>WebApp2</artifactId>
+  <version>1.1.1-SNAPSHOT</version>
+  <packaging>war</packaging>
+
+  <name>WebApp2</name>
+
+  <properties>
+    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>javaee-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.jaxrs</groupId>
+      <artifactId>jackson-jaxrs-json-provider</artifactId>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.6</source>
+          <target>1.6</target>
+          <compilerArguments>
+            <endorseddirs>${endorsed.dir}</endorseddirs>
+          </compilerArguments>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-war-plugin</artifactId>
+        <configuration>
+          <failOnMissingWebXml>false</failOnMissingWebXml>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>validate</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${endorsed.dir}</outputDirectory>
+              <silent>true</silent>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>javax</groupId>
+                  <artifactId>javaee-endorsed-api</artifactId>
+                  <version>6.0</version>
+                  <type>jar</type>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/tomee/blob/4662843a/examples/cdi-produces-field/README.md
----------------------------------------------------------------------
diff --git a/examples/cdi-produces-field/README.md b/examples/cdi-produces-field/README.md
index 7deb6d5..bc62bfb 100644
--- a/examples/cdi-produces-field/README.md
+++ b/examples/cdi-produces-field/README.md
@@ -1,270 +1,270 @@
-Title: CDI field producer
-
-This example shows the usage of the @Produces annotation. @Produces is a CDI mechanism which allows defining a source
- for injection. This example shows one of two ways of declaring a producer. Instead of a producer method (see CDI-produces-disposes example)
-a producer field can be used. A producer field can be used instead of a simple getter method. It could be used to
-inject resources, such as persistence contexts. One caveat to using producer fields over producer
- methods is that a @Disposes method cannot be used in conjunction with @Produces field.
-
-## ConsoleHandler
-
-    package org.superbiz.cdi.produces.field;
-    
-    public class ConsoleHandler implements LogHandler {
-    
-        private String name;
-    
-        public ConsoleHandler(String name) {
-            this.name = name;
-        }
-    
-        @Override
-        public String getName() {
-            return name;
-        }
-    
-        @Override
-        public void writeLog(String s) {
-            System.out.printf("##### Handler: %s, Writing to the console!\n", getName());
-        }
-    }
-
-## DatabaseHandler
-
-    package org.superbiz.cdi.produces.field;
-    
-    public class DatabaseHandler implements LogHandler {
-    
-        private String name;
-    
-        public DatabaseHandler(String name) {
-            this.name = name;
-        }
-    
-        @Override
-        public String getName() {
-            return name;
-        }
-    
-        @Override
-        public void writeLog(String s) {
-            System.out.printf("##### Handler: %s, Writing to the database!\n", getName());
-            // Use connection to write log to database
-        }
-    }
-
-## FileHandler
-
-    package org.superbiz.cdi.produces.field;
-    
-    public class FileHandler implements LogHandler {
-    
-        private String name;
-    
-        public FileHandler(String name) {
-            this.name = name;
-        }
-    
-        @Override
-        public String getName() {
-            return name;
-        }
-    
-        @Override
-        public void writeLog(String s) {
-            System.out.printf("##### Handler: %s, Writing to the file!\n", getName());
-            // Write to log file
-        }
-    }
-
-## LogFactory
-
-	package org.superbiz.cdi.produces.field;
-	
-	import javax.enterprise.inject.Produces;
-	
-	public class LogFactory {
-	
-	    private int type = 2;
-	    
-	    @Produces
-	    LogHandler handler;
-	    
-	    public LogFactory(){
-	    	handler = getLogHandler();
-	    }
-	
-	    public LogHandler getLogHandler() {
-	        switch (type) {
-	            case 1:
-	                return new FileHandler("@Produces created FileHandler!");
-	            case 2:
-	                return new DatabaseHandler("@Produces created DatabaseHandler!");
-	            case 3:
-	            default:
-	                return new ConsoleHandler("@Produces created ConsoleHandler!");
-	        }
-	
-	    }
-	}
-
-## Logger
-
-    package org.superbiz.cdi.produces.field;
-    
-    public interface Logger {
-    
-        public void log(String s);
-    
-        public LogHandler getHandler();
-    }
-
-## LoggerImpl
-
-    package org.superbiz.cdi.produces.field;
-    
-    import javax.inject.Inject;
-    import javax.inject.Named;
-    
-    @Named("logger")
-    public class LoggerImpl implements Logger {
-    
-        @Inject
-        private LogHandler handler;
-    
-        @Override
-        public void log(String s) {
-            getHandler().writeLog(s);
-        }
-    
-        public LogHandler getHandler() {
-            return handler;
-        }
-    }
-
-## LogHandler
-
-    package org.superbiz.cdi.produces.field;
-    
-    public interface LogHandler {
-    
-        public String getName();
-    
-        public void writeLog(String s);
-    }
-
-## beans.xml
-
-    <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
-                                http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
-    
-    </beans>
-
-## LoggerTest
-
-    package org.superbiz.cdi.produces.field;
-    
-    import org.junit.After;
-    import org.junit.Before;
-    import org.junit.Test;
-    
-    import javax.ejb.embeddable.EJBContainer;
-    import javax.inject.Inject;
-    import javax.naming.Context;
-    
-    import static junit.framework.Assert.assertNotNull;
-    import static org.junit.Assert.assertFalse;
-    import static org.junit.Assert.assertTrue;
-    
-    public class LoggerTest {
-    
-        @Inject
-        Logger logger;
-    
-        private Context ctxt;
-    
-        @Before
-        public void setUp() {
-            try {
-                ctxt = EJBContainer.createEJBContainer().getContext();
-                ctxt.bind("inject", this);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-    
-        @After
-        public void cleanUp() {
-            try {
-                ctxt.unbind("inject");
-                ctxt.close();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-    
-        @Test
-        public void testLogHandler() {
-            assertNotNull(logger);
-            assertFalse("Handler should not be a ConsoleHandler", logger.getHandler() instanceof ConsoleHandler);
-            assertFalse("Handler should not be a FileHandler", logger.getHandler() instanceof FileHandler);
-            assertTrue("Handler should be a DatabaseHandler", logger.getHandler() instanceof DatabaseHandler);
-            logger.log("##### Testing write\n");
-            logger = null;
-        }
-    
-    }
-
-# Running
-
-    
-    -------------------------------------------------------
-	 T E S T S
-	-------------------------------------------------------
-	Running org.superbiz.cdi.produces.field.LoggerTest
-	INFO - ********************************************************************************
-	INFO - OpenEJB http://tomee.apache.org/
-	INFO - Startup: Thu May 10 01:28:19 CDT 2012
-	INFO - Copyright 1999-2012 (C) Apache OpenEJB Project, All Rights Reserved.
-	INFO - Version: 4.0.0-beta-3-SNAPSHOT
-	INFO - Build date: 20120510
-	INFO - Build time: 04:06
-	INFO - ********************************************************************************
-	INFO - openejb.home = /home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field
-	INFO - openejb.base = /home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field
-	INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@a81b1fb
-	INFO - succeeded in installing singleton service
-	INFO - Using 'javax.ejb.embeddable.EJBContainer=true'
-	INFO - Cannot find the configuration file [conf/openejb.xml].  Will attempt to create one for the beans deployed.
-	INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
-	INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
-	INFO - Creating TransactionManager(id=Default Transaction Manager)
-	INFO - Creating SecurityService(id=Default Security Service)
-	INFO - Inspecting classpath for applications: 26 urls. Consider adjusting your exclude/include.  Current settings: openejb.deployments.classpath.exclude='', openejb.deployments.classpath.include='.*'
-	INFO - Searched 26 classpath urls in 2015 milliseconds.  Average 77 milliseconds per url.
-	INFO - Beginning load: /home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field/target/classes
-	INFO - Configuring enterprise application: /home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field
-	INFO - Auto-deploying ejb cdi-produces-field.Comp: EjbDeployment(deployment-id=cdi-produces-field.Comp)
-	INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
-	INFO - Auto-creating a container for bean cdi-produces-field.Comp: Container(type=MANAGED, id=Default Managed Container)
-	INFO - Creating Container(id=Default Managed Container)
-	INFO - Using directory /tmp for stateful session passivation
-	INFO - Enterprise application "/home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field" loaded.
-	INFO - Assembling app: /home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field
-	INFO - ignoreXmlConfiguration == true
-	INFO - ignoreXmlConfiguration == true
-	INFO - existing thread singleton service in SystemInstance() org.apache.openejb.cdi.ThreadSingletonServiceImpl@a81b1fb
-	INFO - OpenWebBeans Container is starting...
-	INFO - Adding OpenWebBeansPlugin : [CdiPlugin]
-	INFO - All injection points were validated successfully.
-	INFO - OpenWebBeans Container has started, it took [69] ms.
-	INFO - Deployed Application(path=/home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field)
-	##### Handler: @Produces created DatabaseHandler!, Writing to the database!
-	INFO - Undeploying app: /home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field
-	Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.79 sec
-	
-	Results :
-	
-	Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
-    
+Title: CDI field producer
+
+This example shows the usage of the @Produces annotation. @Produces is a CDI mechanism which allows defining a source
+ for injection. This example shows one of two ways of declaring a producer. Instead of a producer method (see CDI-produces-disposes example)
+a producer field can be used. A producer field can be used instead of a simple getter method. It could be used to
+inject resources, such as persistence contexts. One caveat to using producer fields over producer
+ methods is that a @Disposes method cannot be used in conjunction with @Produces field.
+
+## ConsoleHandler
+
+    package org.superbiz.cdi.produces.field;
+    
+    public class ConsoleHandler implements LogHandler {
+    
+        private String name;
+    
+        public ConsoleHandler(String name) {
+            this.name = name;
+        }
+    
+        @Override
+        public String getName() {
+            return name;
+        }
+    
+        @Override
+        public void writeLog(String s) {
+            System.out.printf("##### Handler: %s, Writing to the console!\n", getName());
+        }
+    }
+
+## DatabaseHandler
+
+    package org.superbiz.cdi.produces.field;
+    
+    public class DatabaseHandler implements LogHandler {
+    
+        private String name;
+    
+        public DatabaseHandler(String name) {
+            this.name = name;
+        }
+    
+        @Override
+        public String getName() {
+            return name;
+        }
+    
+        @Override
+        public void writeLog(String s) {
+            System.out.printf("##### Handler: %s, Writing to the database!\n", getName());
+            // Use connection to write log to database
+        }
+    }
+
+## FileHandler
+
+    package org.superbiz.cdi.produces.field;
+    
+    public class FileHandler implements LogHandler {
+    
+        private String name;
+    
+        public FileHandler(String name) {
+            this.name = name;
+        }
+    
+        @Override
+        public String getName() {
+            return name;
+        }
+    
+        @Override
+        public void writeLog(String s) {
+            System.out.printf("##### Handler: %s, Writing to the file!\n", getName());
+            // Write to log file
+        }
+    }
+
+## LogFactory
+
+	package org.superbiz.cdi.produces.field;
+	
+	import javax.enterprise.inject.Produces;
+	
+	public class LogFactory {
+	
+	    private int type = 2;
+	    
+	    @Produces
+	    LogHandler handler;
+	    
+	    public LogFactory(){
+	    	handler = getLogHandler();
+	    }
+	
+	    public LogHandler getLogHandler() {
+	        switch (type) {
+	            case 1:
+	                return new FileHandler("@Produces created FileHandler!");
+	            case 2:
+	                return new DatabaseHandler("@Produces created DatabaseHandler!");
+	            case 3:
+	            default:
+	                return new ConsoleHandler("@Produces created ConsoleHandler!");
+	        }
+	
+	    }
+	}
+
+## Logger
+
+    package org.superbiz.cdi.produces.field;
+    
+    public interface Logger {
+    
+        public void log(String s);
+    
+        public LogHandler getHandler();
+    }
+
+## LoggerImpl
+
+    package org.superbiz.cdi.produces.field;
+    
+    import javax.inject.Inject;
+    import javax.inject.Named;
+    
+    @Named("logger")
+    public class LoggerImpl implements Logger {
+    
+        @Inject
+        private LogHandler handler;
+    
+        @Override
+        public void log(String s) {
+            getHandler().writeLog(s);
+        }
+    
+        public LogHandler getHandler() {
+            return handler;
+        }
+    }
+
+## LogHandler
+
+    package org.superbiz.cdi.produces.field;
+    
+    public interface LogHandler {
+    
+        public String getName();
+    
+        public void writeLog(String s);
+    }
+
+## beans.xml
+
+    <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                                http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
+    
+    </beans>
+
+## LoggerTest
+
+    package org.superbiz.cdi.produces.field;
+    
+    import org.junit.After;
+    import org.junit.Before;
+    import org.junit.Test;
+    
+    import javax.ejb.embeddable.EJBContainer;
+    import javax.inject.Inject;
+    import javax.naming.Context;
+    
+    import static junit.framework.Assert.assertNotNull;
+    import static org.junit.Assert.assertFalse;
+    import static org.junit.Assert.assertTrue;
+    
+    public class LoggerTest {
+    
+        @Inject
+        Logger logger;
+    
+        private Context ctxt;
+    
+        @Before
+        public void setUp() {
+            try {
+                ctxt = EJBContainer.createEJBContainer().getContext();
+                ctxt.bind("inject", this);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    
+        @After
+        public void cleanUp() {
+            try {
+                ctxt.unbind("inject");
+                ctxt.close();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    
+        @Test
+        public void testLogHandler() {
+            assertNotNull(logger);
+            assertFalse("Handler should not be a ConsoleHandler", logger.getHandler() instanceof ConsoleHandler);
+            assertFalse("Handler should not be a FileHandler", logger.getHandler() instanceof FileHandler);
+            assertTrue("Handler should be a DatabaseHandler", logger.getHandler() instanceof DatabaseHandler);
+            logger.log("##### Testing write\n");
+            logger = null;
+        }
+    
+    }
+
+# Running
+
+    
+    -------------------------------------------------------
+	 T E S T S
+	-------------------------------------------------------
+	Running org.superbiz.cdi.produces.field.LoggerTest
+	INFO - ********************************************************************************
+	INFO - OpenEJB http://tomee.apache.org/
+	INFO - Startup: Thu May 10 01:28:19 CDT 2012
+	INFO - Copyright 1999-2012 (C) Apache OpenEJB Project, All Rights Reserved.
+	INFO - Version: 4.0.0-beta-3-SNAPSHOT
+	INFO - Build date: 20120510
+	INFO - Build time: 04:06
+	INFO - ********************************************************************************
+	INFO - openejb.home = /home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field
+	INFO - openejb.base = /home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field
+	INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@a81b1fb
+	INFO - succeeded in installing singleton service
+	INFO - Using 'javax.ejb.embeddable.EJBContainer=true'
+	INFO - Cannot find the configuration file [conf/openejb.xml].  Will attempt to create one for the beans deployed.
+	INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
+	INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
+	INFO - Creating TransactionManager(id=Default Transaction Manager)
+	INFO - Creating SecurityService(id=Default Security Service)
+	INFO - Inspecting classpath for applications: 26 urls. Consider adjusting your exclude/include.  Current settings: openejb.deployments.classpath.exclude='', openejb.deployments.classpath.include='.*'
+	INFO - Searched 26 classpath urls in 2015 milliseconds.  Average 77 milliseconds per url.
+	INFO - Beginning load: /home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field/target/classes
+	INFO - Configuring enterprise application: /home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field
+	INFO - Auto-deploying ejb cdi-produces-field.Comp: EjbDeployment(deployment-id=cdi-produces-field.Comp)
+	INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
+	INFO - Auto-creating a container for bean cdi-produces-field.Comp: Container(type=MANAGED, id=Default Managed Container)
+	INFO - Creating Container(id=Default Managed Container)
+	INFO - Using directory /tmp for stateful session passivation
+	INFO - Enterprise application "/home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field" loaded.
+	INFO - Assembling app: /home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field
+	INFO - ignoreXmlConfiguration == true
+	INFO - ignoreXmlConfiguration == true
+	INFO - existing thread singleton service in SystemInstance() org.apache.openejb.cdi.ThreadSingletonServiceImpl@a81b1fb
+	INFO - OpenWebBeans Container is starting...
+	INFO - Adding OpenWebBeansPlugin : [CdiPlugin]
+	INFO - All injection points were validated successfully.
+	INFO - OpenWebBeans Container has started, it took [69] ms.
+	INFO - Deployed Application(path=/home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field)
+	##### Handler: @Produces created DatabaseHandler!, Writing to the database!
+	INFO - Undeploying app: /home/daniel/projects/openejb/source/openejb/examples/cdi-produces-field
+	Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.79 sec
+	
+	Results :
+	
+	Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+    

http://git-wip-us.apache.org/repos/asf/tomee/blob/4662843a/examples/myfaces-codi-demo/README.md
----------------------------------------------------------------------
diff --git a/examples/myfaces-codi-demo/README.md b/examples/myfaces-codi-demo/README.md
index 49fd421..2a8cf72 100644
--- a/examples/myfaces-codi-demo/README.md
+++ b/examples/myfaces-codi-demo/README.md
@@ -1,65 +1,65 @@
-Title: MyFaces CODI Demo
-Notice:    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.
-
-<h2>Steps to run the example</h2>
-
-Build and start the demo:
-
-    mvn clean package tomee:run
-
-Open:
-
-    http://localhost:8080/myfaces-codi-1.1.1-SNAPSHOT/
-
-This example shows how to improve JSF2/CDI/BV/JPA applications with features provided by Apache MyFaces CODI and ExtVal.
-
-<h2>Intro of MyFaces CODI and ExtVal</h2>
-
-The Apache MyFaces Extensions CDI project (aka CODI) hosts portable extensions for Contexts and Dependency Injection (CDI - JSR 299). CODI is a toolbox for your CDI application. Like CDI itself CODI is focused on type-safety. It is a modularized and extensible framework. So it's easy to choose the needed parts to facilitate the daily work in your project.
-
-MyFaces Extensions Validator (aka ExtVal) is a JSF centric validation framework which is compatible with JSF 1.x and JSF 2.x.
-This example shows how it improves the default integration of Bean-Validation (JSR-303) with JSF2 as well as meta-data based cross-field validation.
-
-
-<h2>Illustrated Features</h2>
-
-<h3>Apache MyFaces CODI</h3>
-
-<ul>
-    <li><a href="./src/main/java/org/superbiz/myfaces/view/config/Pages.java" target="_blank">Type-safe view-config</a></li>
-    <li><a href="./src/main/java/org/superbiz/myfaces/view/InfoPage.java" target="_blank">Type-safe (custom) view-meta-data</a></li>
-    <li><a href="./src/main/java/org/superbiz/myfaces/view/MenuBean.java" target="_blank">Type-safe navigation</a></li>
-    <li><a href="./src/main/java/org/superbiz/myfaces/CustomJsfModuleConfig.java" target="_blank">Type-safe (specialized) config</a></li>
-    <li><a href="./src/main/java/org/superbiz/myfaces/CustomProjectStage.java" target="_blank">Type-safe custom project-stage</a></li>
-    <li><a href="./src/main/java/org/superbiz/myfaces/view/UserHolder.java" target="_blank">@WindowScoped</a></li>
-    <li><a href="./src/main/java/org/superbiz/myfaces/view/MenuBean.java" target="_blank">Controlling CODI scopes with WindowContext</a></li>
-    <li><a href="./src/main/java/org/superbiz/myfaces/view/FeedbackPage.java" target="_blank">@ViewAccessScoped</a></li>
-    <li><a href="./src/main/java/org/superbiz/myfaces/view/FeedbackPage.java" target="_blank">Manual conversation handling</a></li>
-    <li><a href="./src/main/java/org/superbiz/myfaces/view/security/LoginAccessDecisionVoter.java" target="_blank">Secured pages (AccessDecisionVoter)</a></li>
-    <li><a href="./src/main/java/org/superbiz/myfaces/repository/Repository.java" target="_blank">@Transactional</a></li>
-    <li><a href="./src/main/java/org/superbiz/myfaces/view/RegistrationPage.java" target="_blank">I18n (fluent API)</a></li>
-    <li><a href="./src/main/java/org/superbiz/myfaces/domain/validation/UniqueUserNameValidator.java" target="_blank">Dependency-Injection for JSR303 (BV) constraint-validators</a></li>
-    <li><a href="./src/main/java/org/superbiz/myfaces/DebugPhaseListener.java" target="_blank">Dependency-Injection for JSF phase-listeners</a></li>
-</ul>
-
-<h3>Apache MyFaces ExtVal</h3>
-
-<ul>
-    <li><a href="./src/main/java/org/superbiz/myfaces/view/RegistrationPage.java" target="_blank">Cross-Field validation (@Equals)</a></li>
-    <li><a href="./src/main/java/org/superbiz/myfaces/view/RegistrationPage.java" target="_blank">Type-safe group-validation (@BeanValidation) for JSF action-methods</a></li>
+Title: MyFaces CODI Demo
+Notice:    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.
+
+<h2>Steps to run the example</h2>
+
+Build and start the demo:
+
+    mvn clean package tomee:run
+
+Open:
+
+    http://localhost:8080/myfaces-codi-1.1.1-SNAPSHOT/
+
+This example shows how to improve JSF2/CDI/BV/JPA applications with features provided by Apache MyFaces CODI and ExtVal.
+
+<h2>Intro of MyFaces CODI and ExtVal</h2>
+
+The Apache MyFaces Extensions CDI project (aka CODI) hosts portable extensions for Contexts and Dependency Injection (CDI - JSR 299). CODI is a toolbox for your CDI application. Like CDI itself CODI is focused on type-safety. It is a modularized and extensible framework. So it's easy to choose the needed parts to facilitate the daily work in your project.
+
+MyFaces Extensions Validator (aka ExtVal) is a JSF centric validation framework which is compatible with JSF 1.x and JSF 2.x.
+This example shows how it improves the default integration of Bean-Validation (JSR-303) with JSF2 as well as meta-data based cross-field validation.
+
+
+<h2>Illustrated Features</h2>
+
+<h3>Apache MyFaces CODI</h3>
+
+<ul>
+    <li><a href="./src/main/java/org/superbiz/myfaces/view/config/Pages.java" target="_blank">Type-safe view-config</a></li>
+    <li><a href="./src/main/java/org/superbiz/myfaces/view/InfoPage.java" target="_blank">Type-safe (custom) view-meta-data</a></li>
+    <li><a href="./src/main/java/org/superbiz/myfaces/view/MenuBean.java" target="_blank">Type-safe navigation</a></li>
+    <li><a href="./src/main/java/org/superbiz/myfaces/CustomJsfModuleConfig.java" target="_blank">Type-safe (specialized) config</a></li>
+    <li><a href="./src/main/java/org/superbiz/myfaces/CustomProjectStage.java" target="_blank">Type-safe custom project-stage</a></li>
+    <li><a href="./src/main/java/org/superbiz/myfaces/view/UserHolder.java" target="_blank">@WindowScoped</a></li>
+    <li><a href="./src/main/java/org/superbiz/myfaces/view/MenuBean.java" target="_blank">Controlling CODI scopes with WindowContext</a></li>
+    <li><a href="./src/main/java/org/superbiz/myfaces/view/FeedbackPage.java" target="_blank">@ViewAccessScoped</a></li>
+    <li><a href="./src/main/java/org/superbiz/myfaces/view/FeedbackPage.java" target="_blank">Manual conversation handling</a></li>
+    <li><a href="./src/main/java/org/superbiz/myfaces/view/security/LoginAccessDecisionVoter.java" target="_blank">Secured pages (AccessDecisionVoter)</a></li>
+    <li><a href="./src/main/java/org/superbiz/myfaces/repository/Repository.java" target="_blank">@Transactional</a></li>
+    <li><a href="./src/main/java/org/superbiz/myfaces/view/RegistrationPage.java" target="_blank">I18n (fluent API)</a></li>
+    <li><a href="./src/main/java/org/superbiz/myfaces/domain/validation/UniqueUserNameValidator.java" target="_blank">Dependency-Injection for JSR303 (BV) constraint-validators</a></li>
+    <li><a href="./src/main/java/org/superbiz/myfaces/DebugPhaseListener.java" target="_blank">Dependency-Injection for JSF phase-listeners</a></li>
+</ul>
+
+<h3>Apache MyFaces ExtVal</h3>
+
+<ul>
+    <li><a href="./src/main/java/org/superbiz/myfaces/view/RegistrationPage.java" target="_blank">Cross-Field validation (@Equals)</a></li>
+    <li><a href="./src/main/java/org/superbiz/myfaces/view/RegistrationPage.java" target="_blank">Type-safe group-validation (@BeanValidation) for JSF action-methods</a></li>
 </ul>
\ No newline at end of file


[3/3] tomee git commit: Add injection point name for log

Posted by an...@apache.org.
Add injection point name for log


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/70ac3f9c
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/70ac3f9c
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/70ac3f9c

Branch: refs/heads/tomee-1.7.x
Commit: 70ac3f9ceb46244a7a3d774e4ba76e903698601b
Parents: 4662843
Author: AndyGee <an...@gmx.de>
Authored: Fri Nov 20 12:01:12 2015 +0100
Committer: AndyGee <an...@gmx.de>
Committed: Fri Nov 20 12:01:12 2015 +0100

----------------------------------------------------------------------
 .../org/apache/openejb/InjectionProcessor.java  | 14 +++++---
 .../activemq/ConnectionFactoryWrapper.java      | 26 ++++++++------
 .../resource/activemq/ConnectionWrapper.java    | 16 ++++++---
 .../resource/activemq/SessionWrapper.java       | 37 +++++++++++++++++++-
 4 files changed, 71 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/70ac3f9c/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java b/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java
index 6586214..a8e3b9d 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/InjectionProcessor.java
@@ -250,10 +250,7 @@ public class InjectionProcessor<T> {
 
                 if (value != null) {
 
-                    if("org.apache.activemq.ra.ActiveMQConnectionFactory".equals(value.getClass().getName())){
-                        //Wrap
-                        value = new ConnectionFactoryWrapper(value);
-                    }
+
 
                     final String prefix;
                     if (usePrefix) {
@@ -262,7 +259,14 @@ public class InjectionProcessor<T> {
                         prefix = "";
                     }
 
-                    objectRecipe.setProperty(prefix + injection.getName(), value);
+                    final String name = prefix + injection.getName();
+
+                    if("org.apache.activemq.ra.ActiveMQConnectionFactory".equals(value.getClass().getName())){
+                        //Wrap
+                        value = new ConnectionFactoryWrapper(name, value);
+                    }
+
+                    objectRecipe.setProperty(name, value);
                 } else {
                     logger.warning("Injection data not found in JNDI context: jndiName='" + injection.getJndiName() + "', target=" + injection.getTarget().getName() + "/" + injection.getName());
                 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/70ac3f9c/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionFactoryWrapper.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionFactoryWrapper.java b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionFactoryWrapper.java
index d0034f1..0e94c1d 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionFactoryWrapper.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionFactoryWrapper.java
@@ -27,23 +27,25 @@ public class ConnectionFactoryWrapper implements ConnectionFactory, TopicConnect
     private static final ArrayList<ConnectionWrapper> connections = new ArrayList<ConnectionWrapper>();
 
     private final org.apache.activemq.ra.ActiveMQConnectionFactory factory;
+    private final String name;
 
-    public ConnectionFactoryWrapper(final Object factory) {
+    public ConnectionFactoryWrapper(final String name, final Object factory) {
+        this.name = name;
         this.factory = org.apache.activemq.ra.ActiveMQConnectionFactory.class.cast(factory);
     }
 
     @Override
     public Connection createConnection() throws JMSException {
-        return getConnection(this.factory.createConnection());
+        return getConnection(this.name, this.factory.createConnection());
     }
 
     @Override
     public Connection createConnection(final String userName, final String password) throws JMSException {
-        return getConnection(this.factory.createConnection(userName, password));
+        return getConnection(this.name, this.factory.createConnection(userName, password));
     }
 
-    private static Connection getConnection(final Connection connection) {
-        final ConnectionWrapper wrapper = new ConnectionWrapper(connection);
+    private static Connection getConnection(final String name, final Connection connection) {
+        final ConnectionWrapper wrapper = new ConnectionWrapper(name, connection);
         connections.add(wrapper);
         return wrapper;
     }
@@ -55,36 +57,38 @@ public class ConnectionFactoryWrapper implements ConnectionFactory, TopicConnect
     public static void closeConnections() {
         final Iterator<ConnectionWrapper> iterator = connections.iterator();
 
+        ConnectionWrapper next;
         while (iterator.hasNext()) {
-            final ConnectionWrapper next = iterator.next();
+            next = iterator.next();
             iterator.remove();
             try {
                 next.close();
             } catch (final Exception e) {
                 //no-op
             } finally {
-                Logger.getLogger(ConnectionFactoryWrapper.class.getName()).log(Level.SEVERE, "Closed a JMS connection. You have an application that fails to close this connection");
+                Logger.getLogger(ConnectionFactoryWrapper.class.getName()).log(Level.SEVERE, "Closed a JMS connection. You have an application that fails to close a connection "
+                        + "created by this injection path: " + next.getName());
             }
         }
     }
 
     @Override
     public QueueConnection createQueueConnection() throws JMSException {
-        return QueueConnection.class.cast(getConnection(this.factory.createQueueConnection()));
+        return QueueConnection.class.cast(getConnection(this.name, this.factory.createQueueConnection()));
     }
 
     @Override
     public QueueConnection createQueueConnection(final String userName, final String password) throws JMSException {
-        return QueueConnection.class.cast(getConnection(this.factory.createQueueConnection(userName, password)));
+        return QueueConnection.class.cast(getConnection(this.name, this.factory.createQueueConnection(userName, password)));
     }
 
     @Override
     public TopicConnection createTopicConnection() throws JMSException {
-        return TopicConnection.class.cast(getConnection(this.factory.createTopicConnection()));
+        return TopicConnection.class.cast(getConnection(this.name, this.factory.createTopicConnection()));
     }
 
     @Override
     public TopicConnection createTopicConnection(final String userName, final String password) throws JMSException {
-        return TopicConnection.class.cast(getConnection(this.factory.createTopicConnection(userName, password)));
+        return TopicConnection.class.cast(getConnection(this.name, this.factory.createTopicConnection(userName, password)));
     }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/70ac3f9c/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionWrapper.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionWrapper.java b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionWrapper.java
index c5a4783..707e9bd 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionWrapper.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/ConnectionWrapper.java
@@ -33,15 +33,17 @@ public class ConnectionWrapper implements Connection, TopicConnection, QueueConn
 
     private final ArrayList<SessionWrapper> sessions = new ArrayList<SessionWrapper>();
 
+    private final String name;
     private final Connection con;
 
-    public ConnectionWrapper(final Connection con) {
+    public ConnectionWrapper(final String name, final Connection con) {
+        this.name = name;
         this.con = con;
     }
 
     @Override
     public Session createSession(final boolean transacted, final int acknowledgeMode) throws JMSException {
-        return getSession(con.createSession(transacted, acknowledgeMode));
+        return this.getSession(con.createSession(transacted, acknowledgeMode));
     }
 
     private Session getSession(final Session session) {
@@ -61,7 +63,7 @@ public class ConnectionWrapper implements Connection, TopicConnection, QueueConn
 
     @Override
     public TopicSession createTopicSession(final boolean transacted, final int acknowledgeMode) throws JMSException {
-        return TopicConnection.class.cast(this.con).createTopicSession(transacted, acknowledgeMode);
+        return TopicSession.class.cast(this.getSession(TopicConnection.class.cast(this.con).createTopicSession(transacted, acknowledgeMode)));
     }
 
     @Override
@@ -71,7 +73,7 @@ public class ConnectionWrapper implements Connection, TopicConnection, QueueConn
 
     @Override
     public QueueSession createQueueSession(final boolean transacted, final int acknowledgeMode) throws JMSException {
-        return QueueConnection.class.cast(this.con).createQueueSession(transacted, acknowledgeMode);
+        return QueueSession.class.cast(this.getSession(QueueConnection.class.cast(this.con).createQueueSession(transacted, acknowledgeMode)));
     }
 
     @Override
@@ -117,7 +119,8 @@ public class ConnectionWrapper implements Connection, TopicConnection, QueueConn
             } catch (final Exception e) {
                 //no-op
             } finally {
-                Logger.getLogger(ConnectionFactoryWrapper.class.getName()).log(Level.SEVERE, "Closed a JMS session. You have an application that fails to close this session");
+                Logger.getLogger(ConnectionFactoryWrapper.class.getName()).log(Level.SEVERE, "Closed a JMS session. You have an application that fails to close a session "
+                        + "created by this injection path: " + this.name);
             }
         }
 
@@ -164,4 +167,7 @@ public class ConnectionWrapper implements Connection, TopicConnection, QueueConn
     }
 
 
+    public String getName() {
+        return this.name;
+    }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/70ac3f9c/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/SessionWrapper.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/SessionWrapper.java b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/SessionWrapper.java
index 8d45658..5b19890 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/SessionWrapper.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/resource/activemq/SessionWrapper.java
@@ -21,16 +21,21 @@ import javax.jms.MessageProducer;
 import javax.jms.ObjectMessage;
 import javax.jms.Queue;
 import javax.jms.QueueBrowser;
+import javax.jms.QueueReceiver;
+import javax.jms.QueueSender;
+import javax.jms.QueueSession;
 import javax.jms.Session;
 import javax.jms.StreamMessage;
 import javax.jms.TemporaryQueue;
 import javax.jms.TemporaryTopic;
 import javax.jms.TextMessage;
 import javax.jms.Topic;
+import javax.jms.TopicPublisher;
+import javax.jms.TopicSession;
 import javax.jms.TopicSubscriber;
 import java.io.Serializable;
 
-public class SessionWrapper implements Session {
+public class SessionWrapper implements Session, TopicSession, QueueSession {
 
     private final ConnectionWrapper connectionWrapper;
     private final Session session;
@@ -140,6 +145,11 @@ public class SessionWrapper implements Session {
     }
 
     @Override
+    public TopicPublisher createPublisher(final Topic topic) throws JMSException {
+        return TopicSession.class.cast(this.session).createPublisher(topic);
+    }
+
+    @Override
     public ObjectMessage createObjectMessage() throws JMSException {
         return session.createObjectMessage();
     }
@@ -150,6 +160,16 @@ public class SessionWrapper implements Session {
     }
 
     @Override
+    public TopicSubscriber createSubscriber(final Topic topic) throws JMSException {
+        return TopicSession.class.cast(this.session).createSubscriber(topic);
+    }
+
+    @Override
+    public TopicSubscriber createSubscriber(final Topic topic, final String messageSelector, final boolean noLocal) throws JMSException {
+        return TopicSession.class.cast(this.session).createSubscriber(topic, messageSelector, noLocal);
+    }
+
+    @Override
     public void setMessageListener(final MessageListener listener) throws JMSException {
         session.setMessageListener(listener);
     }
@@ -170,6 +190,21 @@ public class SessionWrapper implements Session {
     }
 
     @Override
+    public QueueReceiver createReceiver(final Queue queue) throws JMSException {
+        return QueueSession.class.cast(this.session).createReceiver(queue);
+    }
+
+    @Override
+    public QueueReceiver createReceiver(final Queue queue, final String messageSelector) throws JMSException {
+        return QueueSession.class.cast(this.session).createReceiver(queue, messageSelector);
+    }
+
+    @Override
+    public QueueSender createSender(final Queue queue) throws JMSException {
+        return QueueSession.class.cast(this.session).createSender(queue);
+    }
+
+    @Override
     public TopicSubscriber createDurableSubscriber(final Topic topic, final String name) throws JMSException {
         return session.createDurableSubscriber(topic, name);
     }