EJB和JSP, Servlet
EJB是J2EE规范的一部分,如果要完全的掌握EJB需要对J2EE规范有详细的了解.限于本书的题目,在这里我将只介绍EJB,以及EJB和JSP, SERVLET的关系和运用。关于J2EE的其他部分,可以在其他地方获取资料,或者访问JAVA.SUN.COM/J2EE。
在这一部分,我将首先介绍EJB的概念,然后分别介绍SESSION BEAN, ENTITY BEAN, 接着介绍EJB和JSP, SERVLET如何共同使用,最后,给出一个完整的例子。
一、两个简单的例子
要编译、运行这两个例子,你需要安装J2SE, J2EE, 以及ANT.J2SE 可以到JAVA.SUN.COM/J2SE 下载。J2EE 可以到JAVA.SUN.COM/J2EE 下载。ANT 可以到JAKARTA.APACHE.ORG下载。安装并且按手册设置好环境以后,就可以开始了。
看一个简单的例子, 先来看看代码:
Converter.java:
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Converter extends EJBObject {
public double dollarToYen(double dollars)
throws RemoteException;
public double yenToEuro(double yen)
throws RemoteException;
}
ConverterClient.java
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import Converter;
import ConverterHome;
public class ConverterClient {
public static void main(String[] args) {
try {
Context initial = new InitialContext();
Object objref = initial.lookup
("java:comp/env/ejb/SimpleConverter");
ConverterHome home =
(ConverterHome)PortableRemoteObject.narrow(objref,
ConverterHome.class);
Converter currencyConverter = home.create();
double amount = currencyConverter.dollarToYen(100.00);
System.out.println(String.valueOf(amount));
amount = currencyConverter.yenToEuro(100.00);
System.out.println(String.valueOf(amount));
} catch (Exception ex) {
System.err.println("Caught an unexpected exception!");
ex.printStackTrace();
}
}
}
ConverterEJB.java:
import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class ConverterEJB implements SessionBean {
public double dollarToYen(double dollars) {
return dollars * 121.6000;
}
public double yenToEuro(double yen) {
return yen * 0.0077;
}
public ConverterEJB() {}
public void ejbCreate() {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sc) {}
} // ConverterEJB
ConverterHome.java:
import java.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface ConverterHome extends EJBHome {
Converter create() throws RemoteException, CreateException;
}
定义Remote Interface:
Converter.java:
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Converter extends EJBObject {
public double dollarToYen(double dollars)
throws RemoteException;
public double yenToEuro(double yen) throws RemoteException;
}
|
Remote Interface定义的是客户端可以调用的方法。在这里,我们可以看到,Remote interface继承的是EJBObject, 所有的EBJ remote interface 必须继承EJBObject interface,并且定义该EJB的方法,remote interface提供了客户端能够调用的EJB 对象的方法。
定义Home Interface:
ConverterHome.java:
import java.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface ConverterHome extends EJBHome {
Converter create() throws RemoteException, CreateException;
}
|
EJBHome interface被所有的EJB home继承。一个EJB home interface定义了客户端可以create, find, remove EJB对象的方法。每个ejb都有一个home interface. 这个home interface必须继承EJBHome.在这个例子中,只继承了EJBHome, 并定义了create 方法。
下面是EJB的核心部分,即EJB类的定义。在这个类里面,定义了ejb能完成的工作。这个bean实现了两个方法,分别是dollarToYen 和yenToEuro, 从名字上可以知道功能分别是把美元转换成人民币,和把人民币转换成为欧元。
ConverterEJB.java:
import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class ConverterEJB implements SessionBean {
public double dollarToYen(double dollars) {
return dollars * 121.6000;
}
public double yenToEuro(double yen) {
return yen * 0.0077;
}
public ConverterEJB() {}
public void ejbCreate() {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sc) {}
}
|
这个ejb是一种session bean,关于session bean, 我将在后面详细介绍。SessionBean是以EnterpriseBean为基类的一种bean, 而每个bean都必须以EnterpriseBean为基类。需要注意的是,这个ConverterEJB implements了SessionBean, SessionBean是一个Interface,定义了很多方法,所以,在implements的时候,必须同时实现所有的SessionBean中定义的方法,比如上面,
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一篇:
EJB和JSP, Servlet(二)Session Bean
下一篇:
Jboss下配置EJB
【文章评论】
【收藏本文】
【推荐好友】
【打印本文】
【我要投稿】 【论坛讨论】