[jboss-cvs] JBossAS SVN: r73701 - in projects/ejb3/trunk/proxy/src/test: java/org/jboss/ejb3/test/proxy/remoteaccess and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue May 27 07:02:55 EDT 2008


Author: ALRubinger
Date: 2008-05-27 07:02:55 -0400 (Tue, 27 May 2008)
New Revision: 73701

Added:
   projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/remoteaccess/
   projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/remoteaccess/JndiPropertiesRedirectClassloader.java
   projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/remoteaccess/MockServer.java
   projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/remoteaccess/unit/
   projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/remoteaccess/unit/RemoteAccessTestCase.java
   projects/ejb3/trunk/proxy/src/test/resources/jnpserver.properties
   projects/ejb3/trunk/proxy/src/test/resources/org/jboss/ejb3/test/proxy/remoteaccess/
   projects/ejb3/trunk/proxy/src/test/resources/org/jboss/ejb3/test/proxy/remoteaccess/unit/
   projects/ejb3/trunk/proxy/src/test/resources/org/jboss/ejb3/test/proxy/remoteaccess/unit/RemoteAccessTestCase-beans.xml
Log:
[EJBTHREE-1345] Added remoteaccess tests to expose flaws in remote invocation

Added: projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/remoteaccess/JndiPropertiesRedirectClassloader.java
===================================================================
--- projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/remoteaccess/JndiPropertiesRedirectClassloader.java	                        (rev 0)
+++ projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/remoteaccess/JndiPropertiesRedirectClassloader.java	2008-05-27 11:02:55 UTC (rev 73701)
@@ -0,0 +1,64 @@
+/*
+ * 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.test.proxy.remoteaccess;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Enumeration;
+
+import org.jboss.logging.Logger;
+
+/**
+ * JndiPropertiesRedirectClassloader
+ * 
+ * Hacky classloader to use to prevent the JNP Server from
+ * loading jndi.properties (which should be used by clients 
+ * only) and instead swapping for jnpserver.properties
+ *
+ * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
+ * @version $Revision: $
+ */
+public class JndiPropertiesRedirectClassloader extends ClassLoader
+{
+
+   private static final String TO_REPLACE = "jndi.properties";
+
+   private static final String REPLACE_WITH = "jnpserver.properties";
+
+   private static final Logger log = Logger.getLogger(JndiPropertiesRedirectClassloader.class);
+
+   /**
+    * Replaces a request to load "jndi.properties" with "jnpserver.properties"
+    */
+   @Override
+   public Enumeration<URL> getResources(String name) throws IOException
+   {
+      if (name.equals(JndiPropertiesRedirectClassloader.TO_REPLACE))
+      {
+         log.info("Replacing request for " + JndiPropertiesRedirectClassloader.TO_REPLACE + " with "
+               + JndiPropertiesRedirectClassloader.REPLACE_WITH);
+         name = JndiPropertiesRedirectClassloader.REPLACE_WITH;
+      }
+      return super.getResources(name);
+   }
+
+}

Added: projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/remoteaccess/MockServer.java
===================================================================
--- projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/remoteaccess/MockServer.java	                        (rev 0)
+++ projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/remoteaccess/MockServer.java	2008-05-27 11:02:55 UTC (rev 73701)
@@ -0,0 +1,263 @@
+package org.jboss.ejb3.test.proxy.remoteaccess;
+
+import org.jboss.ejb3.common.registrar.plugin.mc.Ejb3McRegistrar;
+import org.jboss.ejb3.common.registrar.spi.Ejb3RegistrarLocator;
+import org.jboss.ejb3.test.mc.bootstrap.EmbeddedTestMcBootstrap;
+import org.jboss.ejb3.test.proxy.common.Utils;
+import org.jboss.ejb3.test.proxy.common.container.StatelessContainer;
+import org.jboss.ejb3.test.proxy.common.ejb.slsb.MyStatelessBean;
+import org.jboss.logging.Logger;
+
+/**
+ * MockServer
+ * 
+ * Launches a new MC Bootstrap, EJB Containers, and performs
+ * all initialization to mock a remote server environment
+ *
+ * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
+ * @version $Revision: $
+ */
+public class MockServer
+{
+
+   // --------------------------------------------------------------------------------||
+   // Class Members ------------------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   private static final Logger log = Logger.getLogger(MockServer.class);
+
+   private static MockServer server;
+
+   // --------------------------------------------------------------------------------||
+   // Instance Members ---------------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   private EmbeddedTestMcBootstrap bootstrap;
+
+   /**
+    * Name of the SLSB Container for these tests
+    */
+   private String containerName;
+
+   /**
+    * The Test Class using this launcher
+    */
+   private Class<?> testClass;
+
+   // --------------------------------------------------------------------------------||
+   // Constructor --------------------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   /**
+    * Constructor
+    */
+   public MockServer(Class<?> testClass)
+   {
+      this.setTestClass(testClass);
+   }
+
+   // --------------------------------------------------------------------------------||
+   // Main ---------------------------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   /**
+    * Runtime Entry Point
+    * 
+    * @param args
+    */
+   public static void main(String... args)
+   {
+
+      // Assert test class passed in
+      assert args.length == 1 : "String fully-qualified name of test class is the required first argument";
+
+      // Get Test Class
+      String testClassname = args[0];
+      Class<?> testClass = null;
+      try
+      {
+         testClass = Class.forName(testClassname);
+      }
+      catch (ClassNotFoundException cnfe)
+      {
+         throw new RuntimeException("Specified Test Class, \"" + testClassname + "\" could not be found", cnfe);
+      }
+
+      // Create a new Launcher
+      MockServer launcher = new MockServer(testClass);
+      MockServer.setServer(server);
+
+      // Initialize the launcher in a new Thread
+      new Startup(launcher).start();
+
+   }
+
+   // --------------------------------------------------------------------------------||
+   // Functional Methods -------------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   /**
+    * Initializes the instance by starting up an MC Bootstrap, 
+    * deploying relevant *-beans.xml, creating and installing EJB Containers
+    */
+   protected void initialize() throws Throwable
+   {
+
+      // Switch up to the hacky CL so that "jndi.properties" is not loaded
+      ClassLoader olderLoader = Thread.currentThread().getContextClassLoader();
+      Thread.currentThread().setContextClassLoader(new JndiPropertiesRedirectClassloader());
+
+      // Create and set a new MC Bootstrap 
+      this.setBootstrap(EmbeddedTestMcBootstrap.createEmbeddedMcBootstrap());
+
+      // Add a Shutdown Hook
+      Runtime.getRuntime().addShutdownHook(new ShutdownHook());
+
+      // Bind the Ejb3Registrar
+      Ejb3RegistrarLocator.bindRegistrar(new Ejb3McRegistrar(bootstrap.getKernel()));
+
+      // Deploy *-beans.xml
+      this.getBootstrap().deploy(this.getTestClass());
+
+      // Create a SLSB Container
+      StatelessContainer container = Utils.createSlsb(MyStatelessBean.class);
+      log.info("Created SLSB Container: " + container.getName());
+      this.setContainerName(container.getName());
+
+      // Install into MC
+      this.getBootstrap().installInstance(container.getName(), container);
+
+      // Restore old CL
+      Thread.currentThread().setContextClassLoader(olderLoader);
+
+   }
+
+   // --------------------------------------------------------------------------------||
+   // Inner Classes ------------------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   protected static class Startup extends Thread implements Runnable
+   {
+
+      // --------------------------------------------------------------------------------||
+      // Instance Members ---------------------------------------------------------------||
+      // --------------------------------------------------------------------------------||
+
+      private MockServer launcher;
+
+      // --------------------------------------------------------------------------------||
+      // Constructor --------------------------------------------------------------------||
+      // --------------------------------------------------------------------------------||
+
+      /**
+       * Constructor
+       */
+      public Startup(MockServer launcher)
+      {
+         this.setLauncher(launcher);
+      }
+
+      // --------------------------------------------------------------------------------||
+      // Overridden Implementations -----------------------------------------------------||
+      // --------------------------------------------------------------------------------||
+
+      /**
+       * Starts the Remote Launcher
+       */
+      @Override
+      public void run()
+      {
+         // Initialize
+         try
+         {
+            this.getLauncher().initialize();
+         }
+         catch (Throwable e)
+         {
+            throw new RuntimeException("Could not initialize " + this.getLauncher(), e);
+         }
+
+         // Run
+         while (true);
+      }
+
+      // --------------------------------------------------------------------------------||
+      // Accessors / Mutators -----------------------------------------------------------||
+      // --------------------------------------------------------------------------------||
+
+      public MockServer getLauncher()
+      {
+         return launcher;
+      }
+
+      public void setLauncher(MockServer launcher)
+      {
+         this.launcher = launcher;
+      }
+   }
+
+   /**
+    * Shutdown Hook for the MockServer
+    */
+   protected static class ShutdownHook extends Thread implements Runnable
+   {
+
+      // --------------------------------------------------------------------------------||
+      // Overridden Implementations -----------------------------------------------------||
+      // --------------------------------------------------------------------------------||
+
+      /**
+       * Shuts down the Bootstrap
+       */
+      @Override
+      public void run()
+      {
+         getServer().bootstrap.shutdown();
+      }
+   }
+
+   // --------------------------------------------------------------------------------||
+   // Accessors / Mutators -----------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   public String getContainerName()
+   {
+      return this.containerName;
+   }
+
+   public void setContainerName(String containerName)
+   {
+      this.containerName = containerName;
+   }
+
+   public EmbeddedTestMcBootstrap getBootstrap()
+   {
+      return this.bootstrap;
+   }
+
+   public void setBootstrap(EmbeddedTestMcBootstrap bootstrap)
+   {
+      this.bootstrap = bootstrap;
+   }
+
+   public Class<?> getTestClass()
+   {
+      return testClass;
+   }
+
+   public void setTestClass(Class<?> testClass)
+   {
+      this.testClass = testClass;
+   }
+
+   public static MockServer getServer()
+   {
+      return server;
+   }
+
+   public static void setServer(MockServer server)
+   {
+      MockServer.server = server;
+   }
+
+}
\ No newline at end of file

Added: projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/remoteaccess/unit/RemoteAccessTestCase.java
===================================================================
--- projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/remoteaccess/unit/RemoteAccessTestCase.java	                        (rev 0)
+++ projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/remoteaccess/unit/RemoteAccessTestCase.java	2008-05-27 11:02:55 UTC (rev 73701)
@@ -0,0 +1,220 @@
+/*
+ * 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.test.proxy.remoteaccess.unit;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+
+import javax.naming.InitialContext;
+
+import org.jboss.ejb3.common.thread.RedirectProcessOutputToSystemOutThread;
+import org.jboss.ejb3.test.proxy.common.ejb.slsb.MyStatelessLocal;
+import org.jboss.ejb3.test.proxy.common.ejb.slsb.MyStatelessRemote;
+import org.jboss.ejb3.test.proxy.remoteaccess.MockServer;
+import org.jboss.logging.Logger;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * RemoteAccessTestCase
+ *
+ * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
+ * @version $Revision: $
+ */
+
+public class RemoteAccessTestCase
+{
+   // --------------------------------------------------------------------------------||
+   // Class Members ------------------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   private static final Logger log = Logger.getLogger(RemoteAccessTestCase.class);
+
+   private static final String ENV_VAR_JAVAHOME = "JAVA_HOME";
+
+   private static final String EXECUTABLE_JAVA = "bin" + File.separator + "java";
+
+   private static final String LOCATION_BASEDIR = System.getProperty("basedir");
+
+   private static final String LOCATION_TARGET = RemoteAccessTestCase.LOCATION_BASEDIR + File.separator + "target";
+
+   private static final String LOCATION_TEST_CLASSES = RemoteAccessTestCase.LOCATION_TARGET + File.separator
+         + "tests-classes";
+
+   private static final String LOCATION_CLASSES = RemoteAccessTestCase.LOCATION_TARGET + File.separator + "classes";
+
+   private static final String LOCATION_CONF = RemoteAccessTestCase.LOCATION_BASEDIR + File.separator + "conf";
+
+   private static final String FILENAME_DEPENDENCY_CP = RemoteAccessTestCase.LOCATION_TARGET + File.separator
+         + "cp.txt";
+
+   private static Process remoteProcess;
+
+   // --------------------------------------------------------------------------------||
+   // Instance Members ---------------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   // --------------------------------------------------------------------------------||
+   // Tests --------------------------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   @Test
+   public void testInvocation() throws Throwable
+   {
+      InitialContext ctx = new InitialContext();
+
+      Object bean = ctx.lookup("MyStatelessBean/remote");
+      assertTrue(bean instanceof MyStatelessLocal);
+
+      String result = ((MyStatelessRemote) bean).sayHi("testRemote");
+      assertEquals("Hi testRemote", result);
+
+   }
+
+   // --------------------------------------------------------------------------------||
+   // Lifecycle Methods --------------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   /**
+    * Starts the MockServer
+    */
+   @BeforeClass
+   public static void beforeClass() throws Throwable
+   {
+      // Start Server
+      RemoteAccessTestCase.invokeRemoteMockServerProcess(RemoteAccessTestCase.class.getName());
+
+      // Wait for Server to start
+      Thread.sleep(3000);
+   }
+
+   /**
+    * Stops the MockServer
+    * 
+    * @throws Throwable
+    */
+   @AfterClass
+   public static void afterClass() throws Throwable
+   {
+      /*
+       * This is far from a graceful shutdown, but hey, this is only for a test
+       */
+      Process p = RemoteAccessTestCase.getRemoteProcess();
+      p.getOutputStream().flush();
+      p.destroy();
+   }
+
+   // --------------------------------------------------------------------------------||
+   // Helper Methods -----------------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   /**
+    * Invokes on the MockServer, spinning up as a new Process
+    * 
+    * @param argument
+    * @throws Throwable
+    */
+   protected static void invokeRemoteMockServerProcess(String argument) throws Throwable
+   {
+      // Get the current System Properties and Environment Variables
+      String javaHome = System.getenv(RemoteAccessTestCase.ENV_VAR_JAVAHOME);
+      String conf = RemoteAccessTestCase.LOCATION_CONF;
+      String testClasses = RemoteAccessTestCase.LOCATION_TEST_CLASSES;
+      String classes = RemoteAccessTestCase.LOCATION_CLASSES;
+
+      // Get the contents of the dependency classpath file
+      String dependencyClasspathFilename = RemoteAccessTestCase.FILENAME_DEPENDENCY_CP;
+      File dependencyClasspath = new File(dependencyClasspathFilename);
+      assert dependencyClasspath.exists() : "File " + dependencyClasspathFilename
+            + " is required to denote the dependency CP";
+      BufferedReader reader = new BufferedReader(new FileReader(dependencyClasspath));
+      StringBuffer contents = new StringBuffer();
+      String line = null;
+      while ((line = reader.readLine()) != null)
+      {
+         contents.append(line);
+         contents.append(System.getProperty("line.separator"));
+      }
+      String depCp = contents.toString().trim();
+
+      // Build the command
+      StringBuffer command = new StringBuffer();
+      command.append(javaHome); // JAVA_HOME
+      command.append(File.separatorChar);
+      command.append(RemoteAccessTestCase.EXECUTABLE_JAVA);
+      command.append(" -cp "); // Classpath
+
+      command.append(classes);
+      command.append(File.pathSeparatorChar);
+      command.append(testClasses);
+      command.append(File.pathSeparatorChar);
+      command.append(conf);
+      command.append(File.pathSeparatorChar);
+      command.append(depCp); // Dependency CP
+      command.append(" -ea "); // Enable Assertions
+      command.append(MockServer.class.getName());
+      command.append(' ');
+      command.append(argument); // Argument
+
+      // Create a Remote Launcher
+      String cmd = command.toString();
+      String[] cmds = cmd.split(" ");
+      ProcessBuilder builder = new ProcessBuilder();
+      builder.command(cmds);
+      builder.redirectErrorStream(true);
+      File pwd = new File(RemoteAccessTestCase.LOCATION_BASEDIR);
+      assert pwd.exists() : "Present working directory for execution of remote process, " + pwd.getAbsolutePath()
+            + ", could not be found.";
+      log.debug("Remote Process working directory: " + pwd.getAbsolutePath());
+      builder.directory(pwd);
+      log.info("Launching in separate process: " + cmd);
+      try
+      {
+         RemoteAccessTestCase.setRemoteProcess(builder.start());
+         // Redirect output from the separate process
+         new RedirectProcessOutputToSystemOutThread(RemoteAccessTestCase.getRemoteProcess()).start();
+      }
+      catch (Throwable t)
+      {
+         throw new RuntimeException("Could not execute remote process", t);
+      }
+   }
+
+   // --------------------------------------------------------------------------------||
+   // Accessors / Mutators -----------------------------------------------------------||
+   // --------------------------------------------------------------------------------||
+
+   public static Process getRemoteProcess()
+   {
+      return remoteProcess;
+   }
+
+   public static void setRemoteProcess(Process remoteProcess)
+   {
+      RemoteAccessTestCase.remoteProcess = remoteProcess;
+   }
+}

Added: projects/ejb3/trunk/proxy/src/test/resources/jnpserver.properties
===================================================================
--- projects/ejb3/trunk/proxy/src/test/resources/jnpserver.properties	                        (rev 0)
+++ projects/ejb3/trunk/proxy/src/test/resources/jnpserver.properties	2008-05-27 11:02:55 UTC (rev 73701)
@@ -0,0 +1,2 @@
+java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
+java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
\ No newline at end of file

Added: projects/ejb3/trunk/proxy/src/test/resources/org/jboss/ejb3/test/proxy/remoteaccess/unit/RemoteAccessTestCase-beans.xml
===================================================================
--- projects/ejb3/trunk/proxy/src/test/resources/org/jboss/ejb3/test/proxy/remoteaccess/unit/RemoteAccessTestCase-beans.xml	                        (rev 0)
+++ projects/ejb3/trunk/proxy/src/test/resources/org/jboss/ejb3/test/proxy/remoteaccess/unit/RemoteAccessTestCase-beans.xml	2008-05-27 11:02:55 UTC (rev 73701)
@@ -0,0 +1,57 @@
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="urn:jboss:bean-deployer:2.0 bean-deployer_2_0.xsd"
+  xmlns="urn:jboss:bean-deployer:2.0">
+
+  <!-- 
+    
+    JNDI 
+    
+    The requisite Naming Server
+
+
+  <bean name="NameServer" class="org.jnp.server.NamingBeanImpl">
+    <property name="installGlobalService">true</property>
+  </bean>   -->
+  
+     <!-- JNDI -->
+   <bean name="NamingBeanImpl" class="org.jnp.server.NamingBeanImpl"/>
+   
+   <bean name="Naming" class="org.jnp.server.Main">
+      <property name="namingInfo"><inject bean="NamingBeanImpl"/></property>
+      <property name="port">1099</property>
+   </bean>
+
+  <!-- 
+    
+    JNDI Registrars
+    
+    
+    The JNDI Registrar is responsible for all JNDI Bindings for
+    an EJB.  Its constructor takes the following arguments, in order:
+    
+    javax.naming.Context (JNDI Context into which to bind objects)
+    org.jboss.ejb3.proxy.spi.registry.ProxyFactoryRegistry (Implementation of ProxyFactoryRegistry)
+    String statelessSessionProxyObjectFactoryType The JNDI ObjectFactory implementation to use for SLSB
+    ...more later when SFSB, @Service, MDB Implemented
+    
+  -->
+
+  <!-- SLSB JNDI Registrar -->
+  <bean name="org.jboss.ejb3.JndiRegistrar.Session.SLSBJndiRegistrar"
+    class="org.jboss.ejb3.proxy.jndiregistrar.JndiStatelessSessionRegistrar">
+    <constructor>
+      <parameter>
+        <inject bean="org.jboss.ejb3.JndiContext" />
+      </parameter>
+      <parameter>
+        org.jboss.ejb3.proxy.objectfactory.session.stateless.StatelessSessionProxyObjectFactory
+      </parameter>
+    </constructor>
+    <depends>Naming</depends>
+  </bean>
+
+  <!-- JNDI Registrar Configuration -->
+  <bean name="org.jboss.ejb3.JndiContext"
+    class="javax.naming.InitialContext" />
+
+</deployment>
\ No newline at end of file




More information about the jboss-cvs-commits mailing list