Notice the SyncOrderService.
I deploy the BPM app and check out the ejb in the JNDI tree -
There it is, last in the list.
I now create an ejb jar to package up the EJB from the BPM App -
The jar will include the SyncBPMProcessPortType which we will leverage in the EJB client.
I then created a new project and added the jar to it -
I created a class with the following code -
package niallcsimpleordersejbserviceclient;
import com.example.loanaudit.Order;
import com.oracle.xmlns.bpmn.bpmnprocess.syncbpmprocess.Start;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.math.BigDecimal;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import syncbpmprocess.bpmnprocess.bpmn.com.oracle.xmlns.SyncBPMProcessPortType;
public class SimpleOrdersEJBClient {
public SimpleOrdersEJBClient() {
super();
}
public String initiateProcessByEJB() throws NamingException,
NoSuchMethodException,
Throwable {
System.out.println("initiateProcessByEJB()");
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://localhost:7001");
Context ctx;
ctx = new InitialContext(ht);
Proxy proxy;
// preparing the method to be called on the remote EJB
proxy = (Proxy)ctx.lookup("ejb/SyncOrderProcess");
Method method;
method =
SyncBPMProcessPortType.class.getDeclaredMethod("start", new Class[] { Start.class });
Start myStart = new Start();
Order myOrder = new Order();
myOrder.setCustCountry("IE");
myOrder.setCustEmail("n@c.com");
myOrder.setCustFirstName("Niall");
myOrder.setCustLastName("C");
myOrder.setExportRestriction("N");
myOrder.setOrderNr("123");
myOrder.setProduct("i");
myOrder.setQuantity(12);
myOrder.setSupplier("ORCL");
myOrder.setUnitPrice(new BigDecimal("199.99"));
myStart.setOrder(myOrder);
//
InvocationHandler handler = Proxy.getInvocationHandler(proxy);
handler.invoke(proxy, method, new Object[] { myStart });
return "ok";
}
}
As you can see instantiate a proxy for our EJB, create the required payload(Order) and then
invoke the start method - which is the EJB service exposure of the BPM process start activity.
I then create a Servlet that will call this client -
package niallcsimpleordersejbserviceclient;
import java.io.IOException;
import java.io.PrintWriter;
import javax.naming.NamingException;
import javax.servlet.*;
import javax.servlet.http.*;
public class TestServlet extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=windows-1252";
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out;
String str = "INIT";
out = response.getWriter();
try{
SimpleOrdersEJBClient client = new SimpleOrdersEJBClient();
str = client.initiateProcessByEJB();
}
catch (Throwable e) {
}
out.println("");
out.println("TestServlet ");
out.println("");
out.println("The servlet has received a GET. This is the reply .
");
");
out.println("
out.close();
}
}
I deploy the Servlet to my AdminServer and test - I then check em to see that a new instance has been created.
No comments:
Post a Comment