[jboss-svn-commits] JBL Code SVN: r19633 - in labs/jbossesb/trunk: product/docs and 14 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Apr 18 16:01:02 EDT 2008


Author: mark.little at jboss.com
Date: 2008-04-18 16:01:02 -0400 (Fri, 18 Apr 2008)
New Revision: 19633

Added:
   labs/jbossesb/trunk/product/services/slsb/
   labs/jbossesb/trunk/product/services/slsb/build.properties
   labs/jbossesb/trunk/product/services/slsb/build.xml
   labs/jbossesb/trunk/product/services/slsb/lib/
   labs/jbossesb/trunk/product/services/slsb/lib/ext/
   labs/jbossesb/trunk/product/services/slsb/lib/ext/build-time/
   labs/jbossesb/trunk/product/services/slsb/src/
   labs/jbossesb/trunk/product/services/slsb/src/main/
   labs/jbossesb/trunk/product/services/slsb/src/main/java/
   labs/jbossesb/trunk/product/services/slsb/src/main/java/org/
   labs/jbossesb/trunk/product/services/slsb/src/main/java/org/jboss/
   labs/jbossesb/trunk/product/services/slsb/src/main/java/org/jboss/soa/
   labs/jbossesb/trunk/product/services/slsb/src/main/java/org/jboss/soa/esb/
   labs/jbossesb/trunk/product/services/slsb/src/main/java/org/jboss/soa/esb/actions/
   labs/jbossesb/trunk/product/services/slsb/src/main/java/org/jboss/soa/esb/actions/EJBProcessor.java
   labs/jbossesb/trunk/product/services/slsb/src/main/resources/
   labs/jbossesb/trunk/product/services/slsb/src/main/resources/META-INF/
   labs/jbossesb/trunk/product/services/slsb/src/main/resources/META-INF/deployment.xml
   labs/jbossesb/trunk/product/services/slsb/src/main/resources/META-INF/jboss-esb.xml
Modified:
   labs/jbossesb/trunk/Contributors.txt
   labs/jbossesb/trunk/product/docs/MessageActionGuide.odt
   labs/jbossesb/trunk/product/services/build.xml
Log:
http://jira.jboss.com/jira/browse/JBESB-1350

Modified: labs/jbossesb/trunk/Contributors.txt
===================================================================
--- labs/jbossesb/trunk/Contributors.txt	2008-04-18 18:53:10 UTC (rev 19632)
+++ labs/jbossesb/trunk/Contributors.txt	2008-04-18 20:01:02 UTC (rev 19633)
@@ -29,4 +29,5 @@
 Daniel Bevenius
 Thomas Cunningham
 Len DiMaggio
+Dominik Kunz
 

Modified: labs/jbossesb/trunk/product/docs/MessageActionGuide.odt
===================================================================
(Binary files differ)

Modified: labs/jbossesb/trunk/product/services/build.xml
===================================================================
--- labs/jbossesb/trunk/product/services/build.xml	2008-04-18 18:53:10 UTC (rev 19632)
+++ labs/jbossesb/trunk/product/services/build.xml	2008-04-18 20:01:02 UTC (rev 19633)
@@ -10,6 +10,7 @@
         <ant dir="soapui-client" target="sar"/>
         <ant dir="soap" target="dist"/>
         <ant dir="spring" target="dist"/>
+    	<ant dir="slsb" target="dist"/>
     </target>
 
     <target name="clean">
@@ -20,6 +21,7 @@
         <ant dir="soapui-client" target="clean"/>
 		<ant dir="soap" target="clean"/>
         <ant dir="spring" target="clean"/>
+    	<ant dir="slsb" target="clean"/>
     </target>
 
     <target name="test">
@@ -30,6 +32,7 @@
         <ant dir="soapui-client" target="test"/>
 		<ant dir="soap" target="test"/>
 		<ant dir="spring" target="test"/>
+    	<ant dir="slsb" target="test"/>
     </target>
 	
 </project>

Added: labs/jbossesb/trunk/product/services/slsb/build.properties
===================================================================
--- labs/jbossesb/trunk/product/services/slsb/build.properties	                        (rev 0)
+++ labs/jbossesb/trunk/product/services/slsb/build.properties	2008-04-18 20:01:02 UTC (rev 19633)
@@ -0,0 +1,3 @@
+esb.product.lib.dir=../../build/jbossesb/lib
+esb.product.lib.ext=../../lib/ext
+services.base.build=../base-project-build.xml
\ No newline at end of file

Added: labs/jbossesb/trunk/product/services/slsb/build.xml
===================================================================
--- labs/jbossesb/trunk/product/services/slsb/build.xml	                        (rev 0)
+++ labs/jbossesb/trunk/product/services/slsb/build.xml	2008-04-18 20:01:02 UTC (rev 19633)
@@ -0,0 +1,9 @@
+<project name="slsb" default="test" basedir=".">
+	
+	<property file="build.properties"/>
+	<!-- Import the base Ant build script... -->
+	<import file="${services.base.build}"/>
+	
+	<target name="test"/>
+
+</project>
\ No newline at end of file

Added: labs/jbossesb/trunk/product/services/slsb/src/main/java/org/jboss/soa/esb/actions/EJBProcessor.java
===================================================================
--- labs/jbossesb/trunk/product/services/slsb/src/main/java/org/jboss/soa/esb/actions/EJBProcessor.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/services/slsb/src/main/java/org/jboss/soa/esb/actions/EJBProcessor.java	2008-04-18 20:01:02 UTC (rev 19633)
@@ -0,0 +1,266 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * 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,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * (C) 2008, JBoss Inc.
+ */
+
+/*
+ * Stateless Session Bean Action provided by Dominik Kunz.
+ *
+ * http://jira.jboss.com/jira/browse/JBESB-1350
+ */
+
+package org.jboss.soa.esb.actions;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.ejb.EJBHome;
+import javax.ejb.EJBMetaData;
+import javax.ejb.EJBObject;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.rmi.PortableRemoteObject;
+
+import org.apache.log4j.Logger;
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.actions.AbstractActionLifecycle;
+import org.jboss.soa.esb.actions.ActionProcessingException;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.message.Message;
+
+public class EJBProcessor extends AbstractActionLifecycle
+{
+
+    private static final Logger log = Logger.getLogger(EJBProcessor.class);
+
+    public static final String EJB_NAME = "ejb-name";
+
+    public static final String JNDI_NAME = "jndi-name";
+
+    public static final String EJB_METHOD = "method";
+
+    public static final String JAVA_TYPE = "type";
+
+    public static final String INICTXFACTORY = "initial-context-factory";
+
+    public static final String PROVIDERURL = "provider-url";
+
+    public static final String OUT_VAR = "esb-out-var";
+
+    public static final String DEFAULT_OUT = "DEFAULT_EJB_OUT";
+
+    public static final int ARG_PREFIX_LENGTH = 3;
+
+    protected ConfigTree configTree;
+
+    private Map<String, String> ejbRef;
+
+    private Map<Integer, Argument> ejbParams;
+
+    private List<String> ejbParamTypeNames;
+
+    public EJBProcessor(ConfigTree config)
+    {
+        configTree = config;
+    }
+
+    public Message process (Message msg) throws ActionProcessingException,
+            ConfigurationException
+    {
+        ejbRef = new HashMap<String, String>();
+        ejbParams = new HashMap<Integer, Argument>();
+        ejbParamTypeNames = new ArrayList<String>();
+
+        // Get the configuration from jboss-esb.xml
+        ejbRef.put(EJB_NAME, configTree.getAttribute(EJB_NAME));
+        ejbRef.put(JNDI_NAME, configTree.getAttribute(JNDI_NAME));
+        ejbRef.put(EJB_METHOD, configTree.getAttribute(EJB_METHOD));
+        ejbRef.put(INICTXFACTORY, configTree.getAttribute(INICTXFACTORY));
+        ejbRef.put(PROVIDERURL, configTree.getAttribute(PROVIDERURL));
+        if (configTree.getAttribute(OUT_VAR) != null)
+        {
+            ejbRef.put(OUT_VAR, configTree.getAttribute(OUT_VAR));
+        }
+        else
+        {
+            ejbRef.put(OUT_VAR, DEFAULT_OUT);
+        }
+
+        // Get all parameters for the EJB method, defined in jboss-esb.xml
+        ConfigTree[] subElements = configTree.getAllChildren();
+
+        for (ConfigTree child : subElements)
+        {
+            Integer argNum;
+            String jType;
+            String esbLocation;
+
+            argNum = Integer.parseInt(child.getName().substring(
+                    ARG_PREFIX_LENGTH));
+            jType = child.getAttribute(JAVA_TYPE);
+            esbLocation = child.getWholeText();
+            ejbParams.put(argNum, new Argument(jType, esbLocation));
+            ejbParamTypeNames.add(jType);
+        }
+
+        // Check for missing configuration values
+        for (String conf : ejbRef.values())
+        {
+            if (conf == null)
+            {
+                throw new ConfigurationException(
+                        "Error configuring EJBProcessor");
+            }
+        }
+
+        // Build Properties for InitialContext lookup
+        Properties props = new Properties();
+
+        props.put(Context.INITIAL_CONTEXT_FACTORY, ejbRef.get(INICTXFACTORY));
+        props.put(Context.PROVIDER_URL, ejbRef.get(PROVIDERURL));
+
+        try
+        {
+            // Get the InitialContext
+            InitialContext iniCtx = new InitialContext(props);
+
+            // Lookup and narrow
+            EJBHome home = (EJBHome) PortableRemoteObject.narrow(
+                    (EJBHome) iniCtx.lookup(ejbRef.get(JNDI_NAME)),
+                    EJBHome.class);
+
+            // Get the EJB metadata
+            EJBMetaData metaData = home.getEJBMetaData();
+            Class homeClass = metaData.getHomeInterfaceClass();
+            Class remoteClass = metaData.getRemoteInterfaceClass();
+
+            // convert handle to real home type
+            home = (EJBHome) javax.rmi.PortableRemoteObject.narrow(home,
+                    homeClass);
+
+            if (!(metaData.isSession() && metaData.isStatelessSession()))
+            {
+                throw new ActionProcessingException("Only SLSBs are supported!");
+            }
+
+            EJBObject theRemote = (EJBObject) this.create(homeClass, home);
+
+            // Assemble parameter array
+            Object[] param = new Object[ejbParams.size()];
+            for (int i = 0; i < ejbParams.size(); i++)
+            {
+                // get the parameter from the esb message and
+                // cast it to the in the jboss-esb.xml specified type
+                param[i] = Class.forName(ejbParams.get(i).getType()).cast(
+                        msg.getBody().get(ejbParams.get(i).getLoc()));
+            }
+
+            msg.getBody().add(
+                    ejbRef.get(OUT_VAR),
+                    this.invoke(remoteClass, theRemote, ejbRef.get(EJB_METHOD),
+                            param));
+            log.debug("###########################################");
+            log.debug(msg);
+            log.debug("###########################################");
+
+        }
+        catch (Exception e)
+        {
+            throw new ActionProcessingException(
+                    "Got an error while processing EJB " + ejbRef.get(EJB_NAME),
+                    new Throwable(e.getCause()));
+        }
+
+        return msg;
+    }
+
+    private static Object create (Class c, Object obj) throws Exception
+    {
+        Object ret = null;
+
+        Method create = c.getMethod("create");
+        ret = create.invoke(obj);
+
+        return ret;
+    }
+
+    private Object invoke (Class c, Object obj, String mname, Object[] params)
+            throws Exception
+    {
+
+        // The return Object
+        Object r = null;
+
+        // Assemble method signature array
+        Class[] sigArray = new Class[ejbParams.size()];
+        for (int i = 0; i < ejbParams.size(); i++)
+        {
+            sigArray[i] = Class.forName(ejbParams.get(i).getType());
+        }
+
+        // Get the specified method
+        Method method = c.getMethod(mname, sigArray);
+
+        // finally invoke it...
+        r = method.invoke(obj, params);
+
+        return r;
+    }
+
+    // Helper inner class for method arguments and where to find it in the esb
+    // message
+    class Argument
+    {
+
+        private String type;
+
+        private String loc;
+
+        public Argument(String javaType, String esbLoc)
+        {
+            type = javaType;
+            loc = esbLoc;
+        }
+
+        public String getType ()
+        {
+            return type;
+        }
+
+        public void setType (String type)
+        {
+            this.type = type;
+        }
+
+        public String getLoc ()
+        {
+            return loc;
+        }
+
+        public void setLoc (String loc)
+        {
+            this.loc = loc;
+        }
+
+    }
+
+}
\ No newline at end of file

Added: labs/jbossesb/trunk/product/services/slsb/src/main/resources/META-INF/deployment.xml
===================================================================
--- labs/jbossesb/trunk/product/services/slsb/src/main/resources/META-INF/deployment.xml	                        (rev 0)
+++ labs/jbossesb/trunk/product/services/slsb/src/main/resources/META-INF/deployment.xml	2008-04-18 20:01:02 UTC (rev 19633)
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jbossesb-deployment>
+  <depends>jboss.esb:deployment=jbossesb.esb</depends>
+</jbossesb-deployment>

Added: labs/jbossesb/trunk/product/services/slsb/src/main/resources/META-INF/jboss-esb.xml
===================================================================
--- labs/jbossesb/trunk/product/services/slsb/src/main/resources/META-INF/jboss-esb.xml	                        (rev 0)
+++ labs/jbossesb/trunk/product/services/slsb/src/main/resources/META-INF/jboss-esb.xml	2008-04-18 20:01:02 UTC (rev 19633)
@@ -0,0 +1,6 @@
+<?xml version = "1.0" encoding = "UTF-8"?>
+<jbossesb xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd" parameterReloadSecs="5">
+     <!--  
+     		jbossesb EJB integration
+     -->
+</jbossesb>




More information about the jboss-svn-commits mailing list