Java EE6 Overview
View more presentations from pelegri.
package com.mt.ejb;
import javax.ejb.Stateless;
@Stateless(mappedName = "CalculatorBean")
public class CalculatorBean implements CalculatorRemote {
public int add(int a, int b) {
return a + b;
}
}


package com.mt.client;
import com.mt.ejb.CalculatorRemote;
import java.util.Hashtable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.transaction.UserTransaction;
public class WeblogicTest {
private final Logger log = Logger.getLogger(WeblogicTest.class.getName());
public WeblogicTest() {
}
public void callRemoteEJB() {
InitialContext context = null;
UserTransaction transaction = null;
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
env.put(Context.SECURITY_PRINCIPAL, "weblogic");
env.put(Context.SECURITY_CREDENTIALS, "weblogic");
try {
context = new InitialContext(env);
transaction = (UserTransaction) context.lookup("javax.transaction.UserTransaction");
if (transaction != null) {
log.info("in transaction context.");
try {
CalculatorRemote calculator = (CalculatorRemote) context.lookup("CalculatorBean#com.mt.ejb.CalculatorRemote");
transaction.begin();
int result = calculator.add(3, 5);
transaction.commit();
log.info("add=" + result);
} catch (Exception ex) {
ex.printStackTrace();
try {
transaction.rollback();
} catch (Exception ex1) {
log.log(Level.SEVERE, "Can't rollback transaction.", ex1);
}
}
} else {
log.info("transaction context is null.");
}
} catch (NamingException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
WeblogicTest test = new WeblogicTest();
test.callRemoteEJB();
}
}
It is necessary to add the CalculatorBean EJB jar file and the wlclient.jar to build the above client code. The wlclient.jar can be usually found into folder \server\lib of our Weblogic server.
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
env.put(Context.SECURITY_PRINCIPAL, "weblogic");
env.put(Context.SECURITY_CREDENTIALS, "weblogic");
I look-up the initial context and get the UserTransaction from Weblogic's JTS:context = new InitialContext(env);
transaction = (UserTransaction) context.lookup("javax.transaction.UserTransaction");
I lookup and call the remote EJB by enclosing the method invocation in transaction:CalculatorRemote calculator = (CalculatorRemote) context.lookup("CalculatorBean#com.mt.ejb.CalculatorRemote");
transaction.begin();
int result = calculator.add(3, 5);
transaction.commit();
The lookup string "CalculatorBean#com.mt.ejb.CalculatorRemote" makes the trick, it is the Weblogic syntax to identify the Bean and its Remote interface.