//本类需要引入的类或接口
import java.rmi.RemoteException;
import java.util.Properties;
import javax.ejb.CreateException;
import javax.ejb.RemoveException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
/**
* 这是EJB的客户端测试程序
*/
public class HelloClient {
private static final String JNDI_NAME = "HelloHome";
private String url;
private HelloHome home;
public HelloClient(String url)
throws NamingException
{
this.url = url;
home = lookupHome();
}
void test()
throws RemoteException,CreateException
{
Hello hello = (Hello) PortableRemoteObject.narrow(home.create(), Hello.class);
System.out.println("I am in client. "+hello.sayHello());
}
/**
* 运行这个实例:
* java HelloClient t3://localhost:7001
*/
public static void main(String[] args) throws Exception {
System.out.println("\n客户端程序测试开始...\n");
String url = "t3://localhost:7001";
// 解析命令行
if (args.length != 1) {
System.out.println("用法: java HelloClient t3://hostname:port");
return;
} else {
url = args[0];
}
HelloClient client = null;
try {
client = new HelloClient(url);
} catch (NamingException ne) {
System.exit(1);
}
try {
client.test();
} catch (Exception e) {
System.exit(1);
}
System.out.println("\n客户端程序测试结束...\n");
}
/**
* 查找 EJB 的主接口
*/
private HelloHome lookupHome()
throws NamingException
{
Context ctx = getInitialContext();
Object home = ctx.lookup(JNDI_NAME);
return (HelloHome) PortableRemoteObject.narrow(home, HelloHome.class);
}
/**
* 使用属性对象获取上下文
*/
private Context getInitialContext() throws NamingException {
Properties h = new Properties();
h.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
h.put(Context.PROVIDER_URL, url);
return new InitialContext(h);
}
}
Hello.java
//本接口需要引入的类或接口
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
//定义远程接口,必须继承EJBObject
public interface Hello extends EJBObject {
//定义业务逻辑方法
public String sayHello()
throws RemoteException;
}
HelloBean.java
//本类需要引入的类或接口
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
//实现业务逻辑,必须实现SessionBean接口
public class HelloBean implements SessionBean {
//这是个会话EJB,声明会话上下文
private SessionContext ctx;
//声明字符串
private String words;
//接口SessionBean中定义的方法,必须实现
public void setSessionContext(SessionContext ctx) {
this.ctx = ctx;
}
//接口SessionBean中定义的方法,必须实现
public void ejbActivate() {
}
//接口SessionBean中定义的方法,必须实现
public void ejbPassivate() {
}
//接口SessionBean中定义的方法,必须实现
public void ejbRemove() {
}
//和主接口定义对应的方法,必须实现
public void ejbCreate() throws CreateException {
words = "Hello World";
}
//供客户端调用的业务逻辑方法,这里只简单的打印字符串,并把字符串返回到客户端
public String sayHello()
{
System.out.println("I am in an EJB of Server ."+words);
return words;
}
}
HelloHome.java
//本接口需要引入的类或接口
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
//定义主接口,必须继承EJBHome
public interface HelloHome extends EJBHome {
//定义EJB创建方法
Hello create() throws CreateException, RemoteException;
}
ejb-jar.xml
images/green-cube.gif
images/orange-cube.gif
MyFirstEJB
HelloHome
Hello
HelloBean
Stateless
Container
MyFirstEJB
Remote
*
Required
weblogic-ejb-jar
MyFirstEJB
100
HelloHome
程序都在这里了!!!