[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