Is there some reason you didn't use the activationSpecInfo map which already had the info you put into messageListenerToActivationSpec map and a lot more besides?

I prefer to put this info in the ResourceAdapterModuleimpl which represents the rar file rather than the ResourceAdapterWrapper which represents an individual instance of a resource adapter specified by the rar file to avoid duplication, but it doesn't make a lot of difference.

At some point we should make it so only one copy of this data is stuffed into gbeans, whether it's the simplified data you have or the fuller representation I had, and take it out of whatever gbeans aren't being used.

thanks
david jencks

On Mar 12, 2007, at 9:30 PM, [EMAIL PROTECTED] wrote:

Author: dain
Date: Mon Mar 12 18:30:24 2007
New Revision: 517486

URL: http://svn.apache.org/viewvc?view=rev&rev=517486
Log:
Add support for MDB deployment

Modified:
    geronimo/server/trunk/configs/openejb/src/plan/plan.xml
geronimo/server/trunk/modules/geronimo-connector-builder/src/ main/java/org/apache/geronimo/connector/deployment/ ConnectorModuleBuilder.java geronimo/server/trunk/modules/geronimo-connector/src/main/java/ org/apache/geronimo/connector/ResourceAdapterWrapper.java geronimo/server/trunk/modules/geronimo-connector/src/main/java/ org/apache/geronimo/connector/ResourceAdapterWrapperGBean.java geronimo/server/trunk/modules/geronimo-openejb-builder/geronimo- openejb.xml geronimo/server/trunk/modules/geronimo-openejb-builder/src/main/ java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java geronimo/server/trunk/modules/geronimo-openejb/src/main/java/ org/apache/geronimo/openejb/OpenEjbSystemGBean.java geronimo/server/trunk/modules/geronimo-persistence-jpa10- builder/src/main/java/org/apache/geronimo/persistence/builder/ PersistenceContextRefBuilder.java

Modified: geronimo/server/trunk/configs/openejb/src/plan/plan.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/configs/ openejb/src/plan/plan.xml?view=diff&rev=517486&r1=517485&r2=517486 ====================================================================== ========
--- geronimo/server/trunk/configs/openejb/src/plan/plan.xml (original)
+++ geronimo/server/trunk/configs/openejb/src/plan/plan.xml Mon Mar 12 18:30:24 2007
@@ -24,6 +24,7 @@
         <reference name="TransactionManager">
             <name>TransactionManager</name>
         </reference>
+        <reference name="ResourceAdapterWrappers"/>
     </gbean>

<gbean name="DefaultStatelessContainer" class="org.apache.geronimo.openejb.EjbContainer">

Modified: geronimo/server/trunk/modules/geronimo-connector-builder/ src/main/java/org/apache/geronimo/connector/deployment/ ConnectorModuleBuilder.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/ geronimo-connector-builder/src/main/java/org/apache/geronimo/ connector/deployment/ConnectorModuleBuilder.java? view=diff&rev=517486&r1=517485&r2=517486 ====================================================================== ======== --- geronimo/server/trunk/modules/geronimo-connector-builder/src/ main/java/org/apache/geronimo/connector/deployment/ ConnectorModuleBuilder.java (original) +++ geronimo/server/trunk/modules/geronimo-connector-builder/src/ main/java/org/apache/geronimo/connector/deployment/ ConnectorModuleBuilder.java Mon Mar 12 18:30:24 2007
@@ -33,6 +33,7 @@
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeMap;
 import java.util.jar.JarFile;
 import java.util.zip.ZipEntry;

@@ -99,7 +100,17 @@
 import org.apache.geronimo.naming.deployment.ENCConfigBuilder;
 import org.apache.geronimo.naming.reference.ResourceReference;
 import org.apache.geronimo.schema.SchemaConversionUtils;
-import org.apache.geronimo.xbeans.geronimo.*;
+import org.apache.geronimo.xbeans.geronimo.GerAdminobjectInstanceType;
+import org.apache.geronimo.xbeans.geronimo.GerAdminobjectType;
+import org.apache.geronimo.xbeans.geronimo.GerConfigPropertySettingType; +import org.apache.geronimo.xbeans.geronimo.GerConnectionDefinitionType; +import org.apache.geronimo.xbeans.geronimo.GerConnectiondefinitionInstanceTyp e;
+import org.apache.geronimo.xbeans.geronimo.GerConnectionmanagerType;
+import org.apache.geronimo.xbeans.geronimo.GerConnectorDocument;
+import org.apache.geronimo.xbeans.geronimo.GerConnectorType;
+import org.apache.geronimo.xbeans.geronimo.GerPartitionedpoolType;
+import org.apache.geronimo.xbeans.geronimo.GerResourceadapterType;
+import org.apache.geronimo.xbeans.geronimo.GerSinglepoolType;
 import org.apache.geronimo.xbeans.j2ee.ActivationspecType;
 import org.apache.geronimo.xbeans.j2ee.AdminobjectType;
 import org.apache.geronimo.xbeans.j2ee.ConfigPropertyType;
@@ -407,6 +418,17 @@
GBeanData resourceAdapterGBeanData = setUpDynamicGBean (resourceAdapterInfoBuilder, resourceadapter.getConfigPropertyArray (), cl);

resourceAdapterGBeanData.setAttribute ("resourceAdapterClass", resourceadapter.getResourceadapterClass ().getStringValue().trim());
+
+ // Add map from messageListenerInterface to activationSpec class + Map<String,String> messageListenerToActivationSpecMap = new TreeMap<String,String>(); + for (MessagelistenerType messagelistenerType : resourceadapter.getInboundResourceadapter().getMessageadapter ().getMessagelistenerArray()) { + String messageListenerInterface = messagelistenerType.getMessagelistenerType().getStringValue().trim(); + ActivationspecType activationspec = messagelistenerType.getActivationspec(); + String activationSpecClassName = activationspec.getActivationspecClass().getStringValue().trim(); + messageListenerToActivationSpecMap.put (messageListenerInterface, activationSpecClassName); + resourceAdapterGBeanData.setAttribute ("messageListenerToActivationSpecMap", messageListenerToActivationSpecMap);
+            }
+
resourceAdapterModuleData.setAttribute ("resourceAdapterGBeanData", resourceAdapterGBeanData);
         }

@@ -439,8 +461,8 @@

GBeanData jcaResourceData = new GBeanData (jcaResourcejsr77Name, JCAResourceImplGBean.GBEAN_INFO);
         Map thisModule = new LinkedHashMap(2);
- thisModule .put(NameFactory.J2EE_APPLICATION, resourceAdapterModuleName.getNameProperty (NameFactory.J2EE_APPLICATION)); - thisModule .put(NameFactory.RESOURCE_ADAPTER_MODULE, resourceAdapterModuleName.getNameProperty(NameFactory.J2EE_NAME)); + thisModule.put(NameFactory.J2EE_APPLICATION, resourceAdapterModuleName.getNameProperty (NameFactory.J2EE_APPLICATION)); + thisModule.put(NameFactory.RESOURCE_ADAPTER_MODULE, resourceAdapterModuleName.getNameProperty(NameFactory.J2EE_NAME)); jcaResourceData.setReferencePattern("ConnectionFactories", new AbstractNameQuery(resourceAdapterModuleName.getArtifact(), thisModule, JCAConnectionFactory.class.getName())); jcaResourceData.setReferencePattern("ResourceAdapters", new AbstractNameQuery(resourceAdapterModuleName.getArtifact(), thisModule, JCAResourceAdapter.class.getName())); jcaResourceData.setReferencePattern("AdminObjects", new AbstractNameQuery(resourceAdapterModuleName.getArtifact(), thisModule, JCAAdminObject.class.getName()));
@@ -556,7 +578,6 @@
             }
         }
     }
-
private Map getActivationSpecInfoMap(MessagelistenerType[] messagelistenerArray, ClassLoader cl) throws DeploymentException {
         Map activationSpecInfos = new HashMap();
         for (int i = 0; i < messagelistenerArray.length; i++) {

Modified: geronimo/server/trunk/modules/geronimo-connector/src/main/ java/org/apache/geronimo/connector/ResourceAdapterWrapper.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/ geronimo-connector/src/main/java/org/apache/geronimo/connector/ ResourceAdapterWrapper.java?view=diff&rev=517486&r1=517485&r2=517486 ====================================================================== ======== --- geronimo/server/trunk/modules/geronimo-connector/src/main/java/ org/apache/geronimo/connector/ResourceAdapterWrapper.java (original) +++ geronimo/server/trunk/modules/geronimo-connector/src/main/java/ org/apache/geronimo/connector/ResourceAdapterWrapper.java Mon Mar 12 18:30:24 2007
@@ -25,6 +25,7 @@
 import javax.resource.spi.ResourceAdapterInternalException;
 import javax.resource.spi.endpoint.MessageEndpointFactory;
 import javax.transaction.xa.XAResource;
+import java.util.Map;

 /**
* Dynamic GBean wrapper around a ResourceAdapter object, exposing the config-properties as
@@ -34,39 +35,63 @@
  */
 public class ResourceAdapterWrapper implements ResourceAdapter {

+    private final String name;
+
     private final String resourceAdapterClass;

     private final BootstrapContext bootstrapContext;

     protected final ResourceAdapter resourceAdapter;

+ private final Map<String,String> messageListenerToActivationSpecMap;
+

     /**
      *  default constructor for enhancement proxy endpoint
      */
     public ResourceAdapterWrapper() {
+        this.name = null;
         this.resourceAdapterClass = null;
         this.bootstrapContext = null;
         this.resourceAdapter = null;
+        this.messageListenerToActivationSpecMap = null;
     }

-    public ResourceAdapterWrapper(String resourceAdapterClass,
+    public ResourceAdapterWrapper(String name,
+            String resourceAdapterClass,
+            Map<String,String> messageListenerToActivationSpecMap,
             BootstrapContext bootstrapContext,
ClassLoader cl) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
+        this.name = name;
         this.resourceAdapterClass = resourceAdapterClass;
         this.bootstrapContext = bootstrapContext;
         Class clazz = cl.loadClass(resourceAdapterClass);
         resourceAdapter = (ResourceAdapter) clazz.newInstance();
+ this.messageListenerToActivationSpecMap = messageListenerToActivationSpecMap;
     }

- public ResourceAdapterWrapper(ResourceAdapter resourceAdapter, BootstrapContext bootstrapContext) { + public ResourceAdapterWrapper(String name, ResourceAdapter resourceAdapter, Map<String,String> messageListenerToActivationSpecMap, BootstrapContext bootstrapContext) {
+        this.name = name;
this.resourceAdapterClass = resourceAdapter.getClass ().getName();
         this.bootstrapContext = bootstrapContext;
         this.resourceAdapter = resourceAdapter;
+ this.messageListenerToActivationSpecMap = messageListenerToActivationSpecMap;
+    }
+
+    public String getName() {
+        return name;
     }

     public String getResourceAdapterClass() {
         return resourceAdapterClass;
+    }
+
+ public Map<String,String> getMessageListenerToActivationSpecMap () {
+        return messageListenerToActivationSpecMap;
+    }
+
+    public ResourceAdapter getResourceAdapter() {
+        return resourceAdapter;
     }

public void registerResourceAdapterAssociation(final ResourceAdapterAssociation resourceAdapterAssociation) throws ResourceException {

Modified: geronimo/server/trunk/modules/geronimo-connector/src/main/ java/org/apache/geronimo/connector/ResourceAdapterWrapperGBean.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/ geronimo-connector/src/main/java/org/apache/geronimo/connector/ ResourceAdapterWrapperGBean.java? view=diff&rev=517486&r1=517485&r2=517486 ====================================================================== ======== --- geronimo/server/trunk/modules/geronimo-connector/src/main/java/ org/apache/geronimo/connector/ResourceAdapterWrapperGBean.java (original) +++ geronimo/server/trunk/modules/geronimo-connector/src/main/java/ org/apache/geronimo/connector/ResourceAdapterWrapperGBean.java Mon Mar 12 18:30:24 2007
@@ -29,6 +29,7 @@
 import javax.resource.spi.ResourceAdapterAssociation;
 import javax.resource.spi.XATerminator;
 import javax.resource.spi.work.WorkManager;
+import java.util.Map;

 /**
  *
@@ -44,8 +45,8 @@
         objectName = null;
     }

- public ResourceAdapterWrapperGBean(String resourceAdapterClass, WorkManager workManager, XATerminator xaTerminator, ClassLoader cl, String objectName) throws InstantiationException, IllegalAccessException, ClassNotFoundException { - super(resourceAdapterClass, new GeronimoBootstrapContext (workManager, xaTerminator), cl); + public ResourceAdapterWrapperGBean(String resourceAdapterClass, Map<String,String> messageListenerToActivationSpecMap, WorkManager workManager, XATerminator xaTerminator, ClassLoader cl, String objectName) throws InstantiationException, IllegalAccessException, ClassNotFoundException { + super(objectName, resourceAdapterClass, messageListenerToActivationSpecMap, new GeronimoBootstrapContext (workManager, xaTerminator), cl);
         delegate = new DynamicGBeanDelegate();
         delegate.addAll(resourceAdapter);
         this.objectName = objectName;
@@ -73,7 +74,7 @@
     }

     public boolean isStatisticsProvider() {
-        return false;
+        return false;
     }

     public boolean isEventProvider() {
@@ -87,6 +88,7 @@
infoBuilder.addAttribute("resourceAdapterClass", String.class, true); infoBuilder.addAttribute("classLoader", ClassLoader.class, false);
         infoBuilder.addAttribute("objectName", String.class, false);
+ infoBuilder.addAttribute ("messageListenerToActivationSpecMap", Map.class, true);

infoBuilder.addReference("WorkManager", WorkManager.class, NameFactory.JCA_WORK_MANAGER); infoBuilder.addReference("XATerminator", XATerminator.class, NameFactory.JCA_WORK_MANAGER);
@@ -96,7 +98,7 @@
         infoBuilder.addInterface(ResourceAdapter.class);
         infoBuilder.addInterface(JCAResourceAdapter.class);

- infoBuilder.setConstructor(new String[] {"resourceAdapterClass", "WorkManager", "XATerminator", "classLoader", "objectName"}); + infoBuilder.setConstructor(new String[] {"resourceAdapterClass", "messageListenerToActivationSpecMap", "WorkManager", "XATerminator", "classLoader", "objectName"});

         GBEAN_INFO = infoBuilder.getBeanInfo();
     }

Modified: geronimo/server/trunk/modules/geronimo-openejb-builder/ geronimo-openejb.xml URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/ geronimo-openejb-builder/geronimo-openejb.xml? view=diff&rev=517486&r1=517485&r2=517486 ====================================================================== ======== --- geronimo/server/trunk/modules/geronimo-openejb-builder/geronimo- openejb.xml (original) +++ geronimo/server/trunk/modules/geronimo-openejb-builder/geronimo- openejb.xml Mon Mar 12 18:30:24 2007
@@ -43,8 +43,287 @@
                 <artifactId>system-database</artifactId>
                 <type>car</type>
             </dependency>
+            <dependency>
+                <groupId>org.apache.geronimo.configs</groupId>
+                <artifactId>activemq</artifactId>
+                <type>car</type>
+            </dependency>
         </dependencies>
     </environment>
+    <openejb-jar>
+      <openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1";>
+ <ejb-deployment ejb-name="BasicCmpBean" deployment- id="client/tests/entity/cmp/BasicCmpHome" container-id="Default CMP Container">
+          <query>
+            <query-method>
+              <method-name>findByLastName</method-name>
+              <method-params>
+                <method-param>java.lang.String</method-param>
+              </method-params>
+            </query-method>
+ <object-ql>SELECT o FROM BasicCmpBeanX o WHERE o.lastName = ?1</object-ql>
+          </query>
+          <query>
+            <query-method>
+              <method-name>findEmptyCollection</method-name>
+              <method-params/>
+            </query-method>
+ <object-ql>SELECT o FROM BasicCmpBean o WHERE 'true' = 'false'</object-ql>
+          </query>
+        </ejb-deployment>
+ <ejb-deployment ejb-name="BasicCmp2Bean" deployment- id="client/tests/entity/cmp2/BasicCmpHome" container-id="Default CMP Container">
+          <query>
+            <query-method>
+              <method-name>findByLastName</method-name>
+              <method-params>
+                <method-param>java.lang.String</method-param>
+              </method-params>
+            </query-method>
+ <object-ql>SELECT o FROM BasicCmp2Bean o WHERE o.lastName = ?1</object-ql>
+          </query>
+          <query>
+            <query-method>
+              <method-name>findEmptyCollection</method-name>
+              <method-params/>
+            </query-method>
+ <object-ql>SELECT o FROM BasicCmp2Bean o WHERE 'true' = 'false'</object-ql>
+          </query>
+        </ejb-deployment>
+ <ejb-deployment ejb-name="AOBasicCmpBean" deployment- id="client/tests/entity/cmp/allowed_operations/EntityHome" container-id="Default CMP Container">
+          <query>
+            <query-method>
+              <method-name>findByLastName</method-name>
+              <method-params>
+                <method-param>java.lang.String</method-param>
+              </method-params>
+            </query-method>
+ <object-ql>SELECT o FROM AllowedOperationsCmpBean o WHERE o.lastName = ?1</object-ql>
+          </query>
+          <query>
+            <query-method>
+              <method-name>findEmptyCollection</method-name>
+              <method-params/>
+            </query-method>
+ <object-ql>SELECT o FROM AllowedOperationsCmpBean o WHERE 'true' = 'false'</object-ql>
+          </query>
+        </ejb-deployment>
+ <ejb-deployment ejb-name="AOBasicCmp2Bean" deployment- id="client/tests/entity/cmp2/allowed_operations/EntityHome" container-id="Default CMP Container">
+          <query>
+            <query-method>
+              <method-name>findByLastName</method-name>
+              <method-params>
+                <method-param>java.lang.String</method-param>
+              </method-params>
+            </query-method>
+ <object-ql>SELECT o FROM AllowedOperationsCmp2Bean o WHERE o.lastName = ?1</object-ql>
+          </query>
+          <query>
+            <query-method>
+              <method-name>findEmptyCollection</method-name>
+              <method-params/>
+            </query-method>
+ <object-ql>SELECT o FROM AllowedOperationsCmp2Bean o WHERE 'true' = 'false'</object-ql>
+          </query>
+        </ejb-deployment>
+ <ejb-deployment ejb-name="EncCmpBean" deployment- id="client/tests/entity/cmp/EncBean" container-id="Default CMP Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="EncCmp2Bean" deployment- id="client/tests/entity/cmp2/EncBean" container-id="Default CMP Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="ContextLookupCmpBean" deployment- id="client/tests/entity/cmp/ContextLookupCmpBean" container- id="Default CMP Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="Cmp RMI-IIOP Bean" deployment- id="client/tests/entity/cmp/RMI-over-IIOP/EJBHome" container- id="Default CMP Container"/> + <ejb-deployment ejb-name="Cmp2 RMI-IIOP Bean" deployment- id="client/tests/entity/cmp2/RMI-over-IIOP/EJBHome" container- id="Default CMP Container"/> + <ejb-deployment ejb-name="OneToOneA" deployment-id="client/ tests/entity/cmr/oneToOne/AHome" container-id="Default CMP Container"/> + <ejb-deployment ejb-name="OneToOneB" deployment-id="client/ tests/entity/cmr/oneToOne/BHome" container-id="Default CMP Container"/> + <ejb-deployment ejb-name="OneToManyA" deployment- id="client/tests/entity/cmr/oneToMany/AHome" container-id="Default CMP Container"/> + <ejb-deployment ejb-name="OneToManyB" deployment- id="client/tests/entity/cmr/oneToMany/BHome" container-id="Default CMP Container"/> + <ejb-deployment ejb-name="OneOwningSideBean" deployment- id="client/tests/entity/cmp2/OneOwningSideBean/EJBHome" container- id="Default CMP Container"/> + <ejb-deployment ejb-name="OneInverseSideBean" deployment- id="client/tests/entity/cmp2/OneInverseSideBean/EJBHome" container- id="Default CMP Container"/> + <ejb-deployment ejb-name="ManyOwningSideBean" deployment- id="client/tests/entity/cmp2/ManyOwningSideBean/EJBHome" container- id="Default CMP Container"/> + <ejb-deployment ejb-name="BasicStatefulBean" deployment- id="client/tests/stateful/BasicStatefulHome" container-id="Default Stateful Container"/> + <ejb-deployment ejb-name="BasicStatefulPojoBean" deployment-id="client/tests/stateful/BasicStatefulPojoHome" container-id="Default Stateful Container"/> + <ejb-deployment ejb-name="Basic BMT StatefulBean" deployment-id="client/tests/stateful/BeanManagedBasicStatefulHome" container-id="Default Stateful Container"/> + <ejb-deployment ejb-name="BMT StatefulBean" deployment- id="client/tests/stateful/BeanManagedTransactionTests/EJBHome" container-id="Default Stateful Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="EncStatefulBean" deployment- id="client/tests/stateful/EncBean" container-id="Default Stateful Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="FieldInjectionStatefulBean" deployment-id="client/tests/stateful/FieldInjectionStatefulBean" container-id="Default Stateful Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="SetterInjectionStatefulBean" deployment-id="client/tests/stateful/SetterInjectionStatefulBean" container-id="Default Stateful Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="PersistenceContextStatefulBean" deployment-id="client/tests/stateful/ PersistenceContextStatefulBean" container-id="Default Stateful Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="ContextLookupStatefulBean" deployment-id="client/tests/stateful/ContextLookupStatefulBean" container-id="Default Stateful Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="ContextLookupStatefulPojoBean" deployment-id="client/tests/stateful/ContextLookupStatefulPojoBean" container-id="Default Stateful Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="Stateful RMI-IIOP Bean" deployment-id="client/tests/stateful/RMI-over-IIOP/EJBHome" container-id="Default Stateful Container"/> + <ejb-deployment ejb-name="BasicStatelessBean" deployment- id="client/tests/stateless/BasicStatelessHome" container- id="Default Stateless Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="BasicStatelessPojoBean" deployment-id="client/tests/stateless/BasicStatelessPojoHome" container-id="Default Stateless Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="Basic BMT StatelessBean" deployment-id="client/tests/stateless/ BeanManagedBasicStatelessHome" container-id="Default Stateless Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="DatabaseBean" deployment- id="client/tools/DatabaseHome" container-id="Default Stateless Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="BMT StatelessBean" deployment- id="client/tests/stateless/BeanManagedTransactionTests/EJBHome" container-id="Default Stateless Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="EncStatelessBean" deployment- id="client/tests/stateless/EncBean" container-id="Default Stateless Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="FieldInjectionStatelessBean" deployment-id="client/tests/stateless/FieldInjectionStatelessBean" container-id="Default Stateless Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="SetterInjectionStatelessBean" deployment-id="client/tests/stateless/SetterInjectionStatelessBean" container-id="Default Stateless Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="ContextLookupStatelessBean" deployment-id="client/tests/stateless/ContextLookupStatelessBean" container-id="Default Stateless Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="ContextLookupStatelessPojoBean" deployment-id="client/tests/stateless/ ContextLookupStatelessPojoBean" container-id="Default Stateless Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="Stateless RMI-IIOP Bean" deployment-id="client/tests/stateless/RMI-over-IIOP/EJBHome" container-id="Default Stateless Container"/> + <ejb-deployment ejb-name="BasicBmpBean" deployment- id="client/tests/entity/bmp/BasicBmpHome" container-id="Default BMP Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="AOBasicBmpBean" deployment- id="client/tests/entity/bmp/allowed_operations/EntityHome" container-id="Default BMP Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="EncBmpBean" deployment- id="client/tests/entity/bmp/EncBean" container-id="Default BMP Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="ContextLookupBmpBean" deployment- id="client/tests/entity/bmp/ContextLookupBmpBean" container- id="Default BMP Container">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="Bmp RMI-IIOP Bean" deployment- id="client/tests/entity/bmp/RMI-over-IIOP/EJBHome" container- id="Default BMP Container"/> + <ejb-deployment ejb-name="BasicMdbBean" deployment- id="client/tests/messagedriven/mdb/BasicMdb">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="Basic BMT Mdb Bean" deployment- id="Basic BMT Mdb Bean">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="EncMdbBean" deployment- id="EncMdbBean">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="ContextLookupMdbBean" deployment- id="ContextLookupMdbBean">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="ContextLookupMdbPojoBean" deployment-id="ContextLookupMdbPojoBean">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="FieldInjectionMdbBean" deployment-id="FieldInjectionMdbBean">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="SetterInjectionMdbBean" deployment-id="SetterInjectionMdbBean">
+        </ejb-deployment>
+ <ejb-deployment ejb-name="TimerSyncBean" deployment- id="TimerSyncBean" container-id="Default Stateless Container"/>
+      </openejb-jar>
+    </openejb-jar>
+    <n:resource-ref>
+        <n:ref-name>jms</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
+    <n:resource-ref>
+        <n:ref-name>QueueCF</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
+    <n:resource-ref>
+        <n:ref-name>TopicCF</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
+    <n:resource-ref>
+        <n:ref-name>connectionFactory</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
+    <n:resource-ref>
+        <n:ref-name>queueConnectionFactory</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
+    <n:resource-ref>
+        <n:ref-name>topicConnectionFactory</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
+    <n:resource-ref>
+ <n:ref- name>org.apache.openejb.test.stateful.AnnotatedFieldInjectionStatefulB ean/coonnectionFactory</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
+    <n:resource-ref>
+ <n:ref- name>org.apache.openejb.test.stateful.AnnotatedFieldInjectionStatefulB ean/queueCoonnectionFactory</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
+    <n:resource-ref>
+ <n:ref- name>org.apache.openejb.test.stateful.AnnotatedFieldInjectionStatefulB ean/topicCoonnectionFactory</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
+    <n:resource-ref>
+ <n:ref- name>org.apache.openejb.test.stateless.AnnotatedFieldInjectionStateles sBean/coonnectionFactory</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
+    <n:resource-ref>
+ <n:ref- name>org.apache.openejb.test.stateless.AnnotatedFieldInjectionStateles sBean/queueCoonnectionFactory</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
+    <n:resource-ref>
+ <n:ref- name>org.apache.openejb.test.stateless.AnnotatedFieldInjectionStateles sBean/topicCoonnectionFactory</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
+    <n:resource-ref>
+ <n:ref- name>org.apache.openejb.test.mdb.AnnotatedFieldInjectionMdbBean/ coonnectionFactory</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
+    <n:resource-ref>
+ <n:ref- name>org.apache.openejb.test.mdb.AnnotatedFieldInjectionMdbBean/ queueCoonnectionFactory</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
+    <n:resource-ref>
+ <n:ref- name>org.apache.openejb.test.mdb.AnnotatedFieldInjectionMdbBean/ topicCoonnectionFactory</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>activemq</n:artifactId>
+            <n:name>DefaultActiveMQConnectionFactory</n:name>
+        </n:pattern>
+    </n:resource-ref>
     <n:resource-ref>
         <n:ref-name>database</n:ref-name>
         <n:pattern>
@@ -93,6 +372,14 @@
             <n:name>SystemDatasource</n:name>
         </n:pattern>
     </n:resource-ref>
+    <n:resource-ref>
+ <n:ref- name>org.apache.openejb.test.mdb.AnnotatedFieldInjectionMdbBean/ daataSource</n:ref-name>
+        <n:pattern>
+            <n:groupId>org.apache.geronimo.configs</n:groupId>
+            <n:artifactId>system-database</n:artifactId>
+            <n:name>SystemDatasource</n:name>
+        </n:pattern>
+    </n:resource-ref>
     <n:persistence-context-ref>
<n:persistence-context-ref-name>persistence/TestContext</ n:persistence-context-ref-name> <n:persistence-unit-name>openjpa-test-unit</n:persistence- unit-name>
@@ -103,30 +390,9 @@
<n:persistence-unit-name>openjpa-test-unit</n:persistence- unit-name> <n:persistence-context-type>Extended</n:persistence- context-type>
     </n:persistence-context-ref>
-    <n:persistence-context-ref>
- <n:persistence-context-ref-name>openejb/cmp</n:persistence- context-ref-name>
-        <n:persistence-unit-name>cmp</n:persistence-unit-name>
- <n:persistence-context-type>Transactional</n:persistence- context-type>
-    </n:persistence-context-ref>
     <n:persistence-unit-ref>
<n:persistence-unit-ref-name>persistence/TestUnit</ n:persistence-unit-ref-name> <n:persistence-unit-name>openjpa-test-unit</n:persistence- unit-name>
     </n:persistence-unit-ref>

- <persistence xmlns="http://java.sun.com/xml/ns/persistence"; version="1.0">
-        <persistence-unit transaction-type="JTA" name="cmp">
- <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</ provider>
-            <jta-data-source>?name=SystemDatasource</jta-data-source>
- <non-jta-data-source>?name=NoTxDatasource</non-jta- data-source>
-            <mapping-file>META-INF/jpa.mapping.xml</mapping-file>
- <class>org.apache.openejb.test.entity.cmp.BasicCmpBean</class> - <exclude-unlisted-classes>false</exclude-unlisted- classes>
-        </persistence-unit>
- <persistence-unit transaction-type="JTA" name="openjpa- test-unit"> - <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</ provider>
-            <jta-data-source>?name=SystemDatasource</jta-data-source>
- <non-jta-data-source>?name=NoTxDatasource</non-jta- data-source>
-            <class>org.apache.openejb.test.entity.Customer</class>
-        </persistence-unit>
-    </persistence>
 </ejb-jar>

Modified: geronimo/server/trunk/modules/geronimo-openejb-builder/ src/main/java/org/apache/geronimo/openejb/deployment/ EjbModuleBuilder.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/ geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/ deployment/EjbModuleBuilder.java? view=diff&rev=517486&r1=517485&r2=517486 ====================================================================== ======== --- geronimo/server/trunk/modules/geronimo-openejb-builder/src/main/ java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java (original) +++ geronimo/server/trunk/modules/geronimo-openejb-builder/src/main/ java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java Mon Mar 12 18:30:24 2007
@@ -31,6 +31,7 @@

 import javax.ejb.EntityContext;
 import javax.ejb.SessionContext;
+import javax.ejb.MessageDrivenContext;
 import javax.xml.namespace.QName;

 import org.apache.commons.logging.Log;
@@ -296,6 +297,8 @@
if (ref.getType().equals (SessionContext.class.getName())) {
                     iterator.remove();
} else if (ref.getType().equals (EntityContext.class.getName())) {
+                    iterator.remove();
+ } else if (ref.getType().equals (MessageDrivenContext.class.getName())) {
                     iterator.remove();
                 } else {
                     ref.setMappedName(null);

Modified: geronimo/server/trunk/modules/geronimo-openejb/src/main/ java/org/apache/geronimo/openejb/OpenEjbSystemGBean.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/ geronimo-openejb/src/main/java/org/apache/geronimo/openejb/ OpenEjbSystemGBean.java?view=diff&rev=517486&r1=517485&r2=517486 ====================================================================== ======== --- geronimo/server/trunk/modules/geronimo-openejb/src/main/java/ org/apache/geronimo/openejb/OpenEjbSystemGBean.java (original) +++ geronimo/server/trunk/modules/geronimo-openejb/src/main/java/ org/apache/geronimo/openejb/OpenEjbSystemGBean.java Mon Mar 12 18:30:24 2007
@@ -16,51 +16,69 @@
  */
 package org.apache.geronimo.openejb;

-import java.io.IOException;
-import java.util.Properties;
-import javax.naming.NamingException;
-import javax.transaction.TransactionManager;
-
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.geronimo.connector.ResourceAdapterWrapper;
+import org.apache.geronimo.gbean.AbstractName;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
-import org.apache.geronimo.gbean.AbstractName;
-import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.gbean.ReferenceCollection;
+import org.apache.geronimo.gbean.ReferenceCollectionListener;
+import org.apache.geronimo.gbean.ReferenceCollectionEvent;
 import org.apache.geronimo.kernel.GBeanNotFoundException;
+import org.apache.geronimo.kernel.Kernel;
 import org.apache.openejb.Container;
 import org.apache.openejb.DeploymentInfo;
+import org.apache.openejb.NoSuchApplicationException;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.UndeployException;
-import org.apache.openejb.NoSuchApplicationException;
-import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.core.ServerFederation;
-import org.apache.openejb.util.proxy.Jdk13ProxyFactory;
-import org.apache.openejb.config.ClientModule;
-import org.apache.openejb.config.ConfigurationFactory;
-import org.apache.openejb.config.EjbModule;
-import org.apache.openejb.config.AppModule;
+import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.assembler.classic.ClientInfo;
 import org.apache.openejb.assembler.classic.ContainerInfo;
 import org.apache.openejb.assembler.classic.EjbJarInfo;
-import org.apache.openejb.assembler.classic.TransactionServiceInfo;
+import org.apache.openejb.assembler.classic.MdbContainerInfo;
 import org.apache.openejb.assembler.classic.ProxyFactoryInfo;
 import org.apache.openejb.assembler.classic.SecurityServiceInfo;
-import org.apache.openejb.assembler.classic.AppInfo;
+import org.apache.openejb.assembler.classic.TransactionServiceInfo;
 import org.apache.openejb.assembler.dynamic.PassthroughFactory;
-import org.apache.openejb.spi.ContainerSystem;
+import org.apache.openejb.config.AppModule;
+import org.apache.openejb.config.ClientModule;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.config.EjbModule;
+import org.apache.openejb.core.ServerFederation;
+import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.spi.ApplicationServer;
+import org.apache.openejb.spi.ContainerSystem;
+import org.apache.openejb.util.proxy.Jdk13ProxyFactory;
+
+import javax.naming.NamingException;
+import javax.resource.spi.ResourceAdapter;
+import javax.transaction.TransactionManager;
+import javax.management.ObjectName;
+import javax.management.MalformedObjectNameException;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;

 /**
  * @version $Rev$ $Date$
  */
 public class OpenEjbSystemGBean implements OpenEjbSystem {
+ private static final Log log = LogFactory.getLog (OpenEjbSystemGBean.class);
     private final ConfigurationFactory configurationFactory;
     private final Assembler assembler;
+ private final ConcurrentMap<String,ResourceAdapterWrapper> processedResourceAdapterWrappers = new ConcurrentHashMap<String,ResourceAdapterWrapper>() ;
+    private final ClassLoader classLoader;

public OpenEjbSystemGBean(TransactionManager transactionManager) throws Exception {
-        this(transactionManager, null);
+ this(transactionManager, null, null, OpenEjbSystemGBean.class.getClassLoader());
     }
- public OpenEjbSystemGBean(TransactionManager transactionManager, Kernel kernel) throws Exception { + public OpenEjbSystemGBean(TransactionManager transactionManager, Collection<ResourceAdapterWrapper> resourceAdapters, Kernel kernel, ClassLoader classLoader) throws Exception {
+        this.classLoader = classLoader;
         System.setProperty("duct tape","");
         SystemInstance systemInstance = SystemInstance.get();

@@ -108,6 +126,9 @@

         // add our thread context listener
         GeronimoThreadContextListener.init();
+
+        // process all resource adapters
+        processResourceAdapterWrappers(resourceAdapters);
     }

     @SuppressWarnings({"unchecked"})
@@ -126,6 +147,97 @@
         return proxy;
     }

+ private void processResourceAdapterWrappers (Collection<ResourceAdapterWrapper> resourceAdapterWrappers) {
+        if (resourceAdapterWrappers == null) {
+            return;
+        }
+
+        if (resourceAdapterWrappers instanceof ReferenceCollection) {
+ ReferenceCollection referenceCollection = (ReferenceCollection) resourceAdapterWrappers; + referenceCollection.addReferenceCollectionListener(new ReferenceCollectionListener() { + public void memberAdded(ReferenceCollectionEvent event) { + addResourceAdapter((ResourceAdapterWrapper) event.getMember());
+                }
+
+ public void memberRemoved(ReferenceCollectionEvent event) { + removeResourceAdapter((ResourceAdapterWrapper) event.getMember());
+                }
+            });
+        }
+ for (ResourceAdapterWrapper resourceAdapterWrapper : resourceAdapterWrappers) {
+            addResourceAdapter(resourceAdapterWrapper);
+        }
+
+    }
+
+ private void addResourceAdapter(ResourceAdapterWrapper resourceAdapterWrapper) { + ResourceAdapter resourceAdapter = resourceAdapterWrapper.getResourceAdapter();
+        if (resourceAdapter == null) {
+            return;
+        }
+
+ Map<String, String> listenerToActivationSpecMap = resourceAdapterWrapper.getMessageListenerToActivationSpecMap();
+        if (listenerToActivationSpecMap == null) {
+            return;
+        }
+
+ ClassLoader oldClassLoader = Thread.currentThread ().getContextClassLoader();
+        Thread.currentThread().setContextClassLoader(classLoader);
+        try {
+ for (Map.Entry<String, String> entry : listenerToActivationSpecMap.entrySet()) {
+                String messageListenerInterface = entry.getKey();
+                String activationSpecClass = entry.getValue();
+
+                // only process RA if not previously processed
+ String containerName = getResourceAdapterId (resourceAdapterWrapper) + "-" + messageListenerInterface; + if (processedResourceAdapterWrappers.putIfAbsent (containerName, resourceAdapterWrapper) == null) {
+                    try {
+                        // get default mdb config
+ ContainerInfo containerInfo = configurationFactory.configureService(MdbContainerInfo.class);
+                        containerInfo.id = containerName;
+                        containerInfo.displayName = containerName;
+
+                        // set ra specific properties
+ containerInfo.properties.setProperty ("MessageListenerInterface", messageListenerInterface); + containerInfo.properties.setProperty ("ActivationSpecClass", activationSpecClass); + containerInfo.properties.put ("ResourceAdapter", resourceAdapter);
+
+                        // create the container
+                        assembler.createContainer(containerInfo);
+                    } catch (OpenEJBException e) {
+ log.error("Unable to deploy mdb container " + containerName, e);
+                    }
+                }
+            }
+        } finally {
+ Thread.currentThread().setContextClassLoader (oldClassLoader);
+        }
+    }
+
+
+ private void removeResourceAdapter(ResourceAdapterWrapper resourceAdapterWrapper) { + for (String messageListenerInterface : resourceAdapterWrapper.getMessageListenerToActivationSpecMap ().keySet()) { + String containerName = getResourceAdapterId (resourceAdapterWrapper) + "-" + messageListenerInterface;
+            processedResourceAdapterWrappers.remove(containerName);
+            assembler.removeContainer(containerName);
+        }
+    }
+
+ private String getResourceAdapterId(ResourceAdapterWrapper resourceAdapterWrapper) {
+        String name = resourceAdapterWrapper.getName();
+        try {
+            ObjectName objectName = new ObjectName(name);
+            Map properties = objectName.getKeyPropertyList();
+            String shortName = (String) properties.get("name");
+ String moduleName = (String) properties.get ("ResourceAdapterModule");
+            if (shortName != null && moduleName != null) {
+                return moduleName + "." + shortName;
+            }
+        } catch (Exception ignored) {
+        }
+        return name;
+    }
+
     public ContainerSystem getContainerSystem() {
         return assembler.getContainerSystem();
     }
@@ -200,10 +312,14 @@
     static {
GBeanInfoBuilder infoBuilder = GBeanInfoBuilder.createStatic(OpenEjbSystemGBean.class); infoBuilder.addReference("TransactionManager", TransactionManager.class); + infoBuilder.addReference("ResourceAdapterWrappers", ResourceAdapterWrapper.class);
         infoBuilder.addAttribute("kernel", Kernel.class, false);
+ infoBuilder.addAttribute("classLoader", ClassLoader.class, false);
         infoBuilder.setConstructor(new String[] {
                 "TransactionManager",
+                "ResourceAdapterWrappers",
                 "kernel",
+                "classLoader",
         });
         GBEAN_INFO = infoBuilder.getBeanInfo();
     }

Modified: geronimo/server/trunk/modules/geronimo-persistence-jpa10- builder/src/main/java/org/apache/geronimo/persistence/builder/ PersistenceContextRefBuilder.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/ geronimo-persistence-jpa10-builder/src/main/java/org/apache/ geronimo/persistence/builder/PersistenceContextRefBuilder.java? view=diff&rev=517486&r1=517485&r2=517486 ====================================================================== ======== --- geronimo/server/trunk/modules/geronimo-persistence-jpa10- builder/src/main/java/org/apache/geronimo/persistence/builder/ PersistenceContextRefBuilder.java (original) +++ geronimo/server/trunk/modules/geronimo-persistence-jpa10- builder/src/main/java/org/apache/geronimo/persistence/builder/ PersistenceContextRefBuilder.java Mon Mar 12 18:30:24 2007
@@ -109,7 +109,10 @@
             try {
localConfiguration.findGBeanData (persistenceUnitNameQuery);
             } catch (GBeanNotFoundException e) {
- throw new DeploymentException("Could not resolve reference at deploy time for query " + persistenceUnitNameQuery, e); + // something is broken with cmp references that stops deployment... this is just a patch around the real problem + // throw new DeploymentException("Could not resolve reference at deploy time for query " + persistenceUnitNameQuery, e); + new DeploymentException("Could not resolve reference at deploy time for query " + persistenceUnitNameQuery, e).printStackTrace();
+                continue;
             }

PersistenceContextReference reference = new PersistenceContextReference(localConfiguration.getId(), persistenceUnitNameQuery, transactionScoped, properties);



Reply via email to