[jboss-cvs] JBossAS SVN: r107713 - in trunk: server/src/main/java/org/jboss/as/naming/javaee and 4 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Aug 20 09:18:58 EDT 2010
Author: wolfc
Date: 2010-08-20 09:18:57 -0400 (Fri, 20 Aug 2010)
New Revision: 107713
Modified:
trunk/ejb3/src/main/java/org/jboss/ejb3/deployers/JBossASKernel.java
trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEApplicationInformer.java
trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEModuleInformer.java
trunk/testsuite/build.xml
trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/NamingListener.java
trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployer.java
trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java
trunk/tomcat/src/resources/war-deployers-jboss-beans.xml
Log:
JBAS-7862: pickup JavaEEModule from the naming deployers
Modified: trunk/ejb3/src/main/java/org/jboss/ejb3/deployers/JBossASKernel.java
===================================================================
--- trunk/ejb3/src/main/java/org/jboss/ejb3/deployers/JBossASKernel.java 2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/ejb3/src/main/java/org/jboss/ejb3/deployers/JBossASKernel.java 2010-08-20 13:18:57 UTC (rev 107713)
@@ -140,14 +140,17 @@
if(service instanceof EJBContainer)
{
EJBContainer container = EJBContainer.class.cast(service);
- // TODO: use a resolver
+ // TODO: use an informer
JavaEEModule module = container.getModule();
+ String moduleName = stripSuffix(module.getName());
JavaEEApplication app = module.getApplication();
- String encFactoryBeanName = "jboss.ejb3:" + (app != null ? "application=" + stripSuffix(app.getName()) + "," : "") + "module=" + stripSuffix(module.getName()) + ",component=" + container.getEjbName() + ",service=EjbEncFactory";
+ String appName = app != null ? stripSuffix(app.getName()) : null;
+ String scopedBeanName = "application=" + (appName != null ? appName : moduleName) + ",module=" + moduleName + ",component=" + container.getEjbName();
+ String encFactoryBeanName = "jboss.ejb3:" + scopedBeanName + ",service=EjbEncFactory";
// create an EjbEncFactory for this container
{
BeanMetaDataBuilder builder = BeanMetaDataBuilderFactory.createBuilder(encFactoryBeanName, NamingComponentEjbEncFactory.class.getName());
- String componentBeanName = "jboss.naming:" + (app != null ? "application=" + stripSuffix(app.getName()) + "," : "") + "module=" + stripSuffix(module.getName()) + ",component=" + container.getEjbName();
+ String componentBeanName = "jboss.naming:" + scopedBeanName;
builder.addConstructorParameter(JavaEEComponent.class.getName(), new AbstractInjectionValueMetaData(componentBeanName));
// TODO: is deployment always available at this stage?
deployment.getBeanFactories().add(builder.getBeanMetaDataFactory());
Modified: trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEApplicationInformer.java
===================================================================
--- trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEApplicationInformer.java 2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEApplicationInformer.java 2010-08-20 13:18:57 UTC (rev 107713)
@@ -1,16 +1,14 @@
package org.jboss.as.naming.javaee;
import org.jboss.deployers.structure.spi.DeploymentUnit;
-import org.jboss.metadata.ear.jboss.JBossAppMetaData;
import org.jboss.reloaded.naming.deployers.javaee.JavaEEApplicationInformer;
-import org.jboss.system.metadata.ServiceDeployment;
/**
* @author <a href="cdewolf at redhat.com">Carlo de Wolf</a>
*/
public class NamingJavaEEApplicationInformer implements JavaEEApplicationInformer
{
- private static final String REQUIRED_ATTACHMENTS[] = { JBossAppMetaData.class.getName(), ServiceDeployment.class.getName() };
+ private static final String REQUIRED_ATTACHMENTS[] = null;
public String getApplicationName(DeploymentUnit deploymentUnit) throws IllegalArgumentException
{
@@ -23,17 +21,11 @@
public boolean isJavaEEApplication(DeploymentUnit deploymentUnit)
{
- return deploymentUnit.isAttachmentPresent(JBossAppMetaData.class) || isTopLevelServiceArchive(deploymentUnit);
+ // JavaEE 6.0 FR 5.2.2
+ // practically everything deployed standalone is considered a JavaEEApplication in terms of naming
+ return deploymentUnit.isTopLevel();
}
- /**
- * In a deployment consisting of x.sar/ejbs.jar, the x.sar substitutes an EAR.
- */
- protected boolean isTopLevelServiceArchive(DeploymentUnit deploymentUnit)
- {
- return deploymentUnit.isTopLevel() && deploymentUnit.isAttachmentPresent(ServiceDeployment.class);
- }
-
public String[] getRequiredAttachments()
{
return REQUIRED_ATTACHMENTS;
Modified: trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEModuleInformer.java
===================================================================
--- trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEModuleInformer.java 2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEModuleInformer.java 2010-08-20 13:18:57 UTC (rev 107713)
@@ -39,6 +39,10 @@
protected static <T> T[] concat(T[] array1, T[] array2)
{
+ if(array1 == null)
+ return array2;
+ if(array2 == null)
+ return array1;
T[] result = (T[]) Array.newInstance(array1.getClass().getComponentType(), array1.length + array2.length);
System.arraycopy(array1, 0, result, 0, array1.length);
System.arraycopy(array2, 0, result, array1.length, array2.length);
Modified: trunk/testsuite/build.xml
===================================================================
--- trunk/testsuite/build.xml 2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/testsuite/build.xml 2010-08-20 13:18:57 UTC (rev 107713)
@@ -1186,11 +1186,6 @@
<include name="org/jboss/test/aop/test/Scoped*TestCase.class"/>
</patternset>
- <patternset id="naming-servlet.excludes">
- <!-- Testing functionality that does not currently exist - See: JBAS-7908 -->
- <exclude name="org/jboss/test/web/test/NamingServletUnitTestCase.class"/>
- </patternset>
-
<!-- The union of the excludes -->
<patternset id="all.excludes">
<patternset refid="aop-with-classloader.excludes"/>
@@ -1214,7 +1209,6 @@
<patternset refid="jbossmessaging.excludes"/>
<patternset refid="springdeployer.excludes"/>
<patternset refid="jbas7273.excludes"/>
- <patternset refid="naming-servlet.excludes"/>
</patternset>
<!-- A target that allows for conditional dependency on the compilation and
Modified: trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/NamingListener.java
===================================================================
--- trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/NamingListener.java 2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/NamingListener.java 2010-08-20 13:18:57 UTC (rev 107713)
@@ -24,6 +24,8 @@
import org.apache.catalina.InstanceEvent;
import org.apache.catalina.InstanceListener;
import org.jboss.logging.Logger;
+import org.jboss.reloaded.naming.CurrentComponent;
+import org.jboss.reloaded.naming.spi.JavaEEComponent;
/**
* An InstanceListener used to push/pop the application naming context.
@@ -34,13 +36,14 @@
public class NamingListener implements InstanceListener
{
private static Logger log = Logger.getLogger(NamingListener.class);
- public static ThreadLocal<Object> idLocal = new ThreadLocal<Object>();
+ public static ThreadLocal<JavaEEComponent> idLocal = new ThreadLocal<JavaEEComponent>();
- private Object id;
+ private JavaEEComponent id;
public NamingListener()
{
id = idLocal.get();
+ assert id != null : "id is null";
}
public Object getId()
@@ -48,7 +51,7 @@
return id;
}
- public void setId(Object id)
+ public void setId(JavaEEComponent id)
{
this.id = id;
}
@@ -61,14 +64,14 @@
|| type.equals(InstanceEvent.BEFORE_DISPATCH_EVENT) )
{
// Push naming id
- //TODO
+ CurrentComponent.push(id);
}
// Pop the identity on the after init/destroy
else if ( type.equals(InstanceEvent.AFTER_REQUEST_EVENT)
|| type.equals(InstanceEvent.AFTER_DISPATCH_EVENT) )
{
// Pop naming id
- //TODO
+ CurrentComponent.pop();
}
}
Modified: trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployer.java
===================================================================
--- trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployer.java 2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployer.java 2010-08-20 13:18:57 UTC (rev 107713)
@@ -21,22 +21,23 @@
*/
package org.jboss.web.tomcat.service.deployers;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.management.ObjectName;
-
+import org.jboss.beans.metadata.api.annotations.Inject;
import org.jboss.deployers.structure.spi.DeploymentUnit;
import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
import org.jboss.metadata.web.jboss.JBossWebMetaData;
import org.jboss.metadata.web.spec.WebMetaData;
import org.jboss.mx.util.ObjectNameFactory;
+import org.jboss.reloaded.naming.deployers.javaee.JavaEEComponentInformer;
import org.jboss.security.plugins.JaasSecurityManagerServiceMBean;
import org.jboss.web.deployers.AbstractWarDeployer;
import org.jboss.web.deployers.AbstractWarDeployment;
+import javax.management.ObjectName;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+
/**
* A concrete implementation of the AbstractWarDeployer that creates {@link #TomcatDeployment} instances as the web
* application bean representation.
@@ -123,8 +124,12 @@
private boolean standalone = false;
- public TomcatDeployer()
+ private JavaEEComponentInformer componentInformer;
+
+ public TomcatDeployer(@Inject JavaEEComponentInformer componentInformer)
{
+ this.componentInformer = componentInformer;
+ setInputs(componentInformer.getRequiredAttachments());
}
public String getName()
@@ -397,11 +402,17 @@
deployment.setSecurityManagementName(securityManagement);
deployment.setPolicyRegistrationName(policyRegistrationName);
+ // TODO: I haven't got a clue as to why this is set very late in WebModule, but the informer depends on it
+ deployment.setDeploymentUnit(unit);
+ // TODO: until deployment is a MC bean
+ ((TomcatDeployment) deployment).setJavaEEComponentInformer(componentInformer);
+
// Add a dependency on the webserver itself
List<String> depends = metaData.getDepends();
if (depends == null)
depends = new ArrayList<String>();
depends.add(TOMCAT_SERVICE_NAME.getCanonicalName());
+ depends.add(((TomcatDeployment) deployment).getJavaEEModuleName());
metaData.setDepends(depends);
deployment.setServer(super.getServer());
Modified: trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java
===================================================================
--- trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java 2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java 2010-08-20 13:18:57 UTC (rev 107713)
@@ -21,33 +21,10 @@
*/
package org.jboss.web.tomcat.service.deployers;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLDecoder;
-import java.security.CodeSource;
-import java.security.cert.Certificate;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.LinkRef;
-
-import org.apache.catalina.Container;
-import org.apache.catalina.Engine;
-import org.apache.catalina.LifecycleEvent;
-import org.apache.catalina.LifecycleListener;
-import org.apache.catalina.Loader;
+import org.apache.catalina.*;
import org.apache.catalina.core.StandardContext;
import org.apache.tomcat.util.modeler.Registry;
+import org.jboss.beans.metadata.api.annotations.Inject;
import org.jboss.dependency.spi.ControllerContext;
import org.jboss.dependency.spi.ControllerState;
import org.jboss.deployers.spi.DeploymentException;
@@ -59,12 +36,14 @@
import org.jboss.metadata.web.spec.TldMetaData;
import org.jboss.mx.util.MBeanServerLocator;
import org.jboss.naming.NonSerializableFactory;
+import org.jboss.reloaded.naming.deployers.javaee.JavaEEComponentInformer;
+import org.jboss.reloaded.naming.spi.JavaEEComponent;
+import org.jboss.reloaded.naming.spi.JavaEEModule;
import org.jboss.security.SecurityUtil;
import org.jboss.vfs.VFS;
import org.jboss.vfs.VirtualFile;
import org.jboss.web.WebApplication;
import org.jboss.web.deployers.AbstractWarDeployment;
-import org.jboss.web.deployers.SharedJBossWebMetaDataDeployer;
import org.jboss.web.deployers.SharedTldMetaDataDeployer;
import org.jboss.web.tomcat.security.JaccContextValve;
import org.jboss.web.tomcat.security.RunAsListener;
@@ -73,9 +52,20 @@
import org.jboss.web.tomcat.service.NamingListener;
import org.jboss.web.tomcat.service.TomcatInjectionContainer;
import org.jboss.web.tomcat.service.WebCtxLoader;
-import org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve;
import org.omg.CORBA.ORB;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.LinkRef;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.security.CodeSource;
+import java.security.cert.Certificate;
+import java.util.*;
+
/**
* A tomcat web application deployment.
*
@@ -98,6 +88,8 @@
private ORB orb = null;
+ private JavaEEComponentInformer componentInformer;
+
public ORB getORB()
{
return orb;
@@ -299,8 +291,8 @@
JBossContextConfig.metaDataLocal.set(metaData);
JBossContextConfig.deployerConfig.set(config);
JBossContextConfig.tldMetaDataMapLocal.set(tldMetaDataMap);
- // TODO: acquire the component ID
- NamingListener.idLocal.set(null);
+ JavaEEComponent component = createJavaEEComponent();
+ NamingListener.idLocal.set(component);
JBossContextConfig.kernelLocal.set(kernel);
JBossContextConfig.deploymentUnitLocal.set(unit);
@@ -656,4 +648,66 @@
return (Engine) parentContainer;
}
+ private JavaEEComponent createJavaEEComponent()
+ {
+ final String beanName = getJavaEEModuleName();
+
+ // TODO: must come in via MC injection
+ final JavaEEModule module = getBean(beanName, JavaEEModule.class);
+
+ // Web uses a Module context
+ return new JavaEEComponent() {
+
+ public Context getContext()
+ {
+ return module.getContext();
+ }
+
+ public JavaEEModule getModule()
+ {
+ return module;
+ }
+
+ public String getName()
+ {
+ return module.getName();
+ }
+ };
+ }
+
+ private <T> T getBean(String beanName, Class<T> type)
+ {
+ ControllerContext context = kernel.getController().getInstalledContext(beanName);
+ if(context == null)
+ throw new IllegalArgumentException("Can't find bean " + beanName + " in " + kernel);
+ Object target = context.getTarget();
+ if(target == null)
+ throw new IllegalArgumentException("Bean " + beanName + " has no target instance in " + kernel);
+ return type.cast(target);
+ }
+
+ // TODO: weirdness, if I make this package private I get IllegalAccessError
+ public String getJavaEEModuleName()
+ {
+ // TODO: must come in via MC injection
+// NamingJavaEEComponentInformer componentInformer = new NamingJavaEEComponentInformer();
+// componentInformer.setJavaEEModuleIdentifier(new SimpleJavaEEModuleIdentifier());
+// final JavaEEComponentInformer componentInformer = (JavaEEComponentInformer) kernel.getController().getContextByClass(JavaEEComponentInformer.class).getTarget();
+ assert componentInformer != null : "componentInformer is null";
+ // assert ControllerState.INSTALLED
+
+ final String applicationName = componentInformer.getApplicationName(unit);
+ final String moduleName = componentInformer.getModulePath(unit);
+
+ // TODO: remove hard coded "jboss.naming" constant
+ final String beanName = "jboss.naming:" + (applicationName != null ? "application=" + applicationName + "," : "") + "module=" + moduleName;
+
+ return beanName;
+ }
+
+ @Inject
+ public void setJavaEEComponentInformer(JavaEEComponentInformer componentInformer)
+ {
+ this.componentInformer = componentInformer;
+ }
}
\ No newline at end of file
Modified: trunk/tomcat/src/resources/war-deployers-jboss-beans.xml
===================================================================
--- trunk/tomcat/src/resources/war-deployers-jboss-beans.xml 2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/tomcat/src/resources/war-deployers-jboss-beans.xml 2010-08-20 13:18:57 UTC (rev 107713)
@@ -144,7 +144,8 @@
<!-- The WebMetaData to service mbean deployer -->
<bean name="WarDeployer" class="org.jboss.web.tomcat.service.deployers.TomcatDeployer">
-
+ <constructor><parameter><inject bean="NamingJavaEEComponentInformer"/></parameter></constructor>
+
<!-- Inject the MainDeployer for resolving cross deployment refs -->
<property name="mainDeployer"><inject bean="MainDeployer" /></property>
More information about the jboss-cvs-commits
mailing list