[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