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 2007/10/16 06:39:10 UTC
svn commit: r585036 [1/7] - in /openejb/trunk/openejb3: ./
assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/
container/openejb-core/src/main/java/org/apache/openejb/assembler/
container/openejb-core/src/main/java/org/apache/openejb/assem...
Author: dain
Date: Mon Oct 15 21:38:53 2007
New Revision: 585036
URL: http://svn.apache.org/viewvc?rev=585036&view=rev
Log:
ears now work in tomcat
disabled downloading of schema files from JaxB
Added:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/URLReference.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/BodyContent.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Function.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Tag.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/TagFile.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/TldAttribute.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/TldDeferredMethod.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/TldDeferredValue.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/TldExtension.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/TldTaglib.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Validator.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Variable.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/VariableScope.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Cache.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/CacheHelper.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/CacheHelperRef.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/CacheMapping.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ClassLoader.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ConstraintField.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ConstraintFieldValue.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/CookieProperties.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/DefaultHelper.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Dispatcher.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/HttpMethod.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/IdempotentUrlPattern.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/JspConfig.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/KeyField.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/LocaleCharsetInfo.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/LocaleCharsetMap.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ManagerProperties.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ParameterEncoding.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/RefreshField.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Servlet.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ServletName.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/SessionConfig.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/SessionManager.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/SessionProperties.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/StoreProperties.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/SunWebApp.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Timeout.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/UrlPattern.java
openejb/trunk/openejb3/container/openejb-jee/src/test/resources/tld-example.xml
Removed:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JaxbUnmarshaller.java
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/JaxbUnmarshallerTest.java
Modified:
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ContextListener.java
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/GlobalListenerSupport.java
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/OpenEJBValve.java
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ResourceFactory.java
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ConnectorInfo.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConnectorModule.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EnvEntriesPropertiesDeployer.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JarExtractor.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/SunConversion.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/VmDeploymentManager.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/PropertiesAdapter.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ConnectorReference.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointFactory.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/MdbConfigTest.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/JaxbJavaee.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ObjectFactory.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/jpa/unit/JaxbPersistenceFactory.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/EjbDeployment.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/JaxbOpenejbJar3.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ActivationConfig.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ActivationConfigProperty.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/AsContext.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/BeanCache.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/BeanPool.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/CallProperty.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/CheckAllAtCommit.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/CheckModifiedAtCommit.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/CheckVersionOfAccessedInstances.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/CheckpointAtEndOfMethod.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Cmp.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/CmpFieldMapping.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/CmpResource.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/CmrFieldMapping.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ColumnName.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ColumnPair.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Consistency.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Default.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/DefaultResourcePrincipal.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Ejb.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/EjbRef.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/EnterpriseBeans.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/EntityMapping.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/FetchedWith.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Finder.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/FlushAtEndOfMethod.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/GenClasses.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/GroupName.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/IorSecurityConfig.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/JavaMethod.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/JavaWebStartAccess.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/JaxbSun.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Level.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/LockWhenLoaded.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/LockWhenModified.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/LoginConfig.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/MdbConnectionFactory.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/MdbResourceAdapter.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Message.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/MessageDestination.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/MessageDestinationRef.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/MessageSecurity.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/MessageSecurityBinding.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Method.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/MethodParam.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/MethodParams.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/NamedGroup.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/None.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/OneOneFinders.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/OperationName.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/PmDescriptor.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/PmDescriptors.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/PmInuse.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/PortInfo.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/PrefetchDisabled.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Principal.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/PrincipalName.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Property.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/QueryMethod.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ReadOnly.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/RequestProtection.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ResourceEnvRef.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ResourceRef.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ResponseProtection.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/SasContext.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/SchemaGeneratorProperties.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/SecondaryTable.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/SecurityRoleMapping.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ServiceQname.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/ServiceRef.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/StubProperty.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/SunApplication.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/SunApplicationClient.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/SunCmpMapping.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/SunCmpMappings.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/SunEjbJar.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/TransportConfig.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/Web.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/WebserviceDescription.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/WebserviceEndpoint.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/sun/WsdlPort.java
openejb/trunk/openejb3/container/openejb-jee/src/test/java/org/apache/openejb/jee/JeeTest.java
openejb/trunk/openejb3/pom.xml
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ContextListener.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ContextListener.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ContextListener.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ContextListener.java Mon Oct 15 21:38:53 2007
@@ -18,6 +18,7 @@
package org.apache.openejb.tomcat;
import org.apache.catalina.core.StandardContext;
+import org.apache.catalina.core.StandardServer;
public interface ContextListener {
void init(StandardContext context);
@@ -28,4 +29,6 @@
void stop(StandardContext context);
void afterStop(StandardContext context);
void destroy(StandardContext context);
+
+ void afterStop(StandardServer standardServer);
}
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/GlobalListenerSupport.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/GlobalListenerSupport.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/GlobalListenerSupport.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/GlobalListenerSupport.java Mon Oct 15 21:38:53 2007
@@ -67,12 +67,19 @@
} else if (Lifecycle.DESTROY_EVENT.equals(type)) {
contextListener.destroy(standardContext);
}
+ } else if (source instanceof StandardServer) {
+ StandardServer standardServer = (StandardServer) source;
+ String type = event.getType();
+ if (Lifecycle.AFTER_STOP_EVENT.equals(type)) {
+ contextListener.afterStop(standardServer);
+ }
}
}
public void start() {
// hook the hosts so we get notified before contexts are started
standardServer.addPropertyChangeListener(this);
+ standardServer.addLifecycleListener(this);
for (Service service : standardServer.findServices()) {
serviceAdded(service);
}
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/OpenEJBValve.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/OpenEJBValve.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/OpenEJBValve.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/OpenEJBValve.java Mon Oct 15 21:38:53 2007
@@ -37,7 +37,7 @@
public void invoke(Request request, Response response) throws IOException, ServletException {
Object oldState = null;
- if (securityService != null) {
+ if (securityService != null && request.getWrapper() != null) {
oldState = securityService.enterWebApp(request.getWrapper().getRealm(), request.getUserPrincipal(), request.getWrapper().getRunAs());
}
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ResourceFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ResourceFactory.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ResourceFactory.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ResourceFactory.java Mon Oct 15 21:38:53 2007
@@ -21,8 +21,21 @@
import javax.naming.NamingException;
import javax.naming.Reference;
+import javax.naming.Name;
+import javax.naming.Context;
+import java.util.Hashtable;
+import java.net.URL;
public class ResourceFactory extends AbstractObjectFactory {
+ public Object getObjectInstance(Object object, Name name, Context context, Hashtable environment) throws Exception {
+ Reference reference = ((Reference) object);
+ if (reference.getClassName().equals("java.net.URL")) {
+ String resourceId = getProperty(reference, RESOURCE_ID);
+ return new URL(resourceId);
+ }
+ return super.getObjectInstance(object, name, context, environment);
+ }
+
protected String buildJndiName(Reference reference) throws NamingException {
// get and verify interface type
String resourceId = getProperty(reference, RESOURCE_ID);
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java Mon Oct 15 21:38:53 2007
@@ -17,13 +17,20 @@
*/
package org.apache.openejb.tomcat;
+import org.apache.catalina.Container;
+import org.apache.catalina.Engine;
+import org.apache.catalina.LifecycleListener;
import org.apache.catalina.ServerFactory;
+import org.apache.catalina.Service;
import org.apache.catalina.core.StandardContext;
+import org.apache.catalina.core.StandardHost;
import org.apache.catalina.core.StandardServer;
import org.apache.catalina.deploy.ContextEnvironment;
import org.apache.catalina.deploy.ContextResource;
import org.apache.catalina.deploy.ContextResourceLink;
import org.apache.catalina.deploy.NamingResources;
+import org.apache.catalina.startup.ContextConfig;
+import org.apache.catalina.startup.HostConfig;
import org.apache.naming.ContextAccessController;
import org.apache.naming.ContextBindings;
import org.apache.openejb.OpenEJBException;
@@ -72,12 +79,30 @@
private final TreeMap<String, ContextInfo> infos = new TreeMap<String, ContextInfo>();
private final GlobalListenerSupport globalListenerSupport;
private final ConfigurationFactory configurationFactory;
+ private final Map<String,HostConfig> deployers = new TreeMap<String,HostConfig>();
private Assembler assembler;
public TomcatWebAppBuilder() {
StandardServer standardServer = (StandardServer) ServerFactory.getServer();
globalListenerSupport = new GlobalListenerSupport(standardServer, this);
+ for (Service service : standardServer.findServices()) {
+ if (service.getContainer() instanceof Engine) {
+ Engine engine = (Engine) service.getContainer();
+ for (Container engineChild : engine.findChildren()) {
+ if (engineChild instanceof StandardHost) {
+ StandardHost host = (StandardHost) engineChild;
+ for (LifecycleListener listener : host.findLifecycleListeners()) {
+ if (listener instanceof HostConfig) {
+ HostConfig hostConfig = (HostConfig) listener;
+ deployers.put(host.getName(), hostConfig);
+ }
+ }
+ }
+ }
+ }
+ }
+
// MBeanServer mbeanServer;
// List mbeanServers = MBeanServerFactory.findMBeanServer(null);
// if (mbeanServers.size() > 0) {
@@ -103,10 +128,56 @@
// OpenEJB WebAppBuilder
//
- public void deploy(WebAppInfo webAppInfo, LinkResolver<EntityManagerFactory> emfLinkResolver) throws Exception {
+ public void deployWebApps(AppInfo appInfo, LinkResolver<EntityManagerFactory> emfLinkResolver, ClassLoader classLoader) throws Exception {
+ for (WebAppInfo webApp : appInfo.webApps) {
+ if (getContextInfo(webApp) == null) {
+ StandardContext standardContext = new StandardContext();
+ standardContext.addLifecycleListener(new ContextConfig());
+ standardContext.setPath("/" + webApp.contextRoot);
+ standardContext.setDocBase(webApp.codebase);
+ standardContext.setParentClassLoader(classLoader);
+ standardContext.setDelegate(true);
+
+ String host = webApp.host;
+ if (host == null) host = "localhost";
+ HostConfig deployer = deployers.get(host);
+ if (deployer != null) {
+ // host isn't set until we call deployer.manageApp, so pass it
+ ContextInfo contextInfo = addContextInfo(host, standardContext);
+ contextInfo.appInfo = appInfo;
+ contextInfo.deployer = deployer;
+ contextInfo.standardContext = standardContext;
+ contextInfo.emfLinkResolver = emfLinkResolver;
+ deployer.manageApp(standardContext);
+ }
+ }
+ }
+ }
+
+ public void undeployWebApps(AppInfo appInfo) throws Exception {
+ for (WebAppInfo webApp : appInfo.webApps) {
+ ContextInfo contextInfo = getContextInfo(webApp);
+ if (contextInfo != null && contextInfo.deployer != null) {
+ StandardContext standardContext = contextInfo.standardContext;
+ HostConfig deployer = contextInfo.deployer;
+ deployer.unmanageApp(standardContext.getPath());
+ deleteDir(new File(standardContext.getServletContext().getRealPath("")));
+ removeContextInfo(standardContext);
+ }
+ }
}
- public void undeploy(WebAppInfo webAppInfo) throws Exception {
+ private void deleteDir(File dir) {
+ if (dir == null) return;
+ if (dir.isFile()) return;
+ for (File file : dir.listFiles()) {
+ if (file.isDirectory()) {
+ deleteDir(file);
+ } else {
+ file.delete();
+ }
+ }
+ dir.delete();
}
//
@@ -128,22 +199,40 @@
return;
}
- AppModule appModule = loadApplication(standardContext);
+ ContextInfo contextInfo = getContextInfo(standardContext);
+ if (contextInfo == null) {
+ AppModule appModule = loadApplication(standardContext);
+ if (appModule != null) {
+ try {
+ contextInfo = addContextInfo(standardContext.getHostname(), standardContext);
+ AppInfo appInfo = configurationFactory.configureApplication(appModule);
+ contextInfo.appInfo = appInfo;
+
+ LinkResolver<EntityManagerFactory> emfLinkResolver = new UniqueDefaultLinkResolver<EntityManagerFactory>();
+ assembler.createApplication(contextInfo.appInfo, emfLinkResolver, standardContext.getLoader().getClassLoader());
+ contextInfo.emfLinkResolver = emfLinkResolver;
+ } catch (Exception e) {
+ logger.error("Unable to deploy collapsed ear in war " + standardContext.getPath() + ": Exception: " + e.getMessage(), e);
+ }
+ }
+ }
- if (appModule != null) {
- try {
- AppInfo appInfo = configurationFactory.configureApplication(appModule);
- ContextInfo contextInfo = getContextInfo(standardContext);
- contextInfo.applicationId = appInfo.jarPath;
+ contextInfo.standardContext = standardContext;
- UniqueDefaultLinkResolver<EntityManagerFactory> emfLinkResolver = new UniqueDefaultLinkResolver<EntityManagerFactory>();
- assembler.createApplication(appInfo, emfLinkResolver, standardContext.getLoader().getClassLoader());
+ WebAppInfo webAppInfo = null;
+ for (WebAppInfo w : contextInfo.appInfo.webApps) {
+ if (("/" + w.contextRoot).equals(standardContext.getPath())) {
+ webAppInfo = w;
+ break;
+ }
+ }
- WebAppInfo webAppInfo = appInfo.webApps.get(0);
- TomcatJndiBuilder jndiBuilder = new TomcatJndiBuilder(standardContext, webAppInfo, emfLinkResolver);
+ if (webAppInfo != null) {
+ try {
+ TomcatJndiBuilder jndiBuilder = new TomcatJndiBuilder(standardContext, webAppInfo, contextInfo.emfLinkResolver);
jndiBuilder.mergeJndi();
} catch (Exception e) {
- logger.error("Unable to deploy collapsed ear in war " + standardContext.getPath() + ": Exception: " + e.getMessage(), e);
+ logger.error("Error merging OpenEJB JNDI entries in to war " + standardContext.getPath() + ": Exception: " + e.getMessage(), e);
}
}
}
@@ -182,19 +271,34 @@
public void afterStop(StandardContext standardContext) {
ContextInfo contextInfo = getContextInfo(standardContext);
- if (contextInfo != null) {
+ if (contextInfo != null && contextInfo.deployer == null) {
try {
- assembler.destroyApplication(contextInfo.applicationId);
+ assembler.destroyApplication(contextInfo.appInfo.jarPath);
} catch (Exception e) {
logger.error("Unable to stop web application " + standardContext.getPath() + ": Exception: " + e.getMessage(), e);
}
+ removeContextInfo(standardContext);
}
- removeContextInfo(standardContext);
}
public void destroy(StandardContext standardContext) {
}
+ public void afterStop(StandardServer standardServer) {
+ // clean ear based webapps after shutdown
+ for (ContextInfo contextInfo : infos.values()) {
+ if (contextInfo != null && contextInfo.deployer != null) {
+ StandardContext standardContext = contextInfo.standardContext;
+ HostConfig deployer = contextInfo.deployer;
+ deployer.unmanageApp(standardContext.getPath());
+ String realPath = standardContext.getServletContext().getRealPath("");
+ if (realPath != null) {
+ deleteDir(new File(realPath));
+ }
+ }
+ }
+ }
+
private AppModule loadApplication(StandardContext standardContext) {
// create the web module
WebModule webModule = createWebModule(standardContext);
@@ -275,6 +379,7 @@
String basePath = new File(servletContext.getRealPath(".")).getParentFile().getAbsolutePath();
ClassLoader classLoader = new TemporaryClassLoader(standardContext.getLoader().getClassLoader());
WebModule webModule = new WebModule(webApp, servletContext.getContextPath(), classLoader, basePath, getId(standardContext));
+ webModule.setHost(standardContext.getHostname());
// Add all Tomcat env entries to context so they can be overriden by the env.properties file
NamingResources naming = standardContext.getNamingResources();
@@ -363,12 +468,31 @@
}
private String getId(StandardContext standardContext) {
- return standardContext.getHostname() + "/" + standardContext.getName();
+ String contextRoot = standardContext.getName();
+ if (!contextRoot.startsWith("/")) contextRoot = "/" + contextRoot;
+ return standardContext.getHostname() + contextRoot;
}
private ContextInfo getContextInfo(StandardContext standardContext) {
String id = getId(standardContext);
ContextInfo contextInfo = infos.get(id);
+ return contextInfo;
+ }
+
+ private ContextInfo getContextInfo(WebAppInfo webAppInfo) {
+ String host = webAppInfo.host;
+ if (host == null) host = "localhost";
+ String contextRoot = webAppInfo.contextRoot;
+ String id = host + "/" + contextRoot;
+ ContextInfo contextInfo = infos.get(id);
+ return contextInfo;
+ }
+
+ private ContextInfo addContextInfo(String host, StandardContext standardContext) {
+ String contextRoot = standardContext.getName();
+ if (!contextRoot.startsWith("/")) contextRoot = "/" + contextRoot;
+ String id = host + contextRoot;
+ ContextInfo contextInfo = infos.get(id);
if (contextInfo == null) {
contextInfo = new ContextInfo();
infos.put(id, contextInfo);
@@ -382,6 +506,9 @@
}
private static class ContextInfo {
- private String applicationId;
+ public AppInfo appInfo;
+ public StandardContext standardContext;
+ public HostConfig deployer;
+ public LinkResolver<EntityManagerFactory> emfLinkResolver;
}
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java Mon Oct 15 21:38:53 2007
@@ -143,8 +143,10 @@
return appInfo;
} catch (OpenEJBException e) {
+ e.printStackTrace();
throw e;
} catch (Exception e) {
+ e.printStackTrace();
throw new OpenEJBException(e);
}
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Mon Oct 15 21:38:53 2007
@@ -420,6 +420,29 @@
}
}
+ // Connectors
+ for (ConnectorInfo connector : appInfo.connectors) {
+ ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(classLoader);
+ try {
+ // todo add undeployment code for these
+ if (connector.resourceAdapter != null) {
+ createResource(connector.resourceAdapter);
+ }
+ for (ResourceInfo outbound : connector.outbound) {
+ createResource(outbound);
+ }
+ for (MdbContainerInfo inbound : connector.inbound) {
+ createContainer(inbound);
+ }
+ for (ResourceInfo adminObject : connector.adminObject) {
+ createResource(adminObject);
+ }
+ } finally {
+ Thread.currentThread().setContextClassLoader(oldClassLoader);
+ }
+ }
+
// EJB
EjbJarBuilder ejbJarBuilder = new EjbJarBuilder(props, classLoader);
for (EjbJarInfo ejbJar : appInfo.ejbJars) {
@@ -536,9 +559,7 @@
// WebApp
WebAppBuilder webAppBuilder = SystemInstance.get().getComponent(WebAppBuilder.class);
if (webAppBuilder != null) {
- for (WebAppInfo webAppInfo : appInfo.webApps) {
- webAppBuilder.deploy(webAppInfo, emfLinkResolver);
- }
+ webAppBuilder.deployWebApps(appInfo, emfLinkResolver, classLoader);
}
logger.info("Deployed Application(path="+appInfo.jarPath+")");
@@ -569,12 +590,10 @@
WebAppBuilder webAppBuilder = SystemInstance.get().getComponent(WebAppBuilder.class);
if (webAppBuilder != null) {
- for (WebAppInfo webAppInfo : appInfo.webApps) {
- try {
- webAppBuilder.undeploy(webAppInfo);
- } catch (Throwable t) {
- undeployException.getCauses().add(new Exception("webApp: " + webAppInfo.moduleId + ": " + t.getMessage(), t));
- }
+ try {
+ webAppBuilder.undeployWebApps(appInfo);
+ } catch (Exception e) {
+ undeployException.getCauses().add(new Exception("App: " + appInfo.jarPath + ": " + e.getMessage(), e));
}
}
@@ -659,10 +678,14 @@
for (ClientInfo info : appInfo.clients) {
jars.add(toUrl(info.codebase));
}
+ for (ConnectorInfo info : appInfo.connectors) {
+ for (String jarPath : info.libs) {
+ jars.add(toUrl(jarPath));
+ }
+ }
for (String jarPath : appInfo.libs) {
jars.add(toUrl(jarPath));
}
- // todo add connector data
// Create the class loader
ClassLoader classLoader = new URLClassLoader(jars.toArray(new URL[]{}), OpenEJB.class.getClassLoader());
@@ -833,7 +856,8 @@
// get the connection manager
GeronimoConnectionManagerFactory connectionManagerFactory = new GeronimoConnectionManagerFactory();
// default transaction support is "local" and that doesn't seem to work
- connectionManagerFactory.setTransactionSupport("xa");
+ String transactionSupport = serviceInfo.properties.getProperty("TransactionSupport", "xa");
+ connectionManagerFactory.setTransactionSupport(transactionSupport);
connectionManagerFactory.setTransactionManager(transactionManager);
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader == null) classLoader = getClass().getClassLoader();
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ConnectorInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ConnectorInfo.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ConnectorInfo.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ConnectorInfo.java Mon Oct 15 21:38:53 2007
@@ -17,6 +17,9 @@
*/
package org.apache.openejb.assembler.classic;
+import java.util.List;
+import java.util.ArrayList;
+
public class ConnectorInfo extends InfoObject {
public String codebase;
@@ -25,5 +28,10 @@
public String smallIcon;
public String largeIcon;
public String moduleId;
+ public final List<String> libs = new ArrayList<String>();
+ public ResourceInfo resourceAdapter;
+ public List<ResourceInfo> outbound = new ArrayList<ResourceInfo>();
+ public List<MdbContainerInfo> inbound = new ArrayList<MdbContainerInfo>();
+ public List<ResourceInfo> adminObject = new ArrayList<ResourceInfo>();
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java Mon Oct 15 21:38:53 2007
@@ -32,6 +32,7 @@
import org.apache.openejb.core.ivm.naming.ParsedName;
import org.apache.openejb.core.ivm.naming.SystemComponentReference;
import org.apache.openejb.core.ivm.naming.CrossClassLoaderJndiReference;
+import org.apache.openejb.core.ivm.naming.URLReference;
import org.apache.xbean.naming.context.WritableContext;
import org.omg.CORBA.ORB;
@@ -225,7 +226,9 @@
for (ResourceReferenceInfo referenceInfo : jndiEnc.resourceRefs) {
Reference reference = null;
- if (referenceInfo.location != null) {
+ if ("java.net.URL".equals(referenceInfo.referenceType)) {
+ reference = new URLReference(referenceInfo.resourceID);
+ } else if (referenceInfo.location != null) {
reference = buildReferenceLocation(referenceInfo.location);
} else if (referenceInfo.resourceID != null) {
String jndiName = "java:openejb/Resource/" + referenceInfo.resourceID;
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java Mon Oct 15 21:38:53 2007
@@ -20,6 +20,6 @@
import javax.persistence.EntityManagerFactory;
public interface WebAppBuilder {
- void deploy(WebAppInfo webAppInfo, LinkResolver<EntityManagerFactory> emfLinkResolver) throws Exception;
- void undeploy(WebAppInfo webAppInfo) throws Exception;
+ void deployWebApps(AppInfo appInfo, LinkResolver<EntityManagerFactory> emfLinkResolver, ClassLoader classLoader) throws Exception;
+ void undeployWebApps(AppInfo appInfo) throws Exception;
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java Mon Oct 15 21:38:53 2007
@@ -25,6 +25,7 @@
public String smallIcon;
public String largeIcon;
public String moduleId;
+ public String host;
public String contextRoot;
public JndiEncInfo jndiEnc;
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Mon Oct 15 21:38:53 2007
@@ -65,6 +65,8 @@
import org.apache.openejb.jee.TransAttribute;
import org.apache.openejb.jee.TransactionType;
import org.apache.openejb.jee.WebApp;
+import org.apache.openejb.jee.TldTaglib;
+import org.apache.openejb.jee.Tag;
import static org.apache.openejb.util.Join.join;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
@@ -191,9 +193,9 @@
for (ConnectorModule connectorModule : appModule.getResourceModules()) {
deploy(connectorModule);
}
-// for (WebModule webModule : appModule.getWebModules()) {
-// deploy(webModule);
-// }
+ for (WebModule webModule : appModule.getWebModules()) {
+ deploy(webModule);
+ }
return appModule;
}
@@ -340,9 +342,9 @@
for (ConnectorModule connectorModule : appModule.getResourceModules()) {
deploy(connectorModule);
}
-// for (WebModule webModule : appModule.getWebModules()) {
-// deploy(webModule);
-// }
+ for (WebModule webModule : appModule.getWebModules()) {
+ deploy(webModule);
+ }
return appModule;
}
@@ -406,6 +408,31 @@
}
}
}
+ for (TldTaglib taglib : webModule.getTaglibs()) {
+ for (Listener listener : taglib.getListener()) {
+ String listenerClass = listener.getListenerClass();
+ if (listenerClass != null) {
+ try {
+ Class clazz = webModule.getClassLoader().loadClass(listenerClass);
+ classes.add(clazz);
+ } catch (ClassNotFoundException e) {
+ throw new OpenEJBException("Unable to load tag library servlet listener class: " + listenerClass, e);
+ }
+ }
+ }
+ for (Tag tag : taglib.getTag()) {
+ String tagClass = tag.getTagClass();
+ if (tagClass != null) {
+ try {
+ Class clazz = webModule.getClassLoader().loadClass(tagClass);
+ classes.add(clazz);
+ } catch (ClassNotFoundException e) {
+ throw new OpenEJBException("Unable to load tag library tag class: " + tagClass, e);
+ }
+ }
+ }
+ }
+
ClassFinder inheritedClassFinder = createInheritedClassFinder(classes.toArray(new Class<?>[0]));
// Currently we only process the JNDI annotations for web applications
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java Mon Oct 15 21:38:53 2007
@@ -33,6 +33,13 @@
import org.apache.openejb.jee.JndiReference;
import org.apache.openejb.jee.ResourceRef;
import org.apache.openejb.jee.JndiConsumer;
+import org.apache.openejb.jee.Connector;
+import org.apache.openejb.jee.ResourceAdapter;
+import org.apache.openejb.jee.OutboundResourceAdapter;
+import org.apache.openejb.jee.ConnectionDefinition;
+import org.apache.openejb.jee.InboundResource;
+import org.apache.openejb.jee.MessageListener;
+import org.apache.openejb.jee.AdminObject;
import org.apache.openejb.jee.jpa.unit.Persistence;
import org.apache.openejb.jee.jpa.unit.PersistenceUnit;
import org.apache.openejb.jee.oejb3.EjbDeployment;
@@ -50,6 +57,9 @@
import java.util.Set;
import java.util.TreeSet;
import java.util.HashMap;
+import java.util.TreeMap;
+import java.util.ArrayList;
+import java.util.Collections;
import java.net.URI;
public class AutoConfig implements DynamicDeployer {
@@ -63,7 +73,7 @@
ignoredReferenceTypes.add("javax.ejb.EntityContext");
ignoredReferenceTypes.add("javax.ejb.MessageDrivenContext");
ignoredReferenceTypes.add("javax.xml.ws.WebServiceContext");
- // URLs are turned into env-refs
+ // URLs are automatically handled
ignoredReferenceTypes.add("java.net.URL");
// User transaction is automatically handled
ignoredReferenceTypes.add("javax.transaction.UserTransaction");
@@ -97,22 +107,24 @@
}
public synchronized AppModule deploy(AppModule appModule) throws OpenEJBException {
+ AppResources appResources = new AppResources(appModule);
+
for (EjbModule ejbModule : appModule.getEjbModules()) {
processActivationConfig(ejbModule);
}
resolveDestinationLinks(appModule);
for (EjbModule ejbModule : appModule.getEjbModules()) {
- deploy(ejbModule);
+ deploy(ejbModule, appResources);
}
for (ClientModule clientModule : appModule.getClientModules()) {
- deploy(clientModule);
+ deploy(clientModule, appResources);
}
for (ConnectorModule connectorModule : appModule.getResourceModules()) {
deploy(connectorModule);
}
for (WebModule webModule : appModule.getWebModules()) {
- deploy(webModule);
+ deploy(webModule, appResources);
}
for (PersistenceModule persistenceModule : appModule.getPersistenceModules()) {
deploy(persistenceModule);
@@ -148,7 +160,7 @@
Properties properties = mdb.getActivationConfig().toProperties();
// destination
- String destination = properties.getProperty("destination");
+ String destination = properties.getProperty("destination", properties.getProperty("destinationName"));
if (destination == null) {
destination = ejbDeployment.getDeploymentId();
mdb.getActivationConfig().addProperty("destination", destination);
@@ -207,6 +219,12 @@
destinationResolver.add(moduleId, destination.getMessageDestinationName(), destination);
}
}
+ for (WebModule webModule : appModule.getWebModules()) {
+ String moduleId = appModule.getModuleId();
+ for (MessageDestination destination : webModule.getWebApp().getMessageDestination()) {
+ destinationResolver.add(moduleId, destination.getMessageDestinationName(), destination);
+ }
+ }
// remember the type of each destination so we can use it to fillin MDBs that don't declare destination type
Map<MessageDestination,String> destinationTypes = new HashMap<MessageDestination,String>();
@@ -313,6 +331,17 @@
}
}
+ for (WebModule webModule : appModule.getWebModules()) {
+ URI moduleUri = URI.create(appModule.getModuleId());
+ for (MessageDestinationRef ref : webModule.getWebApp().getMessageDestinationRef()) {
+ String destinationId = resolveDestinationId(ref, moduleUri, destinationResolver, destinationTypes);
+ if (destinationId != null) {
+ // for web modules we put the destinationId in the mapped name
+ ref.setMappedName(destinationId);
+ }
+ }
+ }
+
// Process MDBs one more time...
// this time fill in the destination type (if not alreday specified) with
// the info from the destination (which got filled in from the references)
@@ -413,8 +442,8 @@
return destinationId;
}
- private void deploy(ClientModule clientModule) throws OpenEJBException {
- processJndiRefs(clientModule.getModuleId(), clientModule.getApplicationClient());
+ private void deploy(ClientModule clientModule, AppResources appResources) throws OpenEJBException {
+ processJndiRefs(clientModule.getModuleId(), clientModule.getApplicationClient(), appResources);
}
@SuppressWarnings({"UnusedDeclaration"})
@@ -422,13 +451,18 @@
// Nothing to process for resource modules
}
- private void deploy(WebModule webModule) throws OpenEJBException {
- processJndiRefs(webModule.getModuleId(), webModule.getWebApp());
+ private void deploy(WebModule webModule, AppResources appResources) throws OpenEJBException {
+ processJndiRefs(webModule.getModuleId(), webModule.getWebApp(), appResources);
}
- private void processJndiRefs(String moduleId, JndiConsumer jndiConsumer) throws OpenEJBException {
- // Resource env reference
+ private void processJndiRefs(String moduleId, JndiConsumer jndiConsumer, AppResources appResources) throws OpenEJBException {
+ // Resource reference
for (ResourceRef ref : jndiConsumer.getResourceRef()) {
+ // skip references such as URLs which are automatically handled by the server
+ if (ignoredReferenceTypes.contains(ref.getType())) {
+ continue;
+ }
+
// skip destinations with a global jndi name
String mappedName = ref.getMappedName();
if (mappedName == null) mappedName = "";
@@ -437,12 +471,17 @@
}
String destinationId = (mappedName.length() == 0) ? ref.getName() : mappedName;
- destinationId = getResourceId(moduleId, destinationId, ref.getType());
+ destinationId = getResourceId(moduleId, destinationId, ref.getType(), appResources);
ref.setMappedName(destinationId);
}
// Resource env reference
for (JndiReference ref : jndiConsumer.getResourceEnvRef()) {
+ // skip references such as URLs which are automatically handled by the server
+ if (ignoredReferenceTypes.contains(ref.getType())) {
+ continue;
+ }
+
// skip destinations with a global jndi name
String mappedName = ref.getMappedName();
if (mappedName == null) mappedName = "";
@@ -451,7 +490,7 @@
}
String destinationId = (mappedName.length() == 0) ? ref.getName() : mappedName;
- destinationId = getResourceEnvId(moduleId, destinationId, ref.getType());
+ destinationId = getResourceEnvId(moduleId, destinationId, ref.getType(), appResources);
ref.setMappedName(destinationId);
}
@@ -464,12 +503,12 @@
}
String destinationId = (mappedName.length() == 0) ? ref.getName() : mappedName;
- destinationId = getResourceEnvId(moduleId, destinationId, ref.getType());
+ destinationId = getResourceEnvId(moduleId, destinationId, ref.getType(), appResources);
ref.setMappedName(destinationId);
}
}
- private void deploy(EjbModule ejbModule) throws OpenEJBException {
+ private void deploy(EjbModule ejbModule, AppResources appResources) throws OpenEJBException {
OpenejbJar openejbJar;
if (ejbModule.getOpenejbJar() != null) {
openejbJar = ejbModule.getOpenejbJar();
@@ -486,7 +525,7 @@
Class<? extends ContainerInfo> containerInfoType = ConfigurationFactory.getContainerInfoType(getType(bean));
if (ejbDeployment.getContainerId() == null && !skipMdb(bean)) {
- String containerId = getUsableContainer(containerInfoType, bean);
+ String containerId = getUsableContainer(containerInfoType, bean, appResources);
if (containerId == null){
containerId = createContainer(containerInfoType, ejbDeployment, bean);
}
@@ -500,17 +539,17 @@
// Resource reference
for (ResourceRef ref : bean.getResourceRef()) {
- processResourceRef(ref, ejbDeployment);
+ processResourceRef(ref, ejbDeployment, appResources);
}
// Resource env reference
for (JndiReference ref : bean.getResourceEnvRef()) {
- processResourceEnvRef(ref, ejbDeployment);
+ processResourceEnvRef(ref, ejbDeployment, appResources);
}
// Message destination reference
for (MessageDestinationRef ref : bean.getMessageDestinationRef()) {
- processResourceEnvRef(ref, ejbDeployment);
+ processResourceEnvRef(ref, ejbDeployment, appResources);
}
@@ -520,8 +559,13 @@
ResourceLink resourceLink = ejbDeployment.getResourceLink("openejb/destination");
if (resourceLink != null) {
- String destinationId = getResourceEnvId(bean.getEjbName(), resourceLink.getResId(), mdb.getMessageDestinationType());
- resourceLink.setResId(destinationId);
+ try {
+ String destinationId = getResourceEnvId(bean.getEjbName(), resourceLink.getResId(), mdb.getMessageDestinationType(), appResources);
+ resourceLink.setResId(destinationId);
+ } catch (OpenEJBException e) {
+ // The MDB doesn't need the auto configured "openejb/destination" env entry
+ ejbDeployment.removeResourceLink("openejb/destination");
+ }
}
}
@@ -540,7 +584,7 @@
// if the is an MDB container we need to resolve the resource adapter
String resourceAdapterId = containerInfo.properties.getProperty("ResourceAdapter");
if (resourceAdapterId != null) {
- String newResourceId = getResourceId(ejbDeployment.getDeploymentId(), resourceAdapterId, null);
+ String newResourceId = getResourceId(ejbDeployment.getDeploymentId(), resourceAdapterId, null, null);
if (resourceAdapterId != newResourceId) {
containerInfo.properties.setProperty("ResourceAdapter", newResourceId);
}
@@ -551,7 +595,7 @@
return containerInfo.id;
}
- private void processResourceRef(ResourceRef ref, EjbDeployment ejbDeployment) throws OpenEJBException {
+ private void processResourceRef(ResourceRef ref, EjbDeployment ejbDeployment, AppResources appResources) throws OpenEJBException {
// skip destinations with a global jndi name
String mappedName = ref.getMappedName();
if (mappedName == null) mappedName = "";
@@ -570,7 +614,7 @@
ResourceLink link = ejbDeployment.getResourceLink(refName);
if (link == null) {
String id = (mappedName.length() == 0) ? ref.getName() : mappedName;
- id = getResourceId(ejbDeployment.getDeploymentId(), id, refType);
+ id = getResourceId(ejbDeployment.getDeploymentId(), id, refType, appResources);
logger.info("Auto-linking resource reference '" + refName + "' in bean " + ejbDeployment.getDeploymentId() + " to Resource(id=" + id + ")");
link = new ResourceLink();
@@ -578,13 +622,13 @@
link.setResRefName(refName);
ejbDeployment.addResourceLink(link);
} else {
- String id = getResourceId(ejbDeployment.getDeploymentId(), link.getResId(), refType);
+ String id = getResourceId(ejbDeployment.getDeploymentId(), link.getResId(), refType, appResources);
link.setResId(id);
link.setResRefName(refName);
}
}
- private void processResourceEnvRef(JndiReference ref, EjbDeployment ejbDeployment) throws OpenEJBException {
+ private void processResourceEnvRef(JndiReference ref, EjbDeployment ejbDeployment, AppResources appResources) throws OpenEJBException {
// skip destinations with a global jndi name
String mappedName = (ref.getMappedName() == null)? "": ref.getMappedName();
if (mappedName.startsWith("jndi:")){
@@ -603,7 +647,7 @@
if (link == null) {
String id = (mappedName.length() == 0) ? refName : mappedName;
- id = getResourceEnvId(ejbDeployment.getDeploymentId(), id, refType);
+ id = getResourceEnvId(ejbDeployment.getDeploymentId(), id, refType, appResources);
if (id == null) {
// could be a session context ref
return;
@@ -615,7 +659,7 @@
link.setResRefName(refName);
ejbDeployment.addResourceLink(link);
} else {
- String id = getResourceEnvId(ejbDeployment.getDeploymentId(), link.getResId(), refType);
+ String id = getResourceEnvId(ejbDeployment.getDeploymentId(), link.getResId(), refType, appResources);
link.setResId(id);
link.setResRefName(refName);
}
@@ -651,21 +695,22 @@
Persistence persistence = persistenceModule.getPersistence();
for (PersistenceUnit persistenceUnit : persistence.getPersistenceUnit()) {
- String jtaDataSourceId = getResourceId(persistenceUnit.getName(), persistenceUnit.getJtaDataSource(), DataSource.class.getName());
+ String jtaDataSourceId = getResourceId(persistenceUnit.getName(), persistenceUnit.getJtaDataSource(), DataSource.class.getName(), null);
if (jtaDataSourceId != null) {
persistenceUnit.setJtaDataSource("java:openejb/Resource/" + jtaDataSourceId);
}
- String nonJtaDataSourceId = getResourceId(persistenceUnit.getName(), persistenceUnit.getNonJtaDataSource(), DataSource.class.getName());
+ String nonJtaDataSourceId = getResourceId(persistenceUnit.getName(), persistenceUnit.getNonJtaDataSource(), DataSource.class.getName(), null);
if (nonJtaDataSourceId != null) {
persistenceUnit.setNonJtaDataSource("java:openejb/Resource/" + nonJtaDataSourceId);
}
}
}
- private String getResourceId(String beanName, String resourceId, String type) throws OpenEJBException {
+ private String getResourceId(String beanName, String resourceId, String type, AppResources appResources) throws OpenEJBException {
if(resourceId == null){
return null;
}
+ if (appResources == null) appResources = new AppResources();
// skip references such as URL which are automatically handled by the server
if (type != null && ignoredReferenceTypes.contains(type)) {
@@ -678,7 +723,9 @@
}
// check for existing resource with specified resourceId
- List<String> resourceIds = configFactory.getResourceIds(type);
+ List<String> resourceIds = new ArrayList<String>();
+ resourceIds.addAll(appResources.getResourceIds(type));
+ resourceIds.addAll(configFactory.getResourceIds(type));
for (String id : resourceIds) {
if (id.equalsIgnoreCase(resourceId)) return id;
}
@@ -689,6 +736,17 @@
if (id.equalsIgnoreCase(shortName)) return id;
}
+ // expand search to any type -- may be asking for a reference to a sub-type
+ List<String> allResourceIds = new ArrayList<String>();
+ allResourceIds.addAll(appResources.getResourceIds(null));
+ allResourceIds.addAll(configFactory.getResourceIds(null));
+ for (String id : allResourceIds) {
+ if (id.equalsIgnoreCase(resourceId)) return id;
+ }
+ for (String id : allResourceIds) {
+ if (id.equalsIgnoreCase(shortName)) return id;
+ }
+
// throw an exception or log an error
String message = "No existing resource found while attempting to Auto-link unmapped reference '" + resourceId + "' of type '" + type + "' for '" + beanName + "'. Looked for Resource(id=" + resourceId + ") and Resource(id=" + shortName + ")";
if (!autoCreateResources){
@@ -724,7 +782,7 @@
private String installResource(String beanName, ResourceInfo resourceInfo) throws OpenEJBException {
String resourceAdapterId = resourceInfo.properties.getProperty("ResourceAdapter");
if (resourceAdapterId != null) {
- String newResourceId = getResourceId(beanName, resourceAdapterId, null);
+ String newResourceId = getResourceId(beanName, resourceAdapterId, null, null);
if (resourceAdapterId != newResourceId) {
resourceInfo.properties.setProperty("ResourceAdapter", newResourceId);
}
@@ -734,10 +792,11 @@
return resourceInfo.id;
}
- private String getResourceEnvId(String beanName, String resourceId, String type) throws OpenEJBException {
+ private String getResourceEnvId(String beanName, String resourceId, String type, AppResources appResources) throws OpenEJBException {
if(resourceId == null){
return null;
}
+ if (appResources == null) appResources = new AppResources();
// skip references such as URLs which are automatically handled by the server
if (ignoredReferenceTypes.contains(type)) {
@@ -750,8 +809,10 @@
}
// check for existing resource with specified resourceId
- List<String> resourceIds = configFactory.getResourceIds(type);
- for (String id : resourceIds) {
+ List<String> resourceEnvIds = new ArrayList<String>();
+ resourceEnvIds.addAll(appResources.getResourceIds(type));
+ resourceEnvIds.addAll(configFactory.getResourceIds(type));
+ for (String id : resourceEnvIds) {
if (id.equalsIgnoreCase(resourceId)) return id;
}
@@ -767,8 +828,8 @@
String providerId = ServiceUtils.getServiceProviderId(type);
if (providerId == null) {
// if there are any existing resources of the desired type, use the first one
- if (resourceIds.size() > 0) {
- return resourceIds.get(0);
+ if (resourceEnvIds.size() > 0) {
+ return resourceEnvIds.get(0);
}
throw new OpenEJBException("No provider available for resource reference '" + resourceId + "' of type '" + type + "' for '" + beanName + "'.");
}
@@ -781,7 +842,16 @@
return installResource(beanName, resourceInfo);
}
- private String getUsableContainer(Class<? extends ContainerInfo> containerInfoType, Object bean) {
+ private String getUsableContainer(Class<? extends ContainerInfo> containerInfoType, Object bean, AppResources appResources) {
+ if (bean instanceof MessageDrivenBean) {
+ MessageDrivenBean messageDrivenBean = (MessageDrivenBean) bean;
+ String messagingType = messageDrivenBean.getMessagingType();
+ List<String> containerIds = appResources.containerIdsByType.get(messagingType);
+ if (containerIds != null && !containerIds.isEmpty()) {
+ return containerIds.get(0);
+ }
+ }
+
for (ContainerInfo containerInfo : configFactory.getContainerInfos()) {
if (containerInfo.getClass().equals(containerInfoType)){
// MDBs must match message listener interface type
@@ -798,5 +868,132 @@
}
return null;
+ }
+
+ private static class AppResources {
+ @SuppressWarnings({"MismatchedQueryAndUpdateOfCollection"})
+ private final Set<String> resourceAdapterIds = new TreeSet<String>();
+ private final Map<String,List<String>> resourceIdsByType = new TreeMap<String,List<String>>();
+ private final Map<String,List<String>> resourceEnvIdsByType = new TreeMap<String,List<String>>();
+ private final Map<String,List<String>> containerIdsByType = new TreeMap<String,List<String>>();
+
+ public AppResources() {
+ }
+
+ public AppResources(AppModule appModule) {
+
+ //
+ // DEVELOPERS NOTE: if you change the id generation code here, you must change
+ // the id generation code in ConfigurationFactory.configureApplication(AppModule appModule)
+ //
+
+ for (ConnectorModule connectorModule : appModule.getResourceModules()) {
+ Connector connector = connectorModule.getConnector();
+
+ ResourceAdapter resourceAdapter = connector.getResourceAdapter();
+ if (resourceAdapter.getResourceAdapterClass() != null) {
+ String resourceAdapterId;
+ if (resourceAdapter.getId() != null) {
+ resourceAdapterId = resourceAdapter.getId();
+ } else {
+ resourceAdapterId = connectorModule.getModuleId() + "RA";
+ }
+ resourceAdapterIds.add(resourceAdapterId);
+ }
+
+ OutboundResourceAdapter outbound = resourceAdapter.getOutboundResourceAdapter();
+ if (outbound != null) {
+ for (ConnectionDefinition connection : outbound.getConnectionDefinition()) {
+ String type = connection.getConnectionFactoryInterface();
+
+ String resourceId;
+ if (connection.getId() != null) {
+ resourceId = connection.getId();
+ } else if (outbound.getConnectionDefinition().size() == 1) {
+ resourceId = connectorModule.getModuleId();
+ } else {
+ resourceId = connectorModule.getModuleId() + "-" + type;
+ }
+
+ List<String> resourceIds = resourceIdsByType.get(type);
+ if (resourceIds == null) {
+ resourceIds = new ArrayList<String>();
+ resourceIdsByType.put(type, resourceIds);
+ }
+ resourceIds.add(resourceId);
+ }
+ }
+
+ InboundResource inbound = resourceAdapter.getInboundResourceAdapter();
+ if (inbound != null) {
+ for (MessageListener messageListener : inbound.getMessageAdapter().getMessageListener()) {
+ String type = messageListener.getMessageListenerType();
+
+ String containerId;
+ if (messageListener.getId() != null) {
+ containerId = messageListener.getId();
+ } else if (inbound.getMessageAdapter().getMessageListener().size() == 1) {
+ containerId = connectorModule.getModuleId();
+ } else {
+ containerId = connectorModule.getModuleId() + "-" + type;
+ }
+
+ List<String> containerIds = containerIdsByType.get(type);
+ if (containerIds == null) {
+ containerIds = new ArrayList<String>();
+ containerIdsByType.put(type, containerIds);
+ }
+ containerIds.add(containerId);
+ }
+ }
+
+ for (AdminObject adminObject : resourceAdapter.getAdminObject()) {
+ String type = adminObject.getAdminObjectInterface();
+
+ String resourceEnvId;
+ if (adminObject.getId() != null) {
+ resourceEnvId = adminObject.getId();
+ } else if (resourceAdapter.getAdminObject().size() == 1) {
+ resourceEnvId = connectorModule.getModuleId();
+ } else {
+ resourceEnvId = connectorModule.getModuleId() + "-" + type;
+ }
+
+ List<String> resourceEnvIds = resourceEnvIdsByType.get(type);
+ if (resourceEnvIds == null) {
+ resourceEnvIds = new ArrayList<String>();
+ resourceEnvIdsByType.put(type, resourceEnvIds);
+ }
+ resourceEnvIds.add(resourceEnvId);
+ }
+ }
+
+ }
+
+ public List<String> getResourceIds(String type) {
+ if (type == null) {
+ List<String> allResourceIds = new ArrayList<String>();
+ for (List<String> resourceIds : resourceIdsByType.values()) {
+ allResourceIds.addAll(resourceIds);
+ }
+ return allResourceIds;
+ }
+
+ List<String> resourceIds = resourceIdsByType.get(type);
+ if (resourceIds != null) {
+ return resourceIds;
+ }
+ return Collections.emptyList();
+ }
+
+ public List<String> getResourceEnvIds(String type) {
+ if (type != null) {
+ List<String> resourceIds = resourceEnvIdsByType.get(type);
+ if (resourceIds != null) {
+ return resourceIds;
+ }
+ }
+ return Collections.emptyList();
+ }
}
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java Mon Oct 15 21:38:53 2007
@@ -57,6 +57,13 @@
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.Connector;
import org.apache.openejb.jee.WebApp;
+import org.apache.openejb.jee.ResourceAdapter;
+import org.apache.openejb.jee.ConfigProperty;
+import org.apache.openejb.jee.OutboundResourceAdapter;
+import org.apache.openejb.jee.ConnectionDefinition;
+import org.apache.openejb.jee.InboundResource;
+import org.apache.openejb.jee.MessageListener;
+import org.apache.openejb.jee.AdminObject;
import org.apache.openejb.jee.jpa.EntityMappings;
import org.apache.openejb.jee.jpa.JpaJaxbUtil;
import org.apache.openejb.jee.jpa.unit.Persistence;
@@ -75,10 +82,10 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.Iterator;
public class ConfigurationFactory implements OpenEjbConfigurationFactory {
@@ -411,12 +418,141 @@
}
for (ConnectorModule connectorModule : appModule.getResourceModules()) {
- Connector applicationClient = connectorModule.getConnector();
+ //
+ // DEVELOPERS NOTE: if you change the id generation code here, you must change
+ // the id generation code in AutoConfig$AppResources
+ //
+
+ Connector connector = connectorModule.getConnector();
+
ConnectorInfo connectorInfo = new ConnectorInfo();
- connectorInfo.description = applicationClient.getDescription();
- connectorInfo.displayName = applicationClient.getDisplayName();
+ connectorInfo.description = connector.getDescription();
+ connectorInfo.displayName = connector.getDisplayName();
connectorInfo.codebase = connectorModule.getJarLocation();
connectorInfo.moduleId = connectorModule.getModuleId();
+
+ List<URL> libraries = connectorModule.getLibraries();
+ for (URL url : libraries) {
+ File file = new File(url.getPath());
+ connectorInfo.libs.add(file.getAbsolutePath());
+ }
+
+ ResourceAdapter resourceAdapter = connector.getResourceAdapter();
+ if (resourceAdapter.getResourceAdapterClass() != null) {
+ ResourceInfo resourceInfo = new ResourceInfo();
+ resourceInfo.service = "Resource";
+ if (resourceAdapter.getId() != null) {
+ resourceInfo.id = resourceAdapter.getId();
+ } else {
+ resourceInfo.id = connectorModule.getModuleId() + "RA";
+ }
+ resourceInfo.className = resourceAdapter.getResourceAdapterClass();
+ resourceInfo.properties = new Properties();
+ for (ConfigProperty property : resourceAdapter.getConfigProperty()) {
+ String name = property.getConfigPropertyName();
+ String value = property.getConfigPropertyValue();
+ if (value != null) {
+ resourceInfo.properties.setProperty(name, value);
+ }
+ }
+ resourceInfo.properties.putAll(getSystemProperties(resourceInfo.id));
+ connectorInfo.resourceAdapter = resourceInfo;
+ }
+
+ OutboundResourceAdapter outbound = resourceAdapter.getOutboundResourceAdapter();
+ if (outbound != null) {
+ String transactionSupport = "none";
+ switch (outbound.getTransactionSupport()) {
+ case LOCAL_TRANSACTION:
+ transactionSupport = "local";
+ break;
+ case NO_TRANSACTION:
+ transactionSupport = "none";
+ break;
+ case XA_TRANSACTION:
+ transactionSupport = "xa";
+ break;
+ }
+ for (ConnectionDefinition connection : outbound.getConnectionDefinition()) {
+ ResourceInfo resourceInfo = new ResourceInfo();
+ resourceInfo.service = "Resource";
+ if (connection.getId() != null) {
+ resourceInfo.id = connection.getId();
+ } else if (outbound.getConnectionDefinition().size() == 1) {
+ resourceInfo.id = connectorModule.getModuleId();
+ } else {
+ resourceInfo.id = connectorModule.getModuleId() + "-" + connection.getConnectionFactoryInterface();
+ }
+ resourceInfo.className = connection.getManagedConnectionFactoryClass();
+ resourceInfo.types.add(connection.getConnectionFactoryInterface());
+ resourceInfo.properties = new Properties();
+ for (ConfigProperty property : connection.getConfigProperty()) {
+ String name = property.getConfigPropertyName();
+ String value = property.getConfigPropertyValue();
+ if (value != null) {
+ resourceInfo.properties.setProperty(name, value);
+ }
+ }
+ resourceInfo.properties.setProperty("TransactionSupport", transactionSupport);
+ resourceInfo.properties.setProperty("ResourceAdapter", connectorInfo.resourceAdapter.id);
+ resourceInfo.properties.putAll(getSystemProperties(resourceInfo.id));
+ connectorInfo.outbound.add(resourceInfo);
+ }
+ }
+
+ InboundResource inbound = resourceAdapter.getInboundResourceAdapter();
+ if (inbound != null) {
+ for (MessageListener messageListener : inbound.getMessageAdapter().getMessageListener()) {
+ MdbContainerInfo mdbContainerInfo = new MdbContainerInfo();
+ mdbContainerInfo.service = "Container";
+ if (messageListener.getId() != null) {
+ mdbContainerInfo.id = messageListener.getId();
+ } else if (inbound.getMessageAdapter().getMessageListener().size() == 1) {
+ mdbContainerInfo.id = connectorModule.getModuleId();
+ } else {
+ mdbContainerInfo.id = connectorModule.getModuleId() + "-" + messageListener.getMessageListenerType();
+ }
+
+ mdbContainerInfo.properties = new Properties();
+ mdbContainerInfo.properties.setProperty("ResourceAdapter", connectorInfo.resourceAdapter.id);
+ mdbContainerInfo.properties.setProperty("MessageListenerInterface", messageListener.getMessageListenerType());
+ mdbContainerInfo.properties.setProperty("ActivationSpecClass", messageListener.getActivationSpec().getActivationSpecClass());
+
+ // todo provider system should fill in this information
+ mdbContainerInfo.types.add("MESSAGE");
+ mdbContainerInfo.className = "org.apache.openejb.core.mdb.MdbContainer";
+ mdbContainerInfo.constructorArgs.addAll(Arrays.asList("id", "transactionManager", "securityService", "ResourceAdapter", "MessageListenerInterface", "ActivationSpecClass", "InstanceLimit"));
+ mdbContainerInfo.properties.setProperty("InstanceLimit", "10");
+
+ mdbContainerInfo.properties.putAll(getSystemProperties(mdbContainerInfo.id));
+ connectorInfo.inbound.add(mdbContainerInfo);
+ }
+ }
+
+ for (AdminObject adminObject : resourceAdapter.getAdminObject()) {
+ ResourceInfo resourceInfo = new ResourceInfo();
+ resourceInfo.service = "Resource";
+ if (adminObject.getId() != null) {
+ resourceInfo.id = adminObject.getId();
+ } else if (resourceAdapter.getAdminObject().size() == 1) {
+ resourceInfo.id = connectorModule.getModuleId();
+ } else {
+ resourceInfo.id = connectorModule.getModuleId() + "-" + adminObject.getAdminObjectInterface();
+ }
+ resourceInfo.className = adminObject.getAdminObjectClass();
+ resourceInfo.types.add(adminObject.getAdminObjectInterface());
+ resourceInfo.properties = new Properties();
+ for (ConfigProperty property : adminObject.getConfigProperty()) {
+ String name = property.getConfigPropertyName();
+ String value = property.getConfigPropertyValue();
+ if (value != null) {
+ resourceInfo.properties.setProperty(name, value);
+ }
+ }
+ resourceInfo.properties.putAll(getSystemProperties(resourceInfo.id));
+ connectorInfo.adminObject.add(resourceInfo);
+ }
+
appInfo.connectors.add(connectorInfo);
}
@@ -428,6 +564,7 @@
webAppInfo.codebase = webModule.getJarLocation();
webAppInfo.moduleId = webModule.getModuleId();
+ webAppInfo.host = webModule.getHost();
webAppInfo.contextRoot = webModule.getContextRoot();
JndiEncInfoBuilder jndiEncInfoBuilder = new JndiEncInfoBuilder(appInfo.ejbJars);
@@ -570,6 +707,7 @@
return info;
}
+ @SuppressWarnings({"unchecked"})
private ServiceProvider resolveServiceProvider(Service service, Class infoType) throws OpenEJBException {
if (service.getProvider() != null) {
@@ -707,6 +845,7 @@
return resourceIds;
}
+ @SuppressWarnings({"UnusedDeclaration", "EmptyFinallyBlock"})
private boolean isResourceType(String service, List<String> types, String type) {
boolean b = false;
try {
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConnectorModule.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConnectorModule.java?rev=585036&r1=585035&r2=585036&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConnectorModule.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConnectorModule.java Mon Oct 15 21:38:53 2007
@@ -21,6 +21,9 @@
import java.io.File;
import java.util.HashMap;
import java.util.Map;
+import java.util.List;
+import java.util.ArrayList;
+import java.net.URL;
/**
* @version $Rev$ $Date$
@@ -33,6 +36,7 @@
private ClassLoader classLoader;
private String jarLocation;
private final String moduleId;
+ private final List<URL> libraries = new ArrayList<URL>();
public ConnectorModule(Connector connector, ClassLoader classLoader, String jarLocation, String moduleId) {
this.connector = connector;
@@ -45,6 +49,12 @@
} else {
File file = new File(jarLocation);
moduleId = file.getName();
+ if (moduleId.endsWith(".unpacked")) {
+ moduleId = moduleId.substring(0, moduleId.length() - ".unpacked".length());
+ }
+ if (moduleId.endsWith(".rar")) {
+ moduleId = moduleId.substring(0, moduleId.length() - ".rar".length());
+ }
}
}
@@ -86,5 +96,9 @@
public void setJarLocation(String jarLocation) {
this.jarLocation = jarLocation;
+ }
+
+ public List<URL> getLibraries() {
+ return libraries;
}
}