Calling an Enterprise Java Bean

You can call an Enterprise Java™ Bean (EJB) from a JavaCompute node.

Before you begin

  • Ensure that all required Java classes are in the IBM® App Connect Enterprise shared-classes directories, or are referenced in the CLASSPATH environment variable. You can use the wildcard character (*) at the end of a directory path specifier to load all JARs in that directory path.
  • Ensure that the user JAR files that are needed for EJB access are referenced in CLASSPATH. For more information, see the documentation for the application server that is hosting the EJB.

Example

The following example shows how to call an EJB from a JavaCompute node:
public class CallAckNoAckEJB_JavaCompute extends MbJavaComputeNode { 

		 public void evaluate(MbMessageAssembly inAssembly) throws MbException { 
                MbOutputTerminal out = getOutputTerminal("out"); 
                MbOutputTerminal alt = getOutputTerminal("alternate"); 

                MbMessage inMessage = inAssembly.getMessage(); 

                // create new message 
                MbMessage outMessage = new MbMessage(inMessage); 
                MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly,outMessage); 

                try { 
                        // ---------------------------------------------------------- 
                        // Add user code below 
                
                        String response = null; 
                        String responseMessage = null; 
                                                
                        Properties properties = new Properties(); 
                        properties.put(Context.PROVIDER_URL, "iiop://localhost:2809"); 
                        properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.
WsnInitialContextFactory"); 
                
                        try { 
                            
                        		 Context initialContext = new InitialContext(properties); 
                                Object obj = initialContext.lookup("ejb/com/acme/ejbs/AckNoAckHome"); 
                                AckNoAckHome ejbHome = (AckNoAckHome)javax.rmi.PortableRemoteObject.
narrow(obj,AckNoAckHome.class); 
                                
                                AckNoAck ackNoAck = ejbHome.create(); 
                                responseMessage = ackNoAck.getAck(); 
                                response = "Ack"; 
                        } catch(Exception e) { 
                                responseMessage = e.getMessage(); 
                                response = "NoAck"; 
                        } 

                        MbElement cursor = outMessage.getRootElement().getFirstElementByPath("/XML/AckNoAck"); 
                        cursor.createElementAsLastChild(MbElement.TYPE_NAME,"Response",null); 
                        cursor.getLastChild().createElementAsLastChild(MbElement.TYPE_NAME,response,null); 
                        cursor.getLastChild().getLastChild().createElementAsLastChild(MbElement.TYPE_VALUE,null,
responseMessage); 
                                                
                        // End of user code 
                        // ---------------------------------------------------------- 

                        // The following should only be changed 
                        // if not propagating message to the 'out' terminal 
                        out.propagate(outAssembly); 

                } finally { 
                        // clear the outMessage 
                        outMessage.clearMessage(); 
                } 
		 } 
}