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/01/10 21:50:15 UTC

svn commit: r494973 - in /incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb: alt/config/ assembler/classic/

Author: dain
Date: Wed Jan 10 12:50:14 2007
New Revision: 494973

URL: http://svn.apache.org/viewvc?view=rev&rev=494973
Log:
Added persistence-contest-ref data to deployment process

Added:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java
Modified:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncInfo.java

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java?view=diff&rev=494973&r1=494972&r2=494973
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java Wed Jan 10 12:50:14 2007
@@ -27,6 +27,7 @@
 import org.apache.openejb.assembler.classic.EjbJarInfo;
 import org.apache.openejb.assembler.classic.PersistenceUnitInfo;
 import org.apache.openejb.assembler.classic.InjectionInfo;
+import org.apache.openejb.assembler.classic.PersistenceContextInfo;
 import org.apache.openejb.jee.EjbLocalRef;
 import org.apache.openejb.jee.EjbRef;
 import org.apache.openejb.jee.EnvEntry;
@@ -35,6 +36,9 @@
 import org.apache.openejb.jee.ResourceRef;
 import org.apache.openejb.jee.Injectable;
 import org.apache.openejb.jee.InjectionTarget;
+import org.apache.openejb.jee.PersistenceContextRef;
+import org.apache.openejb.jee.PersistenceContextType;
+import org.apache.openejb.jee.Property;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.Messages;
 
@@ -107,21 +111,42 @@
         jndi.ejbLocalReferences.addAll(buildEjbLocalRefInfos(jndiConsumer, ejbName));
 
         jndi.persistenceUnitRefs.addAll(buildPersistenceUnitRefInfos(jndiConsumer));
+
+        jndi.persistenceContextRefs.addAll(buildPersistenceContextRefInfos(jndiConsumer));
         return jndi;
     }
 
     private List<PersistenceUnitInfo> buildPersistenceUnitRefInfos(JndiConsumer jndiConsumer) {
         ArrayList<PersistenceUnitInfo> infos = new ArrayList<PersistenceUnitInfo>();
         for (PersistenceUnitRef puRef : jndiConsumer.getPersistenceUnitRef()) {
-        	PersistenceUnitInfo info = new PersistenceUnitInfo();
+            PersistenceUnitInfo info = new PersistenceUnitInfo();
             info.referenceName = puRef.getPersistenceUnitRefName();
-            info.persistenceUnitName = puRef.getPersistenceUnitName();            
+            info.persistenceUnitName = puRef.getPersistenceUnitName();
+            infos.add(info);
+        }
+        return infos;
+    }
+
+    private List<PersistenceContextInfo> buildPersistenceContextRefInfos(JndiConsumer jndiConsumer) {
+        ArrayList<PersistenceContextInfo> infos = new ArrayList<PersistenceContextInfo>();
+
+        for (PersistenceContextRef contextRef : jndiConsumer.getPersistenceContextRef()) {
+            PersistenceContextInfo info = new PersistenceContextInfo();
+            info.referenceName = contextRef.getPersistenceContextRefName();
+            info.persistenceUnitName = contextRef.getPersistenceUnitName();
+            info.extended = (contextRef.getPersistenceContextType() == PersistenceContextType.EXTENDED);
+            List<Property> persistenceProperty = contextRef.getPersistenceProperty();
+            for (Property property : persistenceProperty) {
+                String name = property.getName();
+                String value = property.getValue();
+                info.properties.setProperty(name, value);
+            }
             infos.add(info);
         }
-        return infos;       
+        return infos;
     }
 
-    private void buildAmbiguousEjbRefInfos(JndiEncInfo jndi, JndiConsumer jndiConsumer, String referringComponent) throws OpenEJBException {
+    private void buildAmbiguousEjbRefInfos(JndiEncInfo sjndi, JndiConsumer jndiConsumer, String referringComponent) throws OpenEJBException {
         ArrayList<EjbRef> ejbRefs = new ArrayList<EjbRef>(jndiConsumer.getEjbRef());
         for (EjbRef ejb : ejbRefs) {
             if (ejb.getType() != EjbRef.Type.UNKNOWN) continue;

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java?view=diff&rev=494973&r1=494972&r2=494973
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java Wed Jan 10 12:50:14 2007
@@ -142,6 +142,14 @@
             }
         }
 
+        for (PersistenceContextInfo info : bean.jndiEnc.persistenceContextRefs) {
+            for (InjectionInfo target : info.targets) {
+                Class targetClass = loadClass(target.className, "classNotFound.injectionTarget");
+                Injection injection = new Injection(info.referenceName, target.propertyName, targetClass);
+                deployment.getInjections().add(injection);
+            }
+        }
+
         for (ResourceReferenceInfo info : bean.jndiEnc.resourceRefs) {
             for (InjectionInfo target : info.targets) {
                 Class targetClass = loadClass(target.className, "classNotFound.injectionTarget");

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?view=diff&rev=494973&r1=494972&r2=494973
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java Wed Jan 10 12:50:14 2007
@@ -53,6 +53,7 @@
     private final EnvEntryInfo[] envEntries;
     private final ResourceReferenceInfo[] resourceRefs;
     private final PersistenceUnitInfo[] persistenceUnitRefs;
+    private final PersistenceContextInfo[] persistenceContextRefs;
     private final Map<String, EntityManagerFactory> entityManagerFactories;
     private final Map<String, Map<String, EntityManagerFactory>> allFactories;
     private final String jarPath;
@@ -109,6 +110,12 @@
         	persistenceUnitRefs = new PersistenceUnitInfo[]{};
         }      
         
+        if ((jndiEnc != null && jndiEnc.persistenceContextRefs != null)) {
+        	persistenceContextRefs = jndiEnc.persistenceContextRefs.toArray(new PersistenceContextInfo[0]);
+        } else {
+        	persistenceContextRefs = new PersistenceContextInfo[]{};
+        }
+
         if(allFactories != null){
         	this.allFactories = allFactories;
         } else {
@@ -249,6 +256,27 @@
             
             reference = new PersistenceUnitReference(factory);
             bindings.put(normalize(puRefInfo.referenceName), wrapReference(reference));
+        }
+
+        for (int i = 0; i < persistenceContextRefs.length; i++) {
+            PersistenceContextInfo contextInfo = persistenceContextRefs[i];
+
+            EntityManagerFactory factory;
+            if (contextInfo.persistenceUnitName != null) {
+                if (contextInfo.persistenceUnitName.indexOf("#") == -1) {
+                    factory = entityManagerFactories.get(contextInfo.persistenceUnitName);
+                } else {
+                    factory = findEntityManagerFactory(allFactories, jarPath, contextInfo.persistenceUnitName);
+                }
+            } else if (entityManagerFactories.size() == 1) {
+                factory = entityManagerFactories.values().toArray(new EntityManagerFactory[1])[0];
+            } else {
+                throw new OpenEJBException("Deployment failed as the Persistence Unit could not be located. Try adding the 'persistence-unit-name' tag in ejb-jar.xml ");
+            }
+
+// TODO create persistence context reference here
+//            Reference reference = new PersistenceUnitReference(factory);
+//            bindings.put(normalize(contextInfo.referenceName), wrapReference(reference));
         }
 
         IvmContext enc = new IvmContext(new NameNode(null, new ParsedName("comp"), null));

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncInfo.java?view=diff&rev=494973&r1=494972&r2=494973
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncInfo.java Wed Jan 10 12:50:14 2007
@@ -26,4 +26,5 @@
     public final List<EjbLocalReferenceInfo> ejbLocalReferences = new ArrayList<EjbLocalReferenceInfo>();
     public final List<ResourceReferenceInfo> resourceRefs = new ArrayList<ResourceReferenceInfo>();
     public final List<PersistenceUnitInfo> persistenceUnitRefs = new ArrayList<PersistenceUnitInfo>();
+    public final List<PersistenceContextInfo> persistenceContextRefs = new ArrayList<PersistenceContextInfo>();
 }

Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java?view=auto&rev=494973
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java Wed Jan 10 12:50:14 2007
@@ -0,0 +1,30 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.openejb.assembler.classic;
+
+import java.util.Properties;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class PersistenceContextInfo extends InjectableInfo {
+    public String referenceName;
+    public String persistenceUnitName;
+    public boolean extended;
+    public final Properties properties = new Properties(); 
+}