[jboss-svn-commits] JBL Code SVN: r37428 - in labs/jbossesb/branches/JBESB_4_10_CP/product: services/slsb/src/main/java/org/jboss/soa/esb/actions and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Aug 23 07:56:07 EDT 2011


Author: mageshbk at jboss.com
Date: 2011-08-23 07:56:05 -0400 (Tue, 23 Aug 2011)
New Revision: 37428

Modified:
   labs/jbossesb/branches/JBESB_4_10_CP/product/docs/Programmers_Guide/en-US/OOB-Actions/OOB_Actions_services.xml
   labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/main/java/org/jboss/soa/esb/actions/EJBProcessor.java
   labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/test/java/org/jboss/soa/esb/actions/ConfigBuilder.java
   labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/test/java/org/jboss/soa/esb/actions/EJBProcessorUnitTest.java
   labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/test/java/org/jboss/soa/esb/actions/MockEjbProcessor.java
Log:
[JBESB-2813] - Added feature to lazily initialise EJBs.

Modified: labs/jbossesb/branches/JBESB_4_10_CP/product/docs/Programmers_Guide/en-US/OOB-Actions/OOB_Actions_services.xml
===================================================================
--- labs/jbossesb/branches/JBESB_4_10_CP/product/docs/Programmers_Guide/en-US/OOB-Actions/OOB_Actions_services.xml	2011-08-23 09:35:29 UTC (rev 37427)
+++ labs/jbossesb/branches/JBESB_4_10_CP/product/docs/Programmers_Guide/en-US/OOB-Actions/OOB_Actions_services.xml	2011-08-23 11:56:05 UTC (rev 37428)
@@ -95,6 +95,15 @@
             </row>
 
             <row>
+                <entry><property>lazy-ejb-init</property></entry>
+                <entry>
+                    <para>Whether EJBs should be lazily initialised at runtime rather
+                    than at deploy time. Default is false.</para>
+                </entry>
+                <entry>No</entry>
+            </row>
+
+            <row>
                 <entry><property>ejb-params</property></entry>
                 <entry>
                     <para>

Modified: labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/main/java/org/jboss/soa/esb/actions/EJBProcessor.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/main/java/org/jboss/soa/esb/actions/EJBProcessor.java	2011-08-23 09:35:29 UTC (rev 37427)
+++ labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/main/java/org/jboss/soa/esb/actions/EJBProcessor.java	2011-08-23 11:56:05 UTC (rev 37428)
@@ -72,6 +72,7 @@
  *    <property name="security-login-module" value="securityDomain" />
  *    <property name="provider-url" value="localhost:1099" />
  *    <property name="method" value="login" />
+ *    <property name="lazy-ejb-init" value="false" />
  *
  *    <!-- Optional output location, defaults to "DEFAULT_EJB_OUT"
  *    <property name="esb-out-var" value="MY_OUT_LOCATION"/> -->
@@ -95,6 +96,7 @@
  *    <property name="security-login-module" value="securityDomain" />
  *    <property name="provider-url" value="localhost:1099" />
  *    <property name="method" value="login" />
+ *    <property name="lazy-ejb-init" value="false" />
  *
  *    <!-- Optional output location, defaults to "DEFAULT_EJB_OUT"
  *    <property name="esb-out-var" value="MY_OUT_LOCATION"/> -->
@@ -122,6 +124,12 @@
     public static final String INICTXFACTORY = "initial-context-factory";
 
     public static final String PROVIDERURL = "provider-url";
+    
+    // EJB initialization will be done during the first call
+    // this is useful when you setup access to remote EJBs and the remote server is not up yet
+    // when this action is initialized
+    // default = false
+    public static final String LAZY_EJB_INIT = "lazy-ejb-init";
 
     public static final String OUT_VAR = "esb-out-var";
 
@@ -143,15 +151,17 @@
 
     private List<String> ejbParamTypeNames;
 
-    private EJBHome ejbHome;
-    private EJBObject ejbObject;
+    protected EJBHome ejbHome;
+    protected EJBObject ejbObject;
 
-	private Object ejb3Interface;
+	protected Object ejb3Interface;
 
 	private boolean ejb3;
 
     private LoginContext loginContext;
 
+	private boolean lazyEJBInit;
+	private boolean ejbInitialised=false;
 
     public EJBProcessor(ConfigTree config)
     {
@@ -172,6 +182,11 @@
                         msg.getBody().get(ejbParams.get(i).getLoc()));
             }
             Object ret;
+            
+            if (!ejbInitialised){
+            	ejbInitialise();
+            }
+            
             if ( ejb3 )
             {
             	// invoke EJB3.x
@@ -210,7 +225,14 @@
          * all of this data is statically defined and not
          * modified by the incoming Message during process execution.
          */
-
+    	
+    	/* note:
+    	 * with lazy ejb init setup to "true" the initialization process will be delayed waiting for the first call
+    	 */
+        lazyEJBInit = Boolean.parseBoolean(configTree.getAttribute(LAZY_EJB_INIT, "false"));
+    	
+    	
+        
         ejbRef = new HashMap<String, String>();
         ejbParams = new HashMap<Integer, Argument>();
         ejbParamTypeNames = new ArrayList<String>();
@@ -261,6 +283,24 @@
         	}
 		}
 
+        if (!lazyEJBInit){
+            try
+            {
+            	ejbInitialise();
+            }
+            catch (Exception e)
+            {
+                throw new ActionLifecycleException( "Got an error while processing EJB " + ejbRef.get(EJB_METHOD), e);
+            }
+        	
+        }
+    
+    }
+
+    synchronized void ejbInitialise() throws Exception {
+        
+    	if (ejbInitialised) return;
+    	
         // Build Properties for InitialContext lookup
         Properties props = new Properties();
 
@@ -324,6 +364,7 @@
                 throw new ActionLifecycleException( "Got an error while processing EJB " + ejbRef.get(EJB_METHOD), e);
             }
 		}
+		ejbInitialised=true;
     }
 
     InitialContext getInitialContext(final Properties props) throws ActionLifecycleException

Modified: labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/test/java/org/jboss/soa/esb/actions/ConfigBuilder.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/test/java/org/jboss/soa/esb/actions/ConfigBuilder.java	2011-08-23 09:35:29 UTC (rev 37427)
+++ labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/test/java/org/jboss/soa/esb/actions/ConfigBuilder.java	2011-08-23 11:56:05 UTC (rev 37428)
@@ -135,5 +135,12 @@
         return config;
     }
 
+    public ConfigBuilder lazyEJBInit(final Boolean on)
+    {
+        if (on != null)
+            config.setAttribute(EJBProcessor.LAZY_EJB_INIT, on.toString());
+        return this;
+    }
+
 }
 

Modified: labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/test/java/org/jboss/soa/esb/actions/EJBProcessorUnitTest.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/test/java/org/jboss/soa/esb/actions/EJBProcessorUnitTest.java	2011-08-23 09:35:29 UTC (rev 37427)
+++ labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/test/java/org/jboss/soa/esb/actions/EJBProcessorUnitTest.java	2011-08-23 11:56:05 UTC (rev 37428)
@@ -21,6 +21,7 @@
 package org.jboss.soa.esb.actions;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
@@ -214,6 +215,32 @@
         assertTrue(processor.getCallbackHandler() instanceof AppCallbackHandler);
     }
 
+    @Test
+    public void processLazyInitEjb3() throws ActionLifecycleException, ActionProcessingException, ConfigurationException
+    {
+        Message message = MessageFactory.getInstance().getMessage();
+        message.getBody().add(payloadLocation, payload);
+        
+        final ConfigBuilder builder = new ConfigBuilder();
+        builder.methodName("printMessage");
+        builder.outputLocation(outputLocation);
+        builder.jndiName("Simple");
+        builder.isEjb3(true);
+        builder.lazyEJBInit(true);
+        builder.initCtxFactory("org.jnp.interfaces.NamingContextFactory");
+        builder.providerUrl("jnp://localhost:1099");
+        builder.arg(String.class, payloadLocation);
+        
+        final ConfigTree config = builder.build();
+        
+        MockEjbProcessor processor = new MockEjbProcessor(config);
+        processor.initialise();
+        assertNull(processor.getEJB3Interface());
+
+        Message process = processor.process(message);
+        assertNotNull(processor.getEJB3Interface());
+    }
+
 	public static junit.framework.Test suite()
 	{
 		return new JUnit4TestAdapter(EJBProcessorUnitTest.class);

Modified: labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/test/java/org/jboss/soa/esb/actions/MockEjbProcessor.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/test/java/org/jboss/soa/esb/actions/MockEjbProcessor.java	2011-08-23 09:35:29 UTC (rev 37427)
+++ labs/jbossesb/branches/JBESB_4_10_CP/product/services/slsb/src/test/java/org/jboss/soa/esb/actions/MockEjbProcessor.java	2011-08-23 11:56:05 UTC (rev 37428)
@@ -80,7 +80,9 @@
     {
         return loginModuleName;
     }
-    
-    
 
+    public Object getEJB3Interface()
+    {
+        return ejb3Interface;
+    }
 }



More information about the jboss-svn-commits mailing list