[jboss-cvs] JBossAS SVN: r84047 - in projects/ejb3/trunk/embedded/src: main/resources/META-INF and 2 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Feb 10 04:59:33 EST 2009
Author: jaikiran
Date: 2009-02-10 04:59:33 -0500 (Tue, 10 Feb 2009)
New Revision: 84047
Added:
projects/ejb3/trunk/embedded/src/main/java/org/jboss/ejb3/embedded/Ejb3ComponentRegistry.java
projects/ejb3/trunk/embedded/src/main/resources/META-INF/ejb3-connectors-jboss-beans.xml
projects/ejb3/trunk/embedded/src/test/java/org/jboss/ejb3/embedded/test/stateless/GreeterRemote.java
Modified:
projects/ejb3/trunk/embedded/src/main/java/org/jboss/ejb3/embedded/JBossEJBContainer.java
projects/ejb3/trunk/embedded/src/main/resources/META-INF/ejb-deployers-beans.xml
projects/ejb3/trunk/embedded/src/test/java/org/jboss/ejb3/embedded/test/stateless/GreeterBean.java
projects/ejb3/trunk/embedded/src/test/java/org/jboss/ejb3/embedded/test/stateless/unit/GreeterTestCase.java
Log:
EJBTHREE-1723 Added support for deployment of beans with @Remote business interface. Introduced ejb3 connectors (ejb3-connectors-jboss-beans.xml). Also introduced Ejb3ComponentRegistry which acts as an indirection for Ejb3Registry. The Ejb3Registry is consulted by IsLocalInterceptor for deployed EJB containers
Added: projects/ejb3/trunk/embedded/src/main/java/org/jboss/ejb3/embedded/Ejb3ComponentRegistry.java
===================================================================
--- projects/ejb3/trunk/embedded/src/main/java/org/jboss/ejb3/embedded/Ejb3ComponentRegistry.java (rev 0)
+++ projects/ejb3/trunk/embedded/src/main/java/org/jboss/ejb3/embedded/Ejb3ComponentRegistry.java 2009-02-10 09:59:33 UTC (rev 84047)
@@ -0,0 +1,77 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.embedded;
+
+import org.jboss.ejb3.EJBContainer;
+import org.jboss.ejb3.Ejb3Registry;
+import org.jboss.logging.Logger;
+
+/**
+ * Ejb3ComponentRegistry
+ *
+ * Temporary workaround to an issue where MC does not allow
+ * static methods (of {@link Ejb3Registry}) to act as callbacks.
+ * Ejb3ComponentRegistry acts as an indirection to {@link Ejb3Registry}
+ * which maintains a registry of deployed EJB containers.
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class Ejb3ComponentRegistry
+{
+
+ /**
+ * Logger
+ */
+ private static Logger logger = Logger.getLogger(Ejb3ComponentRegistry.class);
+
+ /**
+ * Adds the <code>container</code> to the {@link Ejb3Registry}
+ *
+ * @param container
+ */
+ public void addContainer(EJBContainer container)
+ {
+ // We need the Ejb3Registry to hold these references, since that's where
+ // the IsLocalInterceptor looks for.
+ Ejb3Registry.register(container);
+ logger.debug("Container " + container + " added to registry");
+ }
+
+ /**
+ * Unregisters (an registered) <code>container</code> from {@link Ejb3Registry}
+ *
+ * @param container
+ */
+ public void removeContainer(EJBContainer container)
+ {
+ // unregsiter the container
+ // Bug in hasContainer implementation - The implementation uses the objectName of the container
+ // instead of guid to check the internal map of containers. Effectively always returns false.
+ // So let's skip this hasContainer check for now (risky, might throw exception if the container
+ // wasn't registered)
+ // if (Ejb3Registry.hasContainer(container))
+ // {
+ Ejb3Registry.unregister(container);
+ logger.debug("Container " + container + " removed from registry");
+ }
+}
Modified: projects/ejb3/trunk/embedded/src/main/java/org/jboss/ejb3/embedded/JBossEJBContainer.java
===================================================================
--- projects/ejb3/trunk/embedded/src/main/java/org/jboss/ejb3/embedded/JBossEJBContainer.java 2009-02-10 09:52:55 UTC (rev 84046)
+++ projects/ejb3/trunk/embedded/src/main/java/org/jboss/ejb3/embedded/JBossEJBContainer.java 2009-02-10 09:59:33 UTC (rev 84047)
@@ -51,17 +51,17 @@
public class JBossEJBContainer extends EJBContainer
{
private static final Logger log = Logger.getLogger(JBossEJBContainer.class);
-
+
private ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-
+
// stage 1
private BasicBootstrap bootstrap = new BasicBootstrap();
private Kernel kernel;
private BasicXMLDeployer deployer;
-
+
// stage 2
private MainDeployer mainDeployer;
-
+
public JBossEJBContainer(Map<?, ?> properties, String... modules) throws Throwable
{
try
@@ -71,24 +71,26 @@
deployer = new BasicXMLDeployer(kernel);
// bring the main deployer online
deploy("META-INF/embedded-bootstrap-beans.xml");
-
+
// we're at stage 2
mainDeployer = getBean("MainDeployer", ControllerState.INSTALLED, MainDeployer.class);
-
+
deploy("META-INF/ejb-deployers-beans.xml");
-
+
deploy("META-INF/namingserver-beans.xml");
-
+
deploy("META-INF/aop-beans.xml");
-
+
deploy("META-INF/transactionmanager-beans.xml");
-
+
deploy("META-INF/jpa-deployers-beans.xml");
-
+
deploy("META-INF/ejb-container-beans.xml");
-
+
+ deploy("META-INF/ejb3-connectors-jboss-beans.xml");
+
deployMain("ejb3-interceptors-aop.xml");
-
+
deployModules(modules);
}
catch(Throwable t)
@@ -97,7 +99,7 @@
throw t;
}
}
-
+
@Override
public void close()
{
@@ -107,7 +109,7 @@
mainDeployer.shutdown();
mainDeployer = null;
}
-
+
if(deployer != null)
{
deployer.shutdown();
@@ -116,12 +118,12 @@
kernel = null;
bootstrap = null;
}
-
+
private KernelDeployment deploy(String name) throws Throwable
{
return deploy(getResource(name));
}
-
+
private KernelDeployment deploy(URL url) throws Throwable
{
log.info("Deploying " + url);
@@ -129,13 +131,13 @@
deployer.validate(deployment);
return deployment;
}
-
+
private void deployMain(String name) throws DeploymentException, IllegalArgumentException, MalformedURLException, IOException
{
URL url = getResource(name);
deployMain(url);
}
-
+
private void deployMain(URL url) throws DeploymentException, IOException
{
log.info("Deploying " + url);
@@ -144,19 +146,19 @@
mainDeployer.deploy(deployment);
mainDeployer.checkComplete(deployment);
}
-
+
private void deployModules(String modules[]) throws MalformedURLException, IOException, DeploymentException
{
// TODO: deploy the world!
if(modules == null)
return;
-
+
for(String module : modules)
{
deployMain(new URL(module));
}
}
-
+
/**
* Get a bean
*
@@ -170,7 +172,7 @@
KernelControllerContext context = getControllerContext(name, state);
return context.getTarget();
}
-
+
/**
* Get a bean
*
@@ -189,7 +191,7 @@
Object bean = getBean(name, state);
return expected.cast(bean);
}
-
+
/**
* Get a context
*
@@ -206,7 +208,7 @@
return handleNotFoundContext(controller, name, state);
return context;
}
-
+
private URL getResource(String name) throws IllegalArgumentException
{
URL url = classLoader.getResource(name);
@@ -214,7 +216,7 @@
throw new IllegalArgumentException("No resource named " + name + " found on " + classLoader);
return url;
}
-
+
/**
* Handle not found context.
*
Modified: projects/ejb3/trunk/embedded/src/main/resources/META-INF/ejb-deployers-beans.xml
===================================================================
--- projects/ejb3/trunk/embedded/src/main/resources/META-INF/ejb-deployers-beans.xml 2009-02-10 09:52:55 UTC (rev 84046)
+++ projects/ejb3/trunk/embedded/src/main/resources/META-INF/ejb-deployers-beans.xml 2009-02-10 09:59:33 UTC (rev 84047)
@@ -24,7 +24,7 @@
<bean name="EjbParsingDeployer" class="org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer">
<constructor>
- <parameter class="java.lang.Class">org.jboss.metadata.ejb.spec.EjbJarMetaData</parameter>
+ <parameter class="java.lang.Class">org.jboss.metadata.ejb.spec.EjbJarMetaData</parameter>
</constructor>
<property name="name">ejb-jar.xml</property>
<!-- We need to be fast, so no schema validation -->
@@ -35,7 +35,7 @@
<bean name="JBossEjbParsingDeployer" class="org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer">
<constructor>
- <parameter class="java.lang.Class">org.jboss.metadata.ejb.jboss.JBossMetaData</parameter>
+ <parameter class="java.lang.Class">org.jboss.metadata.ejb.jboss.JBossMetaData</parameter>
</constructor>
<property name="name">jboss.xml</property>
<!-- We need to be fast, so no schema validation -->
@@ -136,4 +136,19 @@
</parameter>
</constructor>
</bean>
+
+ <!-- We could have directly used the org.jboss.ejb3.Ejb3Registry as a MC bean
+ and added the "register" and "unregister" methods as callbacks, but since
+ those methods are "static", MC complains and throws exception. So let's use
+ this indirection for the time being.
+
+ The Ejb3Registry is looked up by the IsLocalInterceptor for EJB containers.
+ -->
+
+ <bean name="EJB3ComponentRegistry" class="org.jboss.ejb3.embedded.Ejb3ComponentRegistry">
+ <!-- Accept any implementor of org.jboss.ejb3.EJBContainer -->
+ <incallback method="addContainer"/>
+ <uncallback method="removeContainer"/>
+ </bean>
+
</deployment>
\ No newline at end of file
Added: projects/ejb3/trunk/embedded/src/main/resources/META-INF/ejb3-connectors-jboss-beans.xml
===================================================================
--- projects/ejb3/trunk/embedded/src/main/resources/META-INF/ejb3-connectors-jboss-beans.xml (rev 0)
+++ projects/ejb3/trunk/embedded/src/main/resources/META-INF/ejb3-connectors-jboss-beans.xml 2009-02-10 09:59:33 UTC (rev 84047)
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ EJB3 Connectors
+
+-->
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+ <!--
+
+ JBoss Remoting Connector
+
+ Note: Bean Name "org.jboss.ejb3.RemotingConnector" is used
+ as a lookup value; alter only after checking java references
+ to this key.
+
+ -->
+ <bean name="org.jboss.ejb3.RemotingConnector"
+ class="org.jboss.remoting.transport.Connector">
+
+ <!-- Not using Service Binding Manager, for now, in ejb3-embedded -->
+ <property name="invokerLocator">socket://0.0.0.0/3873</property>
+
+ <property name="serverConfiguration">
+ <inject bean="ServerConfiguration" />
+ </property>
+ </bean>
+
+ <!-- Remoting Server Configuration -->
+ <bean name="ServerConfiguration"
+ class="org.jboss.remoting.ServerConfiguration">
+ <property name="invocationHandlers">
+ <map keyClass="java.lang.String" valueClass="java.lang.String">
+ <entry>
+ <key>AOP</key>
+ <value>
+ org.jboss.aspects.remoting.AOPRemotingInvocationHandler
+ </value>
+ </entry>
+ </map>
+ </property>
+ </bean>
+
+</deployment>
\ No newline at end of file
Modified: projects/ejb3/trunk/embedded/src/test/java/org/jboss/ejb3/embedded/test/stateless/GreeterBean.java
===================================================================
--- projects/ejb3/trunk/embedded/src/test/java/org/jboss/ejb3/embedded/test/stateless/GreeterBean.java 2009-02-10 09:52:55 UTC (rev 84046)
+++ projects/ejb3/trunk/embedded/src/test/java/org/jboss/ejb3/embedded/test/stateless/GreeterBean.java 2009-02-10 09:59:33 UTC (rev 84047)
@@ -21,6 +21,8 @@
*/
package org.jboss.ejb3.embedded.test.stateless;
+import javax.ejb.Local;
+import javax.ejb.Remote;
import javax.ejb.Stateless;
/**
@@ -28,6 +30,8 @@
* @version $Revision: $
*/
@Stateless
+ at Remote(GreeterRemote.class)
+ at Local (Greeter.class)
public class GreeterBean implements Greeter
{
public String sayHi(String name)
Added: projects/ejb3/trunk/embedded/src/test/java/org/jboss/ejb3/embedded/test/stateless/GreeterRemote.java
===================================================================
--- projects/ejb3/trunk/embedded/src/test/java/org/jboss/ejb3/embedded/test/stateless/GreeterRemote.java (rev 0)
+++ projects/ejb3/trunk/embedded/src/test/java/org/jboss/ejb3/embedded/test/stateless/GreeterRemote.java 2009-02-10 09:59:33 UTC (rev 84047)
@@ -0,0 +1,33 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.embedded.test.stateless;
+
+/**
+ * GreeterRemote
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public interface GreeterRemote extends Greeter
+{
+
+}
Modified: projects/ejb3/trunk/embedded/src/test/java/org/jboss/ejb3/embedded/test/stateless/unit/GreeterTestCase.java
===================================================================
--- projects/ejb3/trunk/embedded/src/test/java/org/jboss/ejb3/embedded/test/stateless/unit/GreeterTestCase.java 2009-02-10 09:52:55 UTC (rev 84046)
+++ projects/ejb3/trunk/embedded/src/test/java/org/jboss/ejb3/embedded/test/stateless/unit/GreeterTestCase.java 2009-02-10 09:59:33 UTC (rev 84047)
@@ -22,35 +22,44 @@
package org.jboss.ejb3.embedded.test.stateless.unit;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import java.net.URL;
import java.util.Date;
import java.util.Properties;
import javax.ejb.EJBContainer;
+import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.jboss.ejb3.embedded.test.stateless.Greeter;
+import org.jboss.ejb3.embedded.test.stateless.GreeterRemote;
+import org.jboss.logging.Logger;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
-
/**
* @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
* @version $Revision: $
*/
public class GreeterTestCase
{
+
+ /**
+ * Logger
+ */
+ private static Logger logger = Logger.getLogger(GreeterTestCase.class);
+
@AfterClass
public static void afterClass()
{
EJBContainer current = EJBContainer.getCurrentEJBContainer();
- if(current != null)
+ if (current != null)
current.close();
}
-
+
@BeforeClass
public static void beforeClass()
{
@@ -59,7 +68,7 @@
properties.setProperty(EJBContainer.EMBEDDABLE_MODULES_PROPERTY, module);
EJBContainer.createEJBContainer(properties);
}
-
+
private static String getURLToTestClasses()
{
String p = "org/jboss/ejb3/embedded/test";
@@ -67,7 +76,7 @@
String s = url.toString();
return s.substring(0, s.length() - p.length());
}
-
+
@Test
public void test1() throws NamingException
{
@@ -77,7 +86,7 @@
String actual = greeter.sayHi(now);
assertEquals("Hi " + now, actual);
}
-
+
@Test
public void testGreeter2() throws NamingException
{
@@ -87,4 +96,16 @@
String actual = greeter.sayHi(now);
assertEquals("Hi " + now, actual);
}
+
+ @Test
+ public void testGreeterRemote() throws Exception
+ {
+ Context ctx = new InitialContext();
+ GreeterRemote remoteGreeter = (GreeterRemote) ctx.lookup("GreeterBean/remote");
+ String name = "newuser";
+ String messageFromGreeter = remoteGreeter.sayHi(name);
+ logger.info("Remote Greeter bean says: " + messageFromGreeter);
+ assertNotNull("Remote Greeter bean returned null message", messageFromGreeter);
+ assertEquals("Remote Greeter bean returned unexpected message", "Hi " + name, messageFromGreeter);
+ }
}
More information about the jboss-cvs-commits
mailing list