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