[jboss-cvs] JBossAS SVN: r58204 - in trunk/server/src/main/org/jboss: deployment ejb ejb/deployers ejb/plugins/cmp/jdbc ejb/plugins/cmp/jdbc/metadata ejb/plugins/cmp/jdbc2

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Nov 8 13:35:46 EST 2006


Author: alex.loubyansky at jboss.com
Date: 2006-11-08 13:35:41 -0500 (Wed, 08 Nov 2006)
New Revision: 58204

Modified:
   trunk/server/src/main/org/jboss/deployment/EjbJarObjectFactory.java
   trunk/server/src/main/org/jboss/ejb/Container.java
   trunk/server/src/main/org/jboss/ejb/EjbModule.java
   trunk/server/src/main/org/jboss/ejb/EjbModuleMBean.java
   trunk/server/src/main/org/jboss/ejb/deployers/EjbDeployer.java
   trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCStoreManager.java
   trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCXmlFileLoader.java
   trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc2/JDBCStoreManager2.java
Log:
a number of fixes to get the ejb2 deployment to work

Modified: trunk/server/src/main/org/jboss/deployment/EjbJarObjectFactory.java
===================================================================
--- trunk/server/src/main/org/jboss/deployment/EjbJarObjectFactory.java	2006-11-08 18:23:31 UTC (rev 58203)
+++ trunk/server/src/main/org/jboss/deployment/EjbJarObjectFactory.java	2006-11-08 18:35:41 UTC (rev 58204)
@@ -166,9 +166,17 @@
       Object child = null;
       // Handle the *-ref elements
       if ((child = newEnvRefGroupChild(localName)) != null)
+      {
          return child;
+      }
       else if (localName.equals("security-identity"))
+      {
          child = new SecurityIdentityMetaData();
+      }
+      else if(localName.equals("cmp-field"))
+      {
+         child = new CMPFieldMetaData();
+      }
       else if (localName.equals("query"))
       {
          child = new QueryMetaData();
@@ -273,6 +281,12 @@
       // TODO
    }
 
+   public void addChild(EntityMetaData parent, CMPFieldMetaData field,
+         UnmarshallingContext navigator, String namespaceURI, String localName)
+   {
+      parent.getCmpFields().add(field.name);
+   }
+
    public void addChild(RelationMetaData relation, RelationshipRoleMetaData role,
                         UnmarshallingContext ctx, String namespaceURI, String localName)
    {
@@ -382,10 +396,6 @@
       }      
       else if( localName.equals("abstract-schema-name") )
          entity.setAbstractSchemaName(value);
-      else if( localName.equals("cmp-field") )
-      {
-         entity.getCmpFields().add(value);
-      }
       else if( localName.equals("primkey-field") )
          entity.setPrimKeyField(value);
    }
@@ -493,4 +503,21 @@
          role.setCmrFieldType(value);
       }
    }
+
+   public void setValue(CMPFieldMetaData field,
+         UnmarshallingContext navigator, String namespaceURI, String localName,
+         String value)
+   {
+      if(localName.equals("field-name"))
+      {
+         field.name = value;
+      }
+   }
+
+   // inner
+
+   public static class CMPFieldMetaData
+   {
+      String name;
+   }
 }

Modified: trunk/server/src/main/org/jboss/ejb/Container.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/Container.java	2006-11-08 18:23:31 UTC (rev 58203)
+++ trunk/server/src/main/org/jboss/ejb/Container.java	2006-11-08 18:35:41 UTC (rev 58204)
@@ -128,13 +128,6 @@
    protected EjbModule ejbModule;
 
    /**
-    * This is the local classloader of this container. Used for loading
-    * resources that must come from the local jar file for the container.
-    * NOT for loading classes!
-    */
-   protected ClassLoader localClassLoader;
-
-   /**
     * This is the classloader of this container. All classes and resources that
     * the bean uses will be loaded from here. By doing this we make the bean
     * re-deployable
@@ -499,28 +492,6 @@
    }
 
    /**
-    * Sets the local class loader for this container.
-    * Used for loading resources from the local jar file for this container.
-    * NOT for loading classes!
-    *
-    * @param   cl
-    */
-   public void setLocalClassLoader(ClassLoader cl)
-   {
-      this.localClassLoader = cl;
-   }
-
-   /**
-    * Returns the local classloader for this container.
-    *
-    * @return   The local classloader for this container.
-    */
-   public ClassLoader getLocalClassLoader()
-   {
-      return localClassLoader;
-   }
-
-   /**
     * Sets the class loader for this container. All the classes and resources
     * used by the bean in this container will use this classloader.
     *

Modified: trunk/server/src/main/org/jboss/ejb/EjbModule.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/EjbModule.java	2006-11-08 18:23:31 UTC (rev 58203)
+++ trunk/server/src/main/org/jboss/ejb/EjbModule.java	2006-11-08 18:35:41 UTC (rev 58204)
@@ -82,6 +82,7 @@
 import org.jboss.web.WebClassLoader;
 import org.jboss.web.WebServiceMBean;
 import org.jboss.invocation.InvocationType;
+import org.jboss.tm.TransactionManagerFactory;
 
 import org.w3c.dom.Element;
 
@@ -157,7 +158,7 @@
 
    private ObjectName webServiceName;
 
-   private TransactionManager tm;
+   private TransactionManagerFactory tmFactory;
 
    /** Whether we are call by value */
    private boolean callByValue;
@@ -183,15 +184,11 @@
       this.name = "deprecated";
    }
 
-
-   public TransactionManager getTxMgr()
+   public void setTransactionManagerFactory(TransactionManagerFactory tm)
    {
-      return tm;
+      this.tmFactory = tm;
    }
-   public void setTxMgr(TransactionManager tm)
-   {
-      this.tm = tm;
-   }
+
    public ObjectName getWebServiceName()
    {
       return webServiceName;
@@ -377,7 +374,6 @@
             BeanMetaData bean = (BeanMetaData) beans.next();
             log.info("Deploying " + bean.getEjbName());
             Container con = createContainer(bean, deploymentUnit);
-            con.setDeploymentUnit(deploymentUnit);
             addContainer(con);
             //@todo support overriding the context id via metadata is needed
             con.setJaccContextID(contextID);
@@ -589,7 +585,6 @@
          con.setBeanMetaData(null);
          con.setWebClassLoader(null);
          con.setClassLoader(null);
-         con.setLocalClassLoader(null);
          con.setEjbModule(null);
          con.setDeploymentInfo(null);
          con.setTransactionManager(null);
@@ -614,36 +609,35 @@
    private Container createContainer(BeanMetaData bean, DeploymentUnit unit)
       throws Exception
    {
-      ClassLoader cl = unit.getClassLoader();
-      VirtualFile root = unit.getDeploymentContext().getRoot();
-
       Container container = null;
       // Added message driven deployment
       if (bean.isMessageDriven())
       {
-         container = createMessageDrivenContainer(bean, cl, root);
+         container = createMessageDrivenContainer(bean, unit);
       }
       else if (bean.isSession())   // Is session?
       {
          if (((SessionMetaData) bean).isStateless())   // Is stateless?
          {
-            container = createStatelessSessionContainer((SessionMetaData) bean, cl, root);
+            container = createStatelessSessionContainer((SessionMetaData) bean, unit);
          }
          else   // Stateful
          {
-            container = createStatefulSessionContainer((SessionMetaData) bean, cl, root);
+            container = createStatefulSessionContainer((SessionMetaData) bean, unit);
          }
       }
       else   // Entity
       {
-         container = createEntityContainer(bean, cl, root);
+         container = createEntityContainer(bean, unit);
       }
+
+      container.setDeploymentUnit(unit);
+
       return container;
    }
 
    private MessageDrivenContainer createMessageDrivenContainer(BeanMetaData bean,
-                                                               ClassLoader cl,
-                                                               VirtualFile root)
+                                                               DeploymentUnit unit)
       throws Exception
    {
       // get the container configuration for this bean
@@ -654,16 +648,15 @@
       MessageDrivenContainer container = new MessageDrivenContainer();
       int transType = bean.isContainerManagedTx() ? CMT : BMT;
 
-      initializeContainer(container, conf, bean, transType, cl, root);
-      createProxyFactories(bean, container, cl);
-      container.setInstancePool(createInstancePool(conf, cl));
+      initializeContainer(container, conf, bean, transType, unit);
+      createProxyFactories(bean, container);
+      container.setInstancePool(createInstancePool(conf, unit.getClassLoader()));
 
       return container;
    }
 
    private StatelessSessionContainer createStatelessSessionContainer(SessionMetaData bean,
-                                                                     ClassLoader cl,
-                                                                     VirtualFile root)
+                                                                     DeploymentUnit unit)
       throws Exception
    {
       // get the container configuration for this bean
@@ -672,19 +665,18 @@
       // Create container
       StatelessSessionContainer container = new StatelessSessionContainer();
       int transType = bean.isContainerManagedTx() ? CMT : BMT;
-      initializeContainer(container, conf, bean, transType, cl, root);
+      initializeContainer(container, conf, bean, transType, unit);
       if (bean.getHome() != null || bean.getServiceEndpoint()!=null)
       {
-         createProxyFactories(bean, container, cl);
+         createProxyFactories(bean, container);
       }
-      container.setInstancePool(createInstancePool(conf, cl));
+      container.setInstancePool(createInstancePool(conf, unit.getClassLoader()));
 
       return container;
    }
 
    private StatefulSessionContainer createStatefulSessionContainer(SessionMetaData bean,
-                                                                   ClassLoader cl,
-                                                                   VirtualFile root)
+                                                                   DeploymentUnit unit)
       throws Exception
    {
       // get the container configuration for this bean
@@ -693,11 +685,13 @@
       // Create container
       StatefulSessionContainer container = new StatefulSessionContainer();
       int transType = bean.isContainerManagedTx() ? CMT : BMT;
-      initializeContainer(container, conf, bean, transType, cl, root);
+      initializeContainer(container, conf, bean, transType, unit);
       if (bean.getHome() != null || bean.getServiceEndpoint()!=null)
       {
-         createProxyFactories(bean, container, cl);
+         createProxyFactories(bean, container);
       }
+
+      ClassLoader cl = unit.getClassLoader();
       container.setInstanceCache(createInstanceCache(conf, cl));
       // No real instance pool, use the shadow class
       StatefulSessionInstancePool ip = new StatefulSessionInstancePool();
@@ -712,8 +706,7 @@
    }
 
    private EntityContainer createEntityContainer(BeanMetaData bean,
-                                                 ClassLoader cl,
-                                                 VirtualFile root)
+                                                 DeploymentUnit unit)
       throws Exception
    {
       // get the container configuration for this bean
@@ -722,11 +715,13 @@
       // Create container
       EntityContainer container = new EntityContainer();
       int transType = CMT;
-      initializeContainer(container, conf, bean, transType, cl, root);
+      initializeContainer(container, conf, bean, transType, unit);
       if (bean.getHome() != null)
       {
-         createProxyFactories(bean, container, cl);
+         createProxyFactories(bean, container);
       }
+
+      ClassLoader cl = unit.getClassLoader();
       container.setInstanceCache(createInstanceCache(conf, cl));
       container.setInstancePool(createInstancePool(conf, cl));
       //Set the bean Lock Manager
@@ -769,8 +764,7 @@
                                     ConfigurationMetaData conf,
                                     BeanMetaData bean,
                                     int transType,
-                                    ClassLoader cl,
-                                    VirtualFile root)
+                                    DeploymentUnit unit)
       throws NamingException, DeploymentException
    {
       // Create local classloader for this container
@@ -781,6 +775,7 @@
       container.setEjbModule(this);
       container.setBeanMetaData(bean);
 
+      ClassLoader unitCl = unit.getClassLoader();
       // Create the container's WebClassLoader
       // and register it with the web service.
       String webClassLoaderName = getWebClassLoader(conf, bean);
@@ -788,11 +783,11 @@
       WebClassLoader wcl = null;
       try
       {
-         Class clazz = cl.loadClass(webClassLoaderName);
+         Class clazz = unitCl.loadClass(webClassLoaderName);
          Constructor constructor = clazz.getConstructor(
             new Class[]{ObjectName.class, RepositoryClassLoader.class});
          wcl = (WebClassLoader) constructor.newInstance(
-            new Object[]{container.getJmxName(), cl});
+            new Object[]{container.getJmxName(), unitCl});
       }
       catch (Exception e)
       {
@@ -800,9 +795,9 @@
             "Failed to create WebClassLoader of class "
             + webClassLoaderName + ": ", e);
       }
+
       if (webServiceName != null)
       {
-
          WebServiceMBean webServer =
             (WebServiceMBean) MBeanProxyExt.create(WebServiceMBean.class,
                                                    webServiceName);
@@ -811,6 +806,7 @@
 
          wcl.setWebURLs(codebase);
       } // end of if ()
+
       container.setWebClassLoader(wcl);
       // Create classloader for this container
       // Only used to unique the bean ENC and does not augment class loading
@@ -818,7 +814,7 @@
 
       // Set transaction manager
       InitialContext iniCtx = new InitialContext();
-      container.setTransactionManager(tm);
+      container.setTransactionManager(tmFactory.getTransactionManager());
 
       // Set security domain manager
       String securityDomain = bean.getApplicationMetaData().getSecurityDomain();
@@ -826,9 +822,11 @@
       // Default the config security to the application security manager
       if (confSecurityDomain == null)
          confSecurityDomain = securityDomain;
+
       // Check for an empty confSecurityDomain which signifies to disable security
       if (confSecurityDomain != null && confSecurityDomain.length() == 0)
          confSecurityDomain = null;
+
       if (confSecurityDomain != null)
       {   // Either the application has a security domain or the container has security setup
          try
@@ -857,7 +855,7 @@
       {
          try
          {
-            Class proxyClass = cl.loadClass(securityProxyClassName);
+            Class proxyClass = unitCl.loadClass(securityProxyClassName);
             Object proxy = proxyClass.newInstance();
             container.setSecurityProxy(proxy);
             log.debug("setSecurityProxy, " + proxy);
@@ -1190,10 +1188,10 @@
    /**
     * Create all proxy factories for this ejb
     */
-   private static void createProxyFactories(BeanMetaData conf, Container container,
-                                            ClassLoader cl)
+   private static void createProxyFactories(BeanMetaData conf, Container container)
       throws Exception
    {
+      ClassLoader cl = container.getClassLoader();
       Iterator it = conf.getInvokerBindings();
       boolean foundOne=false;
       while (it.hasNext())

Modified: trunk/server/src/main/org/jboss/ejb/EjbModuleMBean.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/EjbModuleMBean.java	2006-11-08 18:23:31 UTC (rev 58203)
+++ trunk/server/src/main/org/jboss/ejb/EjbModuleMBean.java	2006-11-08 18:35:41 UTC (rev 58204)
@@ -21,6 +21,8 @@
 */
 package org.jboss.ejb;
 
+import org.jboss.tm.TransactionManagerFactory;
+
 /**
  * MBean interface.
  * @see Container
@@ -34,4 +36,5 @@
     */
   java.util.Collection getContainers() ;
 
+   void setTransactionManagerFactory(TransactionManagerFactory tmFactory);
 }

Modified: trunk/server/src/main/org/jboss/ejb/deployers/EjbDeployer.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/deployers/EjbDeployer.java	2006-11-08 18:23:31 UTC (rev 58203)
+++ trunk/server/src/main/org/jboss/ejb/deployers/EjbDeployer.java	2006-11-08 18:35:41 UTC (rev 58204)
@@ -146,6 +146,18 @@
       ctor.setParameters(new Object[]{unit, deployment});
       ejbModule.setConstructor(ctor);
 
+      // set attributes
+      List<ServiceAttributeMetaData> attrs = new ArrayList<ServiceAttributeMetaData>();
+      ServiceAttributeMetaData attr = new ServiceAttributeMetaData();
+      attr.setName("TransactionManagerFactory");
+      ServiceDependencyValueMetaData dependencyValue = new ServiceDependencyValueMetaData();
+      dependencyValue.setDependency(getTransactionManagerServiceName());
+      dependencyValue.setProxyType("attribute");
+      attr.setValue(dependencyValue);
+      attrs.add(attr);
+
+      ejbModule.setAttributes(attrs);
+
       unit.addAttachment(ServiceMetaData.class, ejbModule);
    }
 

Modified: trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCStoreManager.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCStoreManager.java	2006-11-08 18:23:31 UTC (rev 58203)
+++ trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCStoreManager.java	2006-11-08 18:35:41 UTC (rev 58204)
@@ -727,11 +727,7 @@
       {
          // we are the first cmp entity to need jbosscmp-jdbc.
          // Load jbosscmp-jdbc.xml for the whole application
-         JDBCXmlFileLoader jfl = new JDBCXmlFileLoader(
-            amd,
-            container.getClassLoader(),
-            container.getLocalClassLoader(),
-            log);
+         JDBCXmlFileLoader jfl = new JDBCXmlFileLoader(container, log);
 
          jamd = jfl.load();
          amd.addPluginData(CMP_JDBC, jamd);

Modified: trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCXmlFileLoader.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCXmlFileLoader.java	2006-11-08 18:23:31 UTC (rev 58203)
+++ trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCXmlFileLoader.java	2006-11-08 18:35:41 UTC (rev 58204)
@@ -24,8 +24,9 @@
 import java.net.URL;
 import org.jboss.deployment.DeploymentException;
 import org.jboss.logging.Logger;
-import org.jboss.metadata.ApplicationMetaData;
 import org.jboss.metadata.XmlFileLoader;
+import org.jboss.ejb.Container;
+import org.jboss.virtual.VirtualFile;
 import org.w3c.dom.Element;
 
 /**
@@ -33,27 +34,23 @@
  *
  * @author <a href="mailto:dain at daingroup.com">Dain Sundstrom</a>
  *   @author <a href="sebastien.alborini at m4x.org">Sebastien Alborini</a>
+ * @author <a href="mailto:alex at jboss.com">Alexey Loubyansky</a>
  *   @version $Revision$
  */
 public final class JDBCXmlFileLoader {
-   private final ApplicationMetaData application;
-   private final ClassLoader classLoader;
-   private final ClassLoader localClassLoader;
+   private final Container container;
    private final Logger log;
    
    /**
     * Constructs a JDBC XML file loader, which loads the JDBC application meta data from
     * the jbosscmp-xml files.
     *
-    * @param application the application meta data loaded from the ejb-jar.xml file
-    * @param classLoader the classLoader used to load all classes in the application
-    * @param localClassLoader the classLoader used to load the jbosscmp-jdbc.xml file from the jar
+    * @param con  the container
     * @param log the log for this application
     */
-   public JDBCXmlFileLoader(ApplicationMetaData application, ClassLoader classLoader, ClassLoader localClassLoader, Logger log) {
-      this.application = application;
-      this.classLoader = classLoader;
-      this.localClassLoader = localClassLoader;
+   public JDBCXmlFileLoader(Container con, Logger log)
+   {
+      this.container = con;
       this.log = log;
    }
 
@@ -63,11 +60,13 @@
     * @return the jdbc application meta data loaded from the jbosscmp-jdbc.xml files
     */
    public JDBCApplicationMetaData load() throws DeploymentException {
-      JDBCApplicationMetaData jamd = new JDBCApplicationMetaData(application, classLoader);
+      JDBCApplicationMetaData jamd = new JDBCApplicationMetaData(
+         container.getBeanMetaData().getApplicationMetaData(), container.getClassLoader()
+      );
       
       // Load standardjbosscmp-jdbc.xml from the default classLoader
       // we always load defaults first
-      URL stdJDBCUrl = classLoader.getResource("standardjbosscmp-jdbc.xml");   
+      URL stdJDBCUrl = container.getClassLoader().getResource("standardjbosscmp-jdbc.xml");
       if(stdJDBCUrl == null) {
          throw new DeploymentException("No standardjbosscmp-jdbc.xml found");
       }
@@ -81,8 +80,22 @@
       jamd = new JDBCApplicationMetaData(stdJDBCElement, jamd);
 
       // Load jbosscmp-jdbc.xml if provided
-      URL jdbcUrl = localClassLoader.getResource("META-INF/jbosscmp-jdbc.xml");
-      if(jdbcUrl != null) {
+      URL jdbcUrl = null;
+      VirtualFile dd = container.getDeploymentUnit().getMetaDataFile("jbosscmp-jdbc.xml");
+      if(dd != null)
+      {
+         try
+         {
+            jdbcUrl = dd.toURL();
+         }
+         catch(Exception e)
+         {
+            throw new IllegalStateException("Failed to create URL for " + dd.getPathName(), e);
+         }
+      }
+
+      if(jdbcUrl != null)
+      {
          if (debug)
             log.debug(jdbcUrl.toString() + " found. Overriding defaults");
          Element jdbcElement = XmlFileLoader.getDocument(jdbcUrl, true).getDocumentElement();

Modified: trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc2/JDBCStoreManager2.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc2/JDBCStoreManager2.java	2006-11-08 18:23:31 UTC (rev 58203)
+++ trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc2/JDBCStoreManager2.java	2006-11-08 18:35:41 UTC (rev 58204)
@@ -504,11 +504,7 @@
       {
          // we are the first cmp entity to need jbosscmp-jdbc.
          // Load jbosscmp-jdbc.xml for the whole application
-         JDBCXmlFileLoader jfl = new JDBCXmlFileLoader(amd,
-            container.getClassLoader(),
-            container.getLocalClassLoader(),
-            log
-         );
+         JDBCXmlFileLoader jfl = new JDBCXmlFileLoader(container, log);
 
          jamd = jfl.load();
          amd.addPluginData(CMP_JDBC, jamd);




More information about the jboss-cvs-commits mailing list