You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by da...@apache.org on 2006/12/30 02:40:08 UTC
svn commit: r491149 [1/3] - in /incubator/openejb/trunk/openejb3:
assembly/openejb-standalone/src/main/resources/ container/
container/openejb-core/
container/openejb-core/src/main/java/org/apache/openejb/alt/config/
container/openejb-core/src/main/jav...
Author: dain
Date: Fri Dec 29 17:40:06 2006
New Revision: 491149
URL: http://svn.apache.org/viewvc?view=rev&rev=491149
Log:
OPENEJB-425 Add support for runtime enhancement of JPA classes
Added:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/TemporaryClassLoader.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/instrument/
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/SampleAnnotation.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/TemporaryClassLoaderTest.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/Employee.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/JpaTestObject.java
incubator/openejb/trunk/openejb3/container/openejb-javaagent/ (with props)
incubator/openejb/trunk/openejb3/container/openejb-javaagent/DISCLAIMER.txt
incubator/openejb/trunk/openejb3/container/openejb-javaagent/LICENSE.txt
incubator/openejb/trunk/openejb3/container/openejb-javaagent/NOTICE.txt
incubator/openejb/trunk/openejb3/container/openejb-javaagent/pom.xml
incubator/openejb/trunk/openejb3/container/openejb-javaagent/src/
incubator/openejb/trunk/openejb3/container/openejb-javaagent/src/main/
incubator/openejb/trunk/openejb3/container/openejb-javaagent/src/main/java/
incubator/openejb/trunk/openejb3/container/openejb-javaagent/src/main/java/org/
incubator/openejb/trunk/openejb3/container/openejb-javaagent/src/main/java/org/apache/
incubator/openejb/trunk/openejb3/container/openejb-javaagent/src/main/java/org/apache/openejb/
incubator/openejb/trunk/openejb3/container/openejb-javaagent/src/main/java/org/apache/openejb/javaagent/
incubator/openejb/trunk/openejb3/container/openejb-javaagent/src/main/java/org/apache/openejb/javaagent/Agent.java
incubator/openejb/trunk/openejb3/container/openejb-persistence/src/main/java/org/apache/openejb/persistence/PersistenceClassLoaderHandler.java
Removed:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/TempCodebase.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/temp-persistence.xml
Modified:
incubator/openejb/trunk/openejb3/assembly/openejb-standalone/src/main/resources/openejb
incubator/openejb/trunk/openejb3/assembly/openejb-standalone/src/main/resources/openejb.bat
incubator/openejb/trunk/openejb3/container/openejb-core/pom.xml
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/DeploymentLoader.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/DeploymentsFactory.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmContext.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/PersistenceUnitReference.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/SafeToolkit.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/JpaTest.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/iTest.java
incubator/openejb/trunk/openejb3/container/openejb-persistence/pom.xml
incubator/openejb/trunk/openejb3/container/openejb-persistence/src/main/java/org/apache/openejb/persistence/PersistenceDeployer.java
incubator/openejb/trunk/openejb3/container/openejb-persistence/src/main/java/org/apache/openejb/persistence/PersistenceUnitInfoImpl.java
incubator/openejb/trunk/openejb3/container/openejb-persistence/src/test/java/org/apache/openejb/persistence/OpenJpaProviderTest.java
incubator/openejb/trunk/openejb3/container/openejb-persistence/src/test/java/org/apache/openejb/persistence/PersistenceTest.java
incubator/openejb/trunk/openejb3/container/pom.xml
incubator/openejb/trunk/openejb3/examples/ejb-injection/ (props changed)
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/pom.xml
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/ejb-jar.xml
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/persistence.xml
incubator/openejb/trunk/openejb3/server/openejb-admin/src/main/java/org/apache/openejb/App.java
incubator/openejb/trunk/openejb3/server/openejb-ejbd/pom.xml
incubator/openejb/trunk/openejb3/server/openejb-http/pom.xml
incubator/openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpServer.java
incubator/openejb/trunk/openejb3/server/openejb-server/src/main/java/org/apache/openejb/server/Server.java
Modified: incubator/openejb/trunk/openejb3/assembly/openejb-standalone/src/main/resources/openejb
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/assembly/openejb-standalone/src/main/resources/openejb?view=diff&rev=491149&r1=491148&r2=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/assembly/openejb-standalone/src/main/resources/openejb (original)
+++ incubator/openejb/trunk/openejb3/assembly/openejb-standalone/src/main/resources/openejb Fri Dec 29 17:40:06 2006
@@ -77,28 +77,29 @@
OPTIONS="-Dopenejb.home=$OPENEJB_HOME"
OPENEJB_CORE_JAR="$OPENEJB_HOME/lib/openejb-core-${pom.version}.jar"
+OPENEJB_JAVAAGENT_JAR="$OPENEJB_HOME/lib/openejb-javaagent-${pom.version}.jar"
#============================================================
_command_help()
{
case $2 in
"validate")
- java -jar $OPENEJB_CORE_JAR validate --help
+ java -javaagent:$OPENEJB_JAVAAGENT_JAR -jar $OPENEJB_CORE_JAR validate --help
;;
"deploy")
- java -jar $OPENEJB_CORE_JAR deploy --help
+ java -javaagent:$OPENEJB_JAVAAGENT_JAR -jar $OPENEJB_CORE_JAR deploy --help
;;
"start")
- java -jar $OPENEJB_CORE_JAR start --help
+ java -javaagent:$OPENEJB_JAVAAGENT_JAR -jar $OPENEJB_CORE_JAR start --help
;;
"stop")
- java -jar $OPENEJB_CORE_JAR stop --help
+ java -javaagent:$OPENEJB_JAVAAGENT_JAR -jar $OPENEJB_CORE_JAR stop --help
;;
"test")
- java -jar $OPENEJB_CORE_JAR test --help
+ java -javaagent:$OPENEJB_JAVAAGENT_JAR -jar $OPENEJB_CORE_JAR test --help
;;
*)
- java -jar $OPENEJB_CORE_JAR
+ java -javaagent:$OPENEJB_JAVAAGENT_JAR -jar $OPENEJB_CORE_JAR
;;
esac
}
@@ -106,33 +107,33 @@
_command_deploy()
{
shift
- java -jar $OPENEJB_CORE_JAR deploy $@
+ java -javaagent:$OPENEJB_JAVAAGENT_JAR -jar $OPENEJB_CORE_JAR deploy $@
}
#============================================================
_command_validate()
{
shift
- java -jar $OPENEJB_CORE_JAR validate $@
+ java -javaagent:$OPENEJB_JAVAAGENT_JAR -jar $OPENEJB_CORE_JAR validate $@
}
#============================================================
_command_start()
{
- java -jar $OPENEJB_CORE_JAR start $@
+ java -javaagent:$OPENEJB_JAVAAGENT_JAR -jar $OPENEJB_CORE_JAR start $@
}
#============================================================
_command_stop()
{
- java -jar $OPENEJB_CORE_JAR stop $@
+ java -javaagent:$OPENEJB_JAVAAGENT_JAR -jar $OPENEJB_CORE_JAR stop $@
}
#============================================================
_test_intravm()
{
- java -jar $OPENEJB_CORE_JAR test local
+ java -javaagent:$OPENEJB_JAVAAGENT_JAR -jar $OPENEJB_CORE_JAR test local
}
#============================================================
_test_server()
{
- java -jar $OPENEJB_CORE_JAR test remote
+ java -javaagent:$OPENEJB_JAVAAGENT_JAR -jar $OPENEJB_CORE_JAR test remote
}
#============================================================
_command_test()
@@ -155,7 +156,7 @@
#============================================================
_test_help()
{
- java -jar $OPENEJB_CORE_JAR test --help
+ java -javaagent:$OPENEJB_JAVAAGENT_JAR -jar $OPENEJB_CORE_JAR test --help
}
#============================================================
_test_noargs()
Modified: incubator/openejb/trunk/openejb3/assembly/openejb-standalone/src/main/resources/openejb.bat
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/assembly/openejb-standalone/src/main/resources/openejb.bat?view=diff&rev=491149&r1=491148&r2=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/assembly/openejb-standalone/src/main/resources/openejb.bat (original)
+++ incubator/openejb/trunk/openejb3/assembly/openejb-standalone/src/main/resources/openejb.bat Fri Dec 29 17:40:06 2006
@@ -33,6 +33,7 @@
SETLOCAL
set OPENEJB_CORE_JAR=%OPENEJB_HOME%/lib/openejb-core-${pom.version}.jar
+set OPENEJB_JAVAAGENT_JAR=%OPENEJB_HOME%/lib/openejb-javaagent-${pom.version}.jar
rem find OPENEJB_HOME if it does not exist due to either an invalid value passed
rem by the user or the %0 problem on Windows 9x
@@ -78,25 +79,25 @@
REM================================================
:VALIDATE
shift
- java -jar %OPENEJB_CORE_JAR% validate %1 %2 %3 %4 %5 %6 %7 %8 %9
+ java -javaagent:%OPENEJB_JAVAAGENT_JAR% -jar %OPENEJB_CORE_JAR% validate %1 %2 %3 %4 %5 %6 %7 %8 %9
goto EOF
REM================================================
:DEPLOY
shift
- java -jar %OPENEJB_CORE_JAR% deploy %1 %2 %3 %4 %5 %6 %7 %8 %9
+ java -javaagent:%OPENEJB_JAVAAGENT_JAR% -jar %OPENEJB_CORE_JAR% deploy %1 %2 %3 %4 %5 %6 %7 %8 %9
goto EOF
REM================================================
:START_SERVER
shift
- java -jar %OPENEJB_CORE_JAR% start %1 %2 %3 %4 %5 %6 %7 %8 %9
+ java -javaagent:%OPENEJB_JAVAAGENT_JAR% -jar %OPENEJB_CORE_JAR% start %1 %2 %3 %4 %5 %6 %7 %8 %9
goto EOF
REM================================================
:STOP_SERVER
shift
- java -jar %OPENEJB_CORE_JAR% stop %1 %2 %3 %4 %5 %6 %7 %8 %9
+ java -javaagent:%OPENEJB_JAVAAGENT_JAR% -jar %OPENEJB_CORE_JAR% stop %1 %2 %3 %4 %5 %6 %7 %8 %9
goto EOF
REM================================================
@@ -106,44 +107,44 @@
REM================================================
:TEST_INTRAVM
- java -jar %OPENEJB_CORE_JAR% test local
+ java -javaagent:%OPENEJB_JAVAAGENT_JAR% -jar %OPENEJB_CORE_JAR% test local
if /I %P2% EQU _ goto TEST_SERVER
goto EOF
REM================================================
:TEST_SERVER
- java -jar %OPENEJB_CORE_JAR% test remote
+ java -javaagent:%OPENEJB_JAVAAGENT_JAR% -jar %OPENEJB_CORE_JAR% test remote
goto EOF
REM================================================
:HELP_TEST
- java -jar %OPENEJB_CORE_JAR% test --help
+ java -javaagent:%OPENEJB_JAVAAGENT_JAR% -jar %OPENEJB_CORE_JAR% test --help
goto EOF
REM================================================
:HELP_DEPLOY
- java -jar %OPENEJB_CORE_JAR% deploy --help
+ java -javaagent:%OPENEJB_JAVAAGENT_JAR% -jar %OPENEJB_CORE_JAR% deploy --help
goto EOF
REM================================================
:HELP_VALIDATE
- java -jar %OPENEJB_CORE_JAR% validate --help
+ java -javaagent:%OPENEJB_JAVAAGENT_JAR% -jar %OPENEJB_CORE_JAR% validate --help
goto EOF
REM================================================
:HELP_START
- java -jar %OPENEJB_CORE_JAR% start --help
+ java -javaagent:%OPENEJB_JAVAAGENT_JAR% -jar %OPENEJB_CORE_JAR% start --help
goto EOF
REM================================================
:HELP_STOP
- java -jar %OPENEJB_CORE_JAR% stop --help
+ java -javaagent:%OPENEJB_JAVAAGENT_JAR% -jar %OPENEJB_CORE_JAR% stop --help
goto EOF
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/pom.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/pom.xml?view=diff&rev=491149&r1=491148&r2=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/pom.xml (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/pom.xml Fri Dec 29 17:40:06 2006
@@ -40,11 +40,43 @@
</resources>
<plugins>
<plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>dependency-maven-plugin</artifactId>
+
+ <!-- TODO switch to maven version of plugin when it is released -->
+ <!--groupId>org.apache.maven.plugins</groupId-->
+ <!--artifactId>maven-dependency-plugin</artifactId-->
+
+ <executions>
+ <execution>
+ <id>copy-dependencies</id>
+ <phase>process-resources</phase>
+ <goals>
+ <goal>copy</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>openejb-javaagent</artifactId>
+ <version>${pom.version}</version>
+ <outputDirectory>${project.build.directory}</outputDirectory>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
+ <!-- Launch a new vm for each test -->
<forkMode>pertest</forkMode>
- <!-- argLine>-agentlib:jdwp=transport=dt_socket,server=y,address=5005</argLine -->
+
+ <!-- DEBUG: Uncomment this line and comment out the next -->
+ <!--<argLine>-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 -javaagent:${basedir}/target/openejb-javaagent-${pom.version}.jar</argLine>-->
+ <argLine>-javaagent:${basedir}/target/openejb-javaagent-${pom.version}.jar</argLine>
<systemProperties>
<property>
<name>openejb.home</name>
@@ -113,7 +145,7 @@
<configuration>
<namespace>http://openejb.apache.org/schemas/core</namespace>
<excludedClasses>org.apache.openejb.alt.config.ejb,org.apache.openejb.util.io,org.apache.openejb.InterfaceType,org.apache.openejb.BeanType</excludedClasses>
- </configuration>
+ </configuration>
</plugin>
</plugins>
</build>
@@ -129,6 +161,11 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-loader</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>openejb-javaagent</artifactId>
<version>${pom.version}</version>
</dependency>
<dependency>
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/DeploymentLoader.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/DeploymentLoader.java?view=diff&rev=491149&r1=491148&r2=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/DeploymentLoader.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/DeploymentLoader.java Fri Dec 29 17:40:06 2006
@@ -19,6 +19,7 @@
import org.apache.openejb.OpenEJB;
import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.core.TemporaryClassLoader;
import org.apache.openejb.alt.config.ejb.OpenejbJar;
import org.apache.openejb.alt.config.sys.Deployments;
import org.apache.openejb.jee.Application;
@@ -43,7 +44,6 @@
import java.net.JarURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
-import java.net.URLClassLoader;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.Enumeration;
@@ -280,7 +280,7 @@
URL appUrl = getFileUrl(appDir);
- ClassLoader tmpClassLoader = new URLClassLoader(new URL[]{appUrl}, OpenEJB.class.getClassLoader());
+ ClassLoader tmpClassLoader = new TemporaryClassLoader(new URL[]{appUrl}, OpenEJB.class.getClassLoader());
ResourceFinder finder = new ResourceFinder("", tmpClassLoader, appUrl);
@@ -364,7 +364,7 @@
classPath.addAll(ejbModules.values());
classPath.addAll(clientModules.values());
classPath.addAll(extraLibs);
- ClassLoader appClassLoader = new URLClassLoader(classPath.toArray(new URL[]{}), OpenEJB.class.getClassLoader());
+ ClassLoader appClassLoader = new TemporaryClassLoader(classPath.toArray(new URL[]{}), OpenEJB.class.getClassLoader());
AppModule appModule = new AppModule(appClassLoader, appDir.getAbsolutePath());
@@ -474,7 +474,7 @@
}
}
- ClassFinder classFinder = new ClassFinder(new URLClassLoader(new URL[]{baseUrl},classLoader), baseUrl);
+ ClassFinder classFinder = new ClassFinder(new TemporaryClassLoader(new URL[]{baseUrl},classLoader), baseUrl);
List<Class> beans = classFinder.findAnnotatedClasses(Stateless.class);
beans.addAll(classFinder.findAnnotatedClasses(Stateful.class));
beans.addAll(classFinder.findAnnotatedClasses(javax.ejb.MessageDriven.class));
@@ -528,7 +528,7 @@
private ClassLoader getClassLoader(File jarFile) throws OpenEJBException {
try {
URL[] urls = new URL[]{jarFile.toURL()};
- return new URLClassLoader(urls, OpenEJB.class.getClassLoader());
+ return new TemporaryClassLoader(urls, OpenEJB.class.getClassLoader());
} catch (MalformedURLException e) {
throw new OpenEJBException(ConfigurationFactory.messages.format("cl0001", jarFile.getAbsolutePath(), e.getMessage()));
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?view=diff&rev=491149&r1=491148&r2=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Fri Dec 29 17:40:06 2006
@@ -21,6 +21,7 @@
import org.apache.openejb.EnvProps;
import org.apache.openejb.Injection;
import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.javaagent.Agent;
import org.apache.openejb.core.ConnectorReference;
import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.core.TransactionManagerWrapper;
@@ -28,6 +29,8 @@
import org.apache.openejb.persistence.GlobalJndiDataSourceResolver;
import org.apache.openejb.persistence.PersistenceDeployer;
import org.apache.openejb.persistence.PersistenceDeployerException;
+import org.apache.openejb.persistence.PersistenceClassLoaderHandler;
+import org.apache.openejb.core.TemporaryClassLoader;
import org.apache.openejb.spi.SecurityService;
import org.apache.openejb.util.Logger;
import org.apache.openejb.util.OpenEJBErrorHandler;
@@ -51,6 +54,7 @@
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.lang.instrument.ClassFileTransformer;
public class Assembler extends AssemblerTool implements org.apache.openejb.spi.Assembler {
@@ -92,7 +96,9 @@
/* Get Configuration ////////////////////////////*/
String className = props.getProperty(EnvProps.CONFIGURATION_FACTORY);
- if (className == null) className = props.getProperty("openejb.configurator", "org.apache.openejb.alt.config.ConfigurationFactory");
+ if (className == null) {
+ className = props.getProperty("openejb.configurator", "org.apache.openejb.alt.config.ConfigurationFactory");
+ }
OpenEjbConfigurationFactory configFactory = (OpenEjbConfigurationFactory) toolkit.newInstance(className);
configFactory.init(props);
@@ -114,23 +120,23 @@
/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
}
- private static ThreadLocal context = new ThreadLocal();
+ private static ThreadLocal<Map<String, Object>> context = new ThreadLocal<Map<String, Object>>();
- public static void setContext(HashMap map) {
+ public static void setContext(Map<String, Object> map) {
context.set(map);
}
- public static HashMap getContext() {
- HashMap map = (HashMap) context.get();
+ public static Map<String, Object> getContext() {
+ Map<String, Object> map = context.get();
if (map == null){
- map = new HashMap();
+ map = new HashMap<String, Object>();
context.set(map);
}
return map;
}
public void build() throws OpenEJBException {
- setContext(new HashMap());
+ setContext(new HashMap<String, Object>());
try {
containerSystem = buildContainerSystem(config);
} catch (OpenEJBException ae) {
@@ -210,7 +216,7 @@
createSecurityService(configInfo);
/*[6] Assemble Connector(s) //////////////////////////////////////////*/
- HashMap connectionManagerMap = new HashMap();
+ Map<String, ConnectionManager> connectionManagerMap = new HashMap<String, ConnectionManager>();
// connectors are optional in the openejb_config.dtd
for (ConnectionManagerInfo cmInfo : configInfo.facilities.connectionManagers) {
ConnectionManager connectionManager = assembleConnectionManager(cmInfo);
@@ -219,9 +225,10 @@
// connectors are optional in the openejb_config.dtd
for (ConnectorInfo conInfo : configInfo.facilities.connectors) {
- ConnectionManager connectionManager = (ConnectionManager) connectionManagerMap.get(conInfo.connectionManagerId);
- if (connectionManager == null)
+ ConnectionManager connectionManager = connectionManagerMap.get(conInfo.connectionManagerId);
+ if (connectionManager == null) {
throw new RuntimeException(INVALID_CONNECTION_MANAGER_ERROR + conInfo.connectorId);
+ }
ManagedConnectionFactory managedConnectionFactory = assembleManagedConnectionFactory(conInfo.managedConnectionFactory);
@@ -232,37 +239,58 @@
JndiBuilder jndiBuilder = new JndiBuilder(containerSystem.getJNDIContext());
+ PersistenceClassLoaderHandler persistenceClassLoaderHandler = new PersistenceClassLoaderHandler() {
+ public void addTransformer(ClassLoader classLoader, ClassFileTransformer classFileTransformer) {
+ Agent.getInstrumentation().addTransformer(classFileTransformer);
+ }
+
+ public ClassLoader getNewTempClassLoader(ClassLoader classLoader) {
+ return new TemporaryClassLoader(classLoader);
+ }
+ };
+
+
HashMap<String, DeploymentInfo> deployments2 = new HashMap<String, DeploymentInfo>();
for (AppInfo appInfo : containerSystemInfo.applications) {
List<URL> jars = new ArrayList<URL>();
- for (EjbJarInfo info : appInfo.ejbJars) jars.add(toUrl(info.jarPath));
- for (ClientInfo info : appInfo.clients) jars.add(toUrl(info.codebase));
- for (String jarPath : appInfo.libs) jars.add(toUrl(jarPath));
+ for (EjbJarInfo info : appInfo.ejbJars) {
+ jars.add(toUrl(info.jarPath));
+ }
+ for (ClientInfo info : appInfo.clients) {
+ jars.add(toUrl(info.codebase));
+ }
+ for (String jarPath : appInfo.libs) {
+ jars.add(toUrl(jarPath));
+ }
+ // Create the class loader
ClassLoader classLoader = new URLClassLoader(jars.toArray(new URL[]{}), org.apache.openejb.OpenEJB.class.getClassLoader());
- EjbJarBuilder ejbJarBuilder = new EjbJarBuilder(classLoader);
- HashMap<String, Map> allFactories = new HashMap();
+ // JPA - Persistence Units MUST be processed first since they will add ClassFileTransformers
+ // to the class loader which must be added before any classes are loaded
+ HashMap<String, Map<String, EntityManagerFactory>> allFactories = new HashMap<String, Map<String, EntityManagerFactory>>();
for (EjbJarInfo ejbJar : appInfo.ejbJars) {
- PersistenceDeployer pm = null;
- Map<String, EntityManagerFactory> factories = null;
try {
- pm = new PersistenceDeployer(new GlobalJndiDataSourceResolver(null));
- URL url = new File(ejbJar.jarPath).toURL();
- ClassLoader tmpClassLoader = new URLClassLoader(new URL[]{url}, classLoader);
- ResourceFinder resourceFinder = new ResourceFinder("",tmpClassLoader,url);
- factories = pm.deploy(resourceFinder.findAll("META-INF/persistence.xml"),classLoader);
- } catch (PersistenceDeployerException e1) {
- throw new OpenEJBException(e1);
- } catch (IOException e) {
- throw new OpenEJBException(e);
- }
- allFactories.put(ejbJar.jarPath,factories);
- }
- for (EjbJarInfo ejbJar : appInfo.ejbJars) {
+ URL url = new File(ejbJar.jarPath).toURL();
+ ResourceFinder resourceFinder = new ResourceFinder("", classLoader, url);
+
+ PersistenceDeployer persistenceDeployer = new PersistenceDeployer(new GlobalJndiDataSourceResolver(null), persistenceClassLoaderHandler);
+ Map<String, EntityManagerFactory> factories = persistenceDeployer.deploy(resourceFinder.findAll("META-INF/persistence.xml"), classLoader);
+ allFactories.put(ejbJar.jarPath, factories);
+ } catch (PersistenceDeployerException e1) {
+ throw new OpenEJBException(e1);
+ } catch (IOException e) {
+ throw new OpenEJBException(e);
+ }
+ }
+
+ // EJB
+ EjbJarBuilder ejbJarBuilder = new EjbJarBuilder(classLoader);
+ for (EjbJarInfo ejbJar : appInfo.ejbJars) {
deployments2.putAll(ejbJarBuilder.build(ejbJar,allFactories));
}
+ // App Client
for (ClientInfo clientInfo : appInfo.clients) {
JndiEncBuilder jndiEncBuilder = new JndiEncBuilder(clientInfo.jndiEnc);
Context context = (Context) jndiEncBuilder.build().lookup("env");
@@ -290,7 +318,7 @@
}
}
-
+ // Containers
ContainersBuilder containersBuilder = new ContainersBuilder(containerSystemInfo, ((AssemblerTool)this).props);
List containers = (List) containersBuilder.buildContainers(deployments2);
for (int i1 = 0; i1 < containers.size(); i1++) {
@@ -304,7 +332,7 @@
}
}
- // roleMapping used later in buildMethodPermissions
+ // Security - roleMapping used later in buildMethodPermissions
AssemblerTool.RoleMapping roleMapping = new AssemblerTool.RoleMapping(configInfo.facilities.securityService.roleMappings);
org.apache.openejb.DeploymentInfo [] deployments = containerSystem.deployments();
for (int i = 0; i < deployments.length; i++) {
@@ -312,19 +340,21 @@
applyTransactionAttributes((org.apache.openejb.core.CoreDeploymentInfo) deployments[i], containerSystemInfo.methodTransactions);
}
+ // Security - apply role mappings
for (ContainerInfo container : containerSystemInfo.containers) {
for (EnterpriseBeanInfo beanInfo : container.ejbeans) {
CoreDeploymentInfo deployment = (CoreDeploymentInfo) containerSystem.getDeploymentInfo(beanInfo.ejbDeploymentId);
applySecurityRoleReference(deployment, beanInfo, roleMapping);
}
}
+
/*[4]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
for (JndiContextInfo contextInfo : configInfo.facilities.remoteJndiContexts) {
javax.naming.InitialContext cntx = assembleRemoteJndiContext(contextInfo);
containerSystem.getJNDIContext().bind("java:openejb/remote_jndi_contexts/" + contextInfo.jndiContextId, cntx);
}
- return containerSystem;
+ return containerSystem;
}
private URL toUrl(String jarPath) throws OpenEJBException {
@@ -359,5 +389,4 @@
SystemInstance.get().setComponent(TransactionManager.class, transactionManager);
containerSystem.getJNDIContext().bind("java:openejb/TransactionManager", transactionManager);
}
-
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java?view=diff&rev=491149&r1=491148&r2=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java Fri Dec 29 17:40:06 2006
@@ -22,6 +22,7 @@
import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.util.Messages;
+import javax.persistence.EntityManagerFactory;
import java.util.HashMap;
import java.util.Map;
@@ -37,7 +38,7 @@
this.classLoader = classLoader;
}
- public HashMap<String, DeploymentInfo> build(EjbJarInfo ejbJar,HashMap<String, Map> allFactories) throws OpenEJBException {
+ public HashMap<String, DeploymentInfo> build(EjbJarInfo ejbJar, Map<String, Map<String, EntityManagerFactory>> allFactories) throws OpenEJBException {
HashMap<String, DeploymentInfo> deployments = new HashMap<String, DeploymentInfo>();
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java?view=diff&rev=491149&r1=491148&r2=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java Fri Dec 29 17:40:06 2006
@@ -27,11 +27,9 @@
import org.apache.openejb.util.Messages;
import org.apache.openejb.util.SafeToolkit;
+import javax.persistence.EntityManagerFactory;
import java.io.File;
import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -42,10 +40,10 @@
private final List<InterceptorInfo> defaultInterceptors;
private final BeanType ejbType;
private final ClassLoader cl;
- private final Map<String, Map> factories;
+ private final Map<String, Map<String, EntityManagerFactory>> factories;
private List<Exception> warnings = new ArrayList<Exception>();
- public EnterpriseBeanBuilder(ClassLoader cl, EnterpriseBeanInfo bean, List<InterceptorInfo> defaultInterceptors, Map<String, Map> factories) {
+ public EnterpriseBeanBuilder(ClassLoader cl, EnterpriseBeanInfo bean, List<InterceptorInfo> defaultInterceptors, Map<String, Map<String, EntityManagerFactory>> factories) {
this.bean = bean;
this.defaultInterceptors = defaultInterceptors;
@@ -63,29 +61,6 @@
}
this.cl = cl;
this.factories = factories;
- }
-
- static class Loader {
- protected static final Messages messages = new Messages("org.apache.openejb.util.resources");
- private final ClassLoader classLoader;
- private final String ejbDeploymentId;
-
- public Loader(String codebase, String ejbDeploymentId) throws OpenEJBException {
- try {
- this.classLoader = new URLClassLoader(new URL[]{new File(codebase).toURL()});
- } catch (MalformedURLException e) {
- throw new OpenEJBException(messages.format("cl0001", codebase, e.getMessage()));
- }
- this.ejbDeploymentId = ejbDeploymentId;
- }
-
- public Class load(String className, String artifact) throws OpenEJBException {
- try {
- return classLoader.loadClass(className);
- } catch (ClassNotFoundException e) {
- throw new OpenEJBException(messages.format("classNotFound." + artifact, className, ejbDeploymentId, e.getMessage()));
- }
- }
}
public Object build() throws OpenEJBException {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?view=diff&rev=491149&r1=491148&r2=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java Fri Dec 29 17:40:06 2006
@@ -16,19 +16,6 @@
*/
package org.apache.openejb.assembler.classic;
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-import javax.naming.Context;
-import javax.naming.NamingException;
-import javax.persistence.EntityManagerFactory;
-import javax.transaction.TransactionManager;
-import javax.transaction.UserTransaction;
-
import org.apache.openejb.BeanType;
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.core.CoreUserTransaction;
@@ -40,6 +27,16 @@
import org.apache.openejb.core.ivm.naming.PersistenceUnitReference;
import org.apache.openejb.core.ivm.naming.Reference;
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.persistence.EntityManagerFactory;
+import javax.transaction.TransactionManager;
+import javax.transaction.UserTransaction;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
/**
* TODO: This class is essentially an over glorified sym-linker. The names
* we were linking to are no longer guaranteed to be what we assume them to
@@ -57,7 +54,7 @@
private final ResourceReferenceInfo[] resourceRefs;
private final PersistenceUnitInfo[] persistenceUnitRefs;
private final Map<String, EntityManagerFactory> entityManagerFactories;
- private final Map<String, Map> allFactories;
+ private final Map<String, Map<String, EntityManagerFactory>> allFactories;
private final String jarPath;
@@ -65,7 +62,7 @@
this(jndiEnc, null, null, null,null);
}
- public JndiEncBuilder(JndiEncInfo jndiEnc, String transactionType, BeanType ejbType, Map<String, Map> allFactories,String path) throws OpenEJBException {
+ public JndiEncBuilder(JndiEncInfo jndiEnc, String transactionType, BeanType ejbType, Map<String, Map<String, EntityManagerFactory>> allFactories,String path) throws OpenEJBException {
if (ejbType == null){
referenceWrapper = new DefaultReferenceWrapper();
} else if (ejbType.isEntity()) {
@@ -115,7 +112,7 @@
if(allFactories != null){
this.allFactories = allFactories;
} else {
- this.allFactories = new HashMap();
+ this.allFactories = new HashMap<String, Map<String, EntityManagerFactory>>();
}
this.jarPath = path;
@@ -123,7 +120,7 @@
if(this.allFactories.get(jarPath) != null){
entityManagerFactories = this.allFactories.get(jarPath);
} else {
- entityManagerFactories = new HashMap();
+ entityManagerFactories = new HashMap<String, EntityManagerFactory>();
}
}
@@ -352,14 +349,8 @@
* This method will currently support paths like ../../xyz/ejbmodule.jar#PuName, ././xyz/ejbmodule.jar#PuName
* and ejbmodule.jar#PuName. For all other types of path it will throw an exception stating an invalid
* path.The paths are calculated relative to the referencing component jar. See 16.10.2 in ejb core spec.
- *
- * @param allFactories
- * @param path
- * @param relativePath
- * @return
- * @throws OpenEJBException
*/
- private EntityManagerFactory findEntityManagerFactory(Map<String, Map> allFactories, String path, String puName) throws OpenEJBException{
+ private EntityManagerFactory findEntityManagerFactory(Map<String, Map<String, EntityManagerFactory>> allFactories, String path, String puName) throws OpenEJBException{
int index = puName.indexOf("#");
String relativePath = puName.substring(0,index);
String unitName = puName.substring(index+1,puName.length());
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/DeploymentsFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/DeploymentsFactory.java?view=diff&rev=491149&r1=491148&r2=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/DeploymentsFactory.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/DeploymentsFactory.java Fri Dec 29 17:40:06 2006
@@ -26,7 +26,6 @@
import org.apache.openejb.alt.config.ejb.EjbDeployment;
import org.apache.openejb.assembler.classic.EjbJarBuilder;
import org.apache.openejb.assembler.classic.EjbJarInfo;
-import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.persistence.GlobalJndiDataSourceResolver;
import org.apache.openejb.persistence.PersistenceDeployer;
import org.apache.openejb.persistence.PersistenceDeployerException;
@@ -38,7 +37,6 @@
import java.io.File;
import java.io.IOException;
import java.net.URL;
-import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -104,7 +102,7 @@
if (deployments != null){
return deployments;
}
- HashMap context = new HashMap();
+ Map<String, Object> context = new HashMap<String, Object>();
context.put(TransactionManager.class.getName(), transactionManager);
org.apache.openejb.assembler.classic.Assembler.setContext(context);
@@ -116,28 +114,26 @@
ClassLoader classLoader = (value instanceof ClassLoader) ? (ClassLoader) value : Thread.currentThread().getContextClassLoader();
EjbJarBuilder builder = new EjbJarBuilder(classLoader);
- deployments = new HashMap();
- HashMap<String, Map> allFactories = new HashMap();
+ deployments = new HashMap<String, DeploymentInfo>();
+ Map<String, Map<String, EntityManagerFactory>> allFactories = new HashMap<String, Map<String, EntityManagerFactory>>();
for (DeploymentModule module : deployedJars) {
if (!(module instanceof EjbModule)) {
continue;
}
- EjbModule jar = (EjbModule) module;
- PersistenceDeployer pm = null;
- Map<String, EntityManagerFactory> factories = null;
try {
- pm = new PersistenceDeployer(new GlobalJndiDataSourceResolver(null));
- URL url = new File(jar.getJarURI()).toURL();
- ClassLoader tmpClassLoader = new URLClassLoader(new URL[]{url}, classLoader);
- ResourceFinder resourceFinder = new ResourceFinder("",tmpClassLoader,url);
- factories = pm.deploy(resourceFinder.findAll("META-INF/persistence.xml"),classLoader);
- } catch (PersistenceDeployerException e1) {
- throw new OpenEJBException(e1);
- } catch (IOException e) {
- throw new OpenEJBException(e);
- }
- allFactories.put(jar.getJarURI(),factories);
- }
+ EjbModule jar = (EjbModule) module;
+ URL url = new File(jar.getJarURI()).toURL();
+ ResourceFinder resourceFinder = new ResourceFinder("", classLoader, url);
+
+ PersistenceDeployer persistenceDeployer = new PersistenceDeployer(new GlobalJndiDataSourceResolver(null), null);
+ Map<String, EntityManagerFactory> factories = persistenceDeployer.deploy(resourceFinder.findAll("META-INF/persistence.xml"), classLoader);
+ allFactories.put(jar.getJarURI(), factories);
+ } catch (PersistenceDeployerException e1) {
+ throw new OpenEJBException(e1);
+ } catch (IOException e) {
+ throw new OpenEJBException(e);
+ }
+ }
for (DeploymentModule module : deployedJars) {
if (!(module instanceof EjbModule)) {
@@ -158,7 +154,7 @@
HashMap<String, DeploymentInfo> ejbs = builder.build(jarInfo,allFactories);
for (EjbDeployment data : jar.getOpenejbJar().getEjbDeployment()) {
- ((CoreDeploymentInfo)ejbs.get(data.getDeploymentId())).setContainer(new ContainerPointer(data.getContainerId()));
+ (ejbs.get(data.getDeploymentId())).setContainer(new ContainerPointer(data.getContainerId()));
}
deployments.putAll(ejbs);
@@ -168,7 +164,7 @@
}
private void transferMethodTransactionInfos(EjbJarInfoBuilder infoBuilder) {
- List<MethodTransactionInfo> infos = new ArrayList();
+ List<MethodTransactionInfo> infos = new ArrayList<MethodTransactionInfo>();
if (assembly.getMethodTransactions() != null){
infos.addAll(Arrays.asList(assembly.getMethodTransactions()));
}
@@ -179,7 +175,7 @@
}
private void transferMethodPermissionInfos(EjbJarInfoBuilder infoBuilder) {
- List<MethodPermissionInfo> infos = new ArrayList();
+ List<MethodPermissionInfo> infos = new ArrayList<MethodPermissionInfo>();
if (assembly.getMethodPermissions() != null){
infos.addAll(Arrays.asList(assembly.getMethodPermissions()));
}
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/TemporaryClassLoader.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/TemporaryClassLoader.java?view=auto&rev=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/TemporaryClassLoader.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/TemporaryClassLoader.java Fri Dec 29 17:40:06 2006
@@ -0,0 +1,145 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.core;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.net.URLStreamHandlerFactory;
+
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.commons.EmptyVisitor;
+
+/**
+ * ClassLoader implementation that allows classes to be temporarily
+ * loaded and then thrown away. Useful for verifying and inspecting
+ * a class without first loading(and thus polluting) the parent
+ * ClassLoader.
+ * </p>
+ * This class is a proper subclass of URLClassLoader. This class
+ * will locally load any class except for those defined in the
+ * java.*, javax.* and sun.* packages and annotations all of which
+ * are loaded by with
+ * <code>Class.forName(name, resolve, getClass().getClassLoader())</code>
+ * @author Marc Prud'hommeaux
+ */
+// Note: this class is a fork from OpenJPA
+public class TemporaryClassLoader extends URLClassLoader {
+ public TemporaryClassLoader(ClassLoader parent) {
+ super(new URL[0], parent);
+ }
+
+ public TemporaryClassLoader(URL[] urls, ClassLoader parent) {
+ super(urls, parent);
+ }
+
+ public TemporaryClassLoader(URL[] urls) {
+ super(urls);
+ }
+
+ public TemporaryClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory) {
+ super(urls, parent, factory);
+ }
+
+ public Class loadClass(String name) throws ClassNotFoundException {
+ return loadClass(name, false);
+ }
+
+ protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
+ // see if we've already loaded it
+ Class c = findLoadedClass(name);
+ if (c != null) {
+ return c;
+ }
+
+ // bug #283. defer to system if the name is a protected name.
+ // "sun." is required for JDK 1.4, which has an access check for
+ // sun.reflect.GeneratedSerializationConstructorAccessor1
+ if (name.startsWith("java.") ||
+ name.startsWith("javax.") ||
+ name.startsWith("sun.")) {
+ return Class.forName(name, resolve, getClass().getClassLoader());
+ }
+
+ String resourceName = name.replace('.', '/') + ".class";
+ InputStream in = getResourceAsStream(resourceName);
+ if (in == null) {
+ throw new ClassNotFoundException(name);
+ }
+
+ // 80% of class files are smaller then 6k
+ ByteArrayOutputStream bout = new ByteArrayOutputStream(8 * 1024);
+
+ // copy the input stream into a byte array
+ byte[] bytes = new byte[0];
+ try {
+ byte[] buf = new byte[4 * 1024];
+ for (int count = -1; (count = in.read(buf)) >= 0;) {
+ bout.write(buf, 0, count);
+ }
+ bytes = bout.toByteArray();
+ } catch (IOException e) {
+ throw new ClassNotFoundException(name, e);
+ }
+
+ // Annotation classes must be loaded by the normal classloader
+ if (isAnnotationClass(bytes)) {
+ return Class.forName(name, resolve, getClass().getClassLoader());
+ }
+
+ // define the package
+ int packageEndIndex = name.lastIndexOf('.');
+ if (packageEndIndex != -1) {
+ String packageName = name.substring(0, packageEndIndex);
+ if (getPackage(packageName) == null) {
+ definePackage(packageName, null, null, null, null, null, null, null);
+ }
+ }
+
+ // define the class
+ try {
+ return defineClass(name, bytes, 0, bytes.length);
+ } catch (SecurityException e) {
+ // possible prohibited package: defer to the parent
+ return super.loadClass(name, resolve);
+ }
+ }
+
+ /**
+ * Fast-parse the given class bytecode to determine if it is an
+ * annotation class.
+ */
+ private static boolean isAnnotationClass(byte[] bytes) {
+ IsAnnotationVisitor isAnnotationVisitor = new IsAnnotationVisitor();
+ ClassReader classReader = new ClassReader(bytes);
+ classReader.accept(isAnnotationVisitor, true);
+ return isAnnotationVisitor.isAnnotation;
+ }
+
+ public static class IsAnnotationVisitor extends EmptyVisitor {
+ public boolean isAnnotation = false;
+
+ public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
+ isAnnotation = (access & Opcodes.ACC_ANNOTATION) != 0;
+ }
+
+ }
+}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java?view=diff&rev=491149&r1=491148&r2=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java Fri Dec 29 17:40:06 2006
@@ -17,7 +17,21 @@
*/
package org.apache.openejb.core.cmp.jpa;
-import org.apache.openejb.OpenEJBException;
+import java.util.List;
+import java.util.Map;
+import java.util.WeakHashMap;
+import javax.ejb.CreateException;
+import javax.ejb.EJBObject;
+import javax.ejb.EntityBean;
+import javax.ejb.FinderException;
+import javax.ejb.RemoveException;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceException;
+import javax.persistence.Query;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+
import org.apache.openejb.SystemException;
import org.apache.openejb.alt.containers.castor_cmp11.KeyGenerator;
import org.apache.openejb.alt.containers.castor_cmp11.KeyGeneratorFactory;
@@ -25,120 +39,53 @@
import org.apache.openejb.core.ThreadContext;
import org.apache.openejb.core.cmp.CmpCallback;
import org.apache.openejb.core.cmp.CmpEngine;
-import org.apache.openejb.persistence.PersistenceUnitInfoImpl;
-import org.apache.openejb.resource.jdbc.JdbcConnectionFactory;
import org.apache.openejb.util.Logger;
import org.apache.openjpa.event.AbstractLifecycleListener;
import org.apache.openjpa.event.LifecycleEvent;
import org.apache.openjpa.persistence.OpenJPAEntityManager;
-import javax.ejb.CreateException;
-import javax.ejb.EntityBean;
-import javax.ejb.FinderException;
-import javax.ejb.RemoveException;
-import javax.ejb.EJBObject;
-import javax.naming.InitialContext;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceException;
-import javax.persistence.Query;
-import javax.persistence.spi.PersistenceProvider;
-import javax.persistence.spi.PersistenceUnitTransactionType;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.WeakHashMap;
-
public class JpaCmpEngine implements CmpEngine {
private static final Logger logger = Logger.getInstance("OpenEJB", "org.apache.openejb.core.cmp");
private static final Object[] NO_ARGS = new Object[0];
private final CmpCallback cmpCallback;
private final TransactionManager transactionManager;
-// private final EntityManager entityManager;
private final Map<Transaction, EntityManager> transactionData = new WeakHashMap<Transaction, EntityManager>();
- private EntityManagerFactory entityManagerFactory;
- public JpaCmpEngine(CmpCallback cmpCallback, TransactionManager transactionManager, String connectorName, ClassLoader classLoader) throws OpenEJBException {
+ public JpaCmpEngine(CmpCallback cmpCallback, TransactionManager transactionManager, String connectorName, ClassLoader classLoader) {
this.cmpCallback = cmpCallback;
this.transactionManager = transactionManager;
-
- try {
- JdbcConnectionFactory dataSource;
- String jdbcName = "java:openejb/connector/" + connectorName;
- dataSource = (JdbcConnectionFactory) new InitialContext().lookup(jdbcName);
- if (dataSource == null) {
- throw new OpenEJBException(jdbcName + " does not exist");
- }
-
- PersistenceUnitInfoImpl unitInfo = new PersistenceUnitInfoImpl();
- unitInfo.setPersistenceUnitName("CMP");
- unitInfo.setPersistenceProviderClassName("org.apache.openjpa.persistence.PersistenceProviderImpl");
- unitInfo.setClassLoader(classLoader);
- unitInfo.setExcludeUnlistedClasses(false);
-// unitInfo.setJarFileUrls(pu.getJarFile());
-
- unitInfo.setJtaDataSource(dataSource);
-
-// unitInfo.setManagedClassNames(pu.getClazz());
- unitInfo.setMappingFileNames(Collections.singletonList("META-INF/jpa.mapping.xml"));
-
- // Handle Properties
- Properties properties = new Properties();
- unitInfo.setProperties(properties);
-
- unitInfo.setTransactionType(PersistenceUnitTransactionType.JTA);
-
- // Non JTA Datasource
-// DataSource nonJtaDataSource = dataSourceResolver.getDataSource(dataSource);
-// unitInfo.setNonJtaDataSource(nonJtaDataSource);
-
-// String rootUrlPath = url.toExternalForm().replaceFirst("!?META-INF/persistence.xml$","");
-// unitInfo.setPersistenceUnitRootUrl(new URL(rootUrlPath));
-
- // TODO - What do we do here?
- // unitInfo.setNewTempClassLoader(???);
-
- String persistenceProviderClassName = unitInfo.getPersistenceProviderClassName();
- Class clazz = classLoader.loadClass(persistenceProviderClassName);
- PersistenceProvider persistenceProvider = (PersistenceProvider) clazz.newInstance();
- entityManagerFactory = persistenceProvider.createContainerEntityManagerFactory(unitInfo, new HashMap());
- } catch (Exception e) {
- throw new OpenEJBException(e);
- }
}
public void deploy(CoreDeploymentInfo deploymentInfo) throws SystemException {
configureKeyGenerator(deploymentInfo);
}
- private EntityManager getEntityManager() {
+ private EntityManager getEntityManager(CoreDeploymentInfo deploymentInfo) {
try {
Transaction transaction = transactionManager.getTransaction();
EntityManager entityManager = transactionData.get(transaction);
if (entityManager == null) {
+ EntityManagerFactory entityManagerFactory = (EntityManagerFactory) deploymentInfo.getJndiEnc().lookup("env/openejb/cmp");
+
// todo close entityManager when tx completes
entityManager = entityManagerFactory.createEntityManager();
if (entityManager instanceof OpenJPAEntityManager) {
OpenJPAEntityManager openjpaEM = (OpenJPAEntityManager) entityManager;
openjpaEM.addLifecycleListener(new OpenJPALifecycleListener(), (Class[])null);
}
-// entityManager.joinTransaction();
transactionData.put(transaction, entityManager);
}
return entityManager;
- } catch (javax.transaction.SystemException e) {
+ } catch (Exception e) {
throw new RuntimeException(e);
}
}
public Object createBean(EntityBean bean, ThreadContext callContext) throws CreateException {
- EntityManager entityManager = getEntityManager();
+ CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
+ EntityManager entityManager = getEntityManager(deploymentInfo);
// TODO verify that extract primary key requires a flush followed by a merge
entityManager.persist(bean);
@@ -146,7 +93,6 @@
bean = entityManager.merge(bean);
// extract the primary key from the bean
- CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
KeyGenerator kg = deploymentInfo.getKeyGenerator();
Object primaryKey = kg.getPrimaryKey(bean);
@@ -154,23 +100,26 @@
}
public Object loadBean(ThreadContext callContext, Object primaryKey) {
- Class<?> beanClass = callContext.getDeploymentInfo().getBeanClass();
- EntityManager entityManager = getEntityManager();
+ CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
+ Class<?> beanClass = deploymentInfo.getBeanClass();
+ EntityManager entityManager = getEntityManager(deploymentInfo);
Object bean = entityManager.find(beanClass, primaryKey);
return bean;
}
public void removeBean(ThreadContext callContext) {
- Class<?> beanClass = callContext.getDeploymentInfo().getBeanClass();
+ CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
+ Class<?> beanClass = deploymentInfo.getBeanClass();
- EntityManager entityManager = getEntityManager();
+ EntityManager entityManager = getEntityManager(deploymentInfo);
Object bean = entityManager.find(beanClass, callContext.getPrimaryKey());
entityManager.remove(bean);
}
public List<Object> queryBeans(ThreadContext callContext, String queryString, Object[] args) throws FinderException {
logger.error("Executing query " + queryString);
- EntityManager entityManager = getEntityManager();
+ CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
+ EntityManager entityManager = getEntityManager(deploymentInfo);
Query query = entityManager.createQuery(queryString);
// process args
if (args == null) {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmContext.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmContext.java?view=diff&rev=491149&r1=491148&r2=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmContext.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmContext.java Fri Dec 29 17:40:06 2006
@@ -17,6 +17,12 @@
package org.apache.openejb.core.ivm.naming;
import java.io.ObjectStreamException;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.FileInputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.Serializable;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
@@ -24,6 +30,8 @@
import java.util.Set;
import java.util.StringTokenizer;
import java.util.Vector;
+import java.util.Properties;
+import java.net.URL;
import javax.naming.Binding;
import javax.naming.CompositeName;
@@ -38,8 +46,6 @@
import org.apache.openejb.ClassLoaderUtil;
-import com.sun.naming.internal.ResourceManager;
-
/*
* This class wrappers a specific NameNode which is the data model for the JNDI
* name space. This class provides javax.naming.Context specific functionality
@@ -49,7 +55,8 @@
/**
* @org.apache.xbean.XBean element="ivmContext"
*/
-public class IvmContext implements Context, java.io.Serializable {
+public class IvmContext implements Context, Serializable {
+ private static final long serialVersionUID = -626353930051783641L;
Hashtable myEnv;
boolean readOnly = false;
HashMap fastCache = new HashMap();
@@ -157,16 +164,14 @@
public static ObjectFactory [] getFederatedFactories() throws NamingException {
if (federatedFactories == null) {
- Set factories = new HashSet();
- Hashtable jndiProps = ResourceManager.getInitialEnvironment(null);
- String pkgs = (String) jndiProps.get(Context.URL_PKG_PREFIXES);
- if (pkgs == null) {
+ Set<ObjectFactory> factories = new HashSet<ObjectFactory>();
+ String urlPackagePrefixes = getUrlPackagePrefixes();
+ if (urlPackagePrefixes == null) {
return new ObjectFactory[0];
}
- StringTokenizer parser = new StringTokenizer(pkgs, ":");
-
- while (parser.hasMoreTokens()) {
- String className = parser.nextToken() + ".java.javaURLContextFactory";
+ for (StringTokenizer tokenizer = new StringTokenizer(urlPackagePrefixes, ":"); tokenizer.hasMoreTokens();) {
+ String urlPackagePrefix = tokenizer.nextToken();
+ String className = urlPackagePrefix + ".java.javaURLContextFactory";
if (className.equals("org.apache.openejb.core.ivm.naming.java.javaURLContextFactory"))
continue;
try {
@@ -189,6 +194,53 @@
return federatedFactories;
}
+ private static String getUrlPackagePrefixes() {
+ // 1. System.getProperty
+ String urlPackagePrefixes = System.getProperty(Context.URL_PKG_PREFIXES);
+
+ // 2. Thread.currentThread().getContextClassLoader().getResources("jndi.properties")
+ if (urlPackagePrefixes == null) {
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ if (classLoader == null) classLoader = ClassLoader.getSystemClassLoader();
+
+ try {
+ Enumeration<URL> resources = classLoader.getResources("jndi.properties");
+ while (urlPackagePrefixes == null && resources.hasMoreElements()) {
+ URL resource = resources.nextElement();
+ InputStream in = resource.openStream();
+ urlPackagePrefixes = getUrlPackagePrefixes(in);
+ }
+ } catch (IOException ignored) {
+ }
+ }
+
+ // 3. ${java.home}/lib/jndi.properties
+ if (urlPackagePrefixes == null) {
+ String javahome = System.getProperty("java.home");
+ if (javahome != null) {
+ try {
+ File propertiesFile = new File(new File(javahome, "lib"), "jndi.properties");
+ InputStream in = new FileInputStream(propertiesFile);
+ urlPackagePrefixes = getUrlPackagePrefixes(in);
+ } catch (FileNotFoundException ignored) {
+ }
+ }
+
+ }
+ return urlPackagePrefixes;
+ }
+
+ private static String getUrlPackagePrefixes(InputStream in) {
+ try {
+ Properties properties = new Properties();
+ properties.load(in);
+ String urlPackagePrefixes = properties.getProperty(Context.URL_PKG_PREFIXES);
+ return urlPackagePrefixes;
+ } catch (IOException e) {
+ return null;
+ }
+ }
+
public Object lookup(Name compositName) throws NamingException {
return lookup(compositName.toString());
}
@@ -239,7 +291,7 @@
rename(oldname.toString(), newname.toString());
}
- public NamingEnumeration list(String name)
+ public NamingEnumeration<NameClassPair> list(String name)
throws NamingException {
Object obj = lookup(name);
if (obj.getClass() == IvmContext.class)
@@ -249,12 +301,12 @@
}
}
- public NamingEnumeration list(Name name)
+ public NamingEnumeration<NameClassPair> list(Name name)
throws NamingException {
return list(name.toString());
}
- public NamingEnumeration listBindings(String name)
+ public NamingEnumeration<Binding> listBindings(String name)
throws NamingException {
Object obj = lookup(name);
if (obj.getClass() == IvmContext.class)
@@ -264,7 +316,7 @@
}
}
- public NamingEnumeration listBindings(Name name)
+ public NamingEnumeration<Binding> listBindings(Name name)
throws NamingException {
return listBindings(name.toString());
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/PersistenceUnitReference.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/PersistenceUnitReference.java?view=diff&rev=491149&r1=491148&r2=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/PersistenceUnitReference.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/PersistenceUnitReference.java Fri Dec 29 17:40:06 2006
@@ -24,7 +24,7 @@
*/
public class PersistenceUnitReference implements Reference{
- private static EntityManagerFactory emf;
+ private EntityManagerFactory emf;
public PersistenceUnitReference(EntityManagerFactory emf) {
this.emf = emf;
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/SafeToolkit.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/SafeToolkit.java?view=diff&rev=491149&r1=491148&r2=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/SafeToolkit.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/SafeToolkit.java Fri Dec 29 17:40:06 2006
@@ -22,48 +22,23 @@
import java.util.Properties;
public class SafeToolkit {
-
- private String systemLocation;
public static final Messages messages = new Messages("org.apache.openejb.util.resources");
public static final HashMap codebases = new HashMap();
- protected SafeToolkit(String systemLocation) {
- this.systemLocation = systemLocation;
- }
-
public static SafeToolkit getToolkit(String systemLocation) {
return new SafeToolkit(systemLocation);
}
- public Class forName(String className) throws OpenEJBException {
- Class clazz = null;
- try {
- clazz = Class.forName(className);
- } catch (ClassNotFoundException cnfe) {
- OpenEJBErrorHandler.classNotFound(systemLocation, className);
- }
- return clazz;
- }
-
- public Class forName(String className, String codebase) throws OpenEJBException {
-
- ClassLoader cl = getContextClassLoader();
+ private String systemLocation;
- if (codebase != null) {
- try {
- java.net.URL[] urlCodebase = new java.net.URL[1];
- urlCodebase[0] = new java.net.URL(codebase);
- cl = new java.net.URLClassLoader(urlCodebase, cl);
- } catch (java.net.MalformedURLException mue) {
- OpenEJBErrorHandler.classCodebaseNotFound(systemLocation, className, codebase, mue);
- } catch (SecurityException se) {
- OpenEJBErrorHandler.classCodebaseNotFound(systemLocation, className, codebase, se);
- }
- }
+ private SafeToolkit(String systemLocation) {
+ this.systemLocation = systemLocation;
+ }
+ private Class forName(String className) throws OpenEJBException {
Class clazz = null;
try {
- clazz = Class.forName(className, true, cl);
+ clazz = Class.forName(className);
} catch (ClassNotFoundException cnfe) {
OpenEJBErrorHandler.classNotFound(systemLocation, className);
}
@@ -74,10 +49,6 @@
return newInstance(forName(className));
}
- public Object newInstance(String className, String codebase) throws OpenEJBException {
- return newInstance(forName(className, codebase));
- }
-
public Object newInstance(Class clazz) throws OpenEJBException {
Object instance = null;
try {
@@ -110,7 +81,7 @@
return loadClass(className, codebase, true);
}
- public static Class loadClass(String className, String codebase, boolean cache) throws OpenEJBException {
+ private static Class loadClass(String className, String codebase, boolean cache) throws OpenEJBException {
ClassLoader cl = (cache) ? getCodebaseClassLoader(codebase) : getClassLoader(codebase);
Class clazz = null;
@@ -122,7 +93,7 @@
return clazz;
}
- public static ClassLoader getCodebaseClassLoader(String codebase) throws OpenEJBException {
+ private static ClassLoader getCodebaseClassLoader(String codebase) throws OpenEJBException {
if (codebase == null) codebase = "CLASSPATH";
ClassLoader cl = (ClassLoader) codebases.get(codebase);
@@ -148,7 +119,7 @@
return cl;
}
- public static ClassLoader getClassLoader(String codebase) throws OpenEJBException {
+ private static ClassLoader getClassLoader(String codebase) throws OpenEJBException {
ClassLoader cl = null;
try {
java.net.URL[] urlCodebase = new java.net.URL[1];
@@ -173,13 +144,4 @@
}
return codebase.toString();
}
-
- public static ClassLoader getContextClassLoader() {
- return (ClassLoader) java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {
- public Object run() {
- return Thread.currentThread().getContextClassLoader();
- }
- });
- }
-
}
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/SampleAnnotation.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/SampleAnnotation.java?view=auto&rev=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/SampleAnnotation.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/SampleAnnotation.java Fri Dec 29 17:40:06 2006
@@ -0,0 +1,4 @@
+package org.apache.openejb.core;
+
+public @interface SampleAnnotation {
+}
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/TemporaryClassLoaderTest.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/TemporaryClassLoaderTest.java?view=auto&rev=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/TemporaryClassLoaderTest.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/TemporaryClassLoaderTest.java Fri Dec 29 17:40:06 2006
@@ -0,0 +1,43 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.core;
+
+import junit.framework.TestCase;
+
+public class TemporaryClassLoaderTest extends TestCase {
+ public void test() throws Exception {
+ ClassLoader tempCL = new TemporaryClassLoader(getClass().getClassLoader());
+ Class<?> clazz;
+
+ // normal classes should be loaded by the temp class loader
+ clazz = tempCL.loadClass(TemporaryClassLoaderTest.class.getName());
+ assertSame(tempCL, clazz.getClassLoader());
+
+ // classes in java.* should not be loaded by the temp class loader
+ clazz = tempCL.loadClass(javax.persistence.EntityManager.class.getName());
+ assertNotSame(tempCL, clazz.getClassLoader());
+
+ // classes in javax.* should not be loaded by the temp class loader
+ clazz = tempCL.loadClass(java.lang.String.class.getName());
+ assertNotSame(tempCL, clazz.getClassLoader());
+
+ // annotations should not be loaded by the temp class loader
+ clazz = tempCL.loadClass(SampleAnnotation.class.getName());
+ assertNotSame(tempCL, clazz.getClassLoader());
+ }
+}
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/Employee.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/Employee.java?view=auto&rev=491149
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/Employee.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/Employee.java Fri Dec 29 17:40:06 2006
@@ -0,0 +1,62 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.core.cmp.jpa;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+@Entity
+public class Employee {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ private int id;
+
+ @Column(name = "first_name")
+ private String firstName;
+
+ @Column(name = "last_name")
+ private String lastName;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+}