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