您的位置:首页 > 其它

servlet 调用 EJB 经典实例!

2008-07-11 13:12 225 查看
/*文件结构:

EJB端:

EJBFolderName

|

|------classes

||

||-------hello

|||---------hello.class//Remote

|||---------helloHome.class//Home

|||---------helloBean.class//Bean

||

||--------META-INF

||----------------ejb-jar.xml//EJB配置文件

||----------------MANIFEST.MF//Manifest-Version:1.0Class-Path:

|

|

|-----------src

|

|-------hello

||---------hello.java//Remote

||---------helloHome.java//Home

||---------helloBean.java//Bean

|

|--------META-INF

|----------------ejb-jar.xml//servlet配置文件

|----------------MANIFEST.MF//Manifest-Version:1.0Class-Path:

servlete端:

ServletFolderName

|

|----------src

||-------hello

|||--------TestEJB.java//被Servlet(只为目标清晰,也可直接写到Servlet内)

||

||-------TestEJBServlet.java//一个Servlet调用包hello中的方法。

|

|

|----------WebRoot

|----------META-INF

||--------MANIFEST.MF//Manifest-Version:1.0Class-Path:

|

|----------WEB-INF

|----------classes

||-----------TestEJBServlet.class

||

||-----------hello

||----------TestEJB.class

|-----------lib

||----------FirstEJB.jar//EJB打好的一个Jar包!EJB2.0不可缺少

|

|------------web.xml//Servlet配置文件

基本文件结构就是这样。结束!

*/

下面是针对每个文件的详细说明:

//首先是Servlet端,Servlet有一个servlet文件,实现doGet方法和doPost方法,还有一个Servlet配置文件web.xml

//TestEJBServlet.java:

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importhello.TestEJB;

publicclassTestEJBServletextendsHttpServlet{

protectedvoiddoGet(HttpServletRequestarg0,HttpServletResponsearg1)throwsServletException,IOException{

this.doPost(request,response);//直接以页面的形式调用Servlet调用的事doGet方法,

//也可以直接在doGet方法中调用EJB

}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse){

try{

newTestEJB("iiop://localhost:2809/").test();//调用TestEJB.java中的test()方法。

}catch(Exceptione){

e.printStackTrace();

}

}

}

//TestEJB.java:

packagehello;

importjavax.naming.Context;

importjava.util.Properties;

importjavax.naming.NamingException;

importjavax.naming.InitialContext;

importjavax.rmi.PortableRemoteObject;

importjava.rmi.RemoteException;

importjavax.ejb.CreateException;

publicclassTestEJB{

privatestaticfinalStringJNDI_NAME="HelloEJB";//EJB上传websphere时用的JNDIName

privateStringurl;

privateHelloHomehome;

publicTestEJB(Stringurl)throwsNamingException{

this.url=url;

home=lookUpHome();

}

privateContextgetInitialContext()throwsNamingException{

Propertiesprop=newProperties();

prop.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");

prop.put(Context.PROVIDER_URL,url);

returnnewInitialContext(prop);

}

privateHelloHomelookUpHome()throwsNamingException{

Contextctx=getInitialContext();

Objecthome=ctx.lookup(JNDI_NAME);

return(HelloHome)PortableRemoteObject.narrow(home,HelloHome.class);

}

publicvoidtest()throwsRemoteException,CreateException,NamingException{

Hellohello=(Hello)PortableRemoteObject.narrow(home.create(),Hello.class);

System.out.println(hello.sayHello());

}

/*publicstaticvoidmain(Stringargs[])throwsException{

try{

newTestEJB("iiop://localhost:2809/").test();

}catch(Exceptione){

e.printStackTrace();

}

}*/

}

//Servlet配置文件web.xml

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appversion="2.4"

xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>

<servlet-name>TestEJB</servlet-name>

<servlet-class>TestEJBServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>TestEJBServlet</servlet-name>//Servlet映射到web服务器上的名字

<url-pattern>/servlet/TestEJBServlet</url-pattern>//Servlet映射到web服务器上的路径

</servlet-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>//默认开始页面(可有可无)

</welcome-file-list>

</web-app>


接下来是EJB端:三个java文件(Home.java,Remote.java,Bean.java)和一个ejb-jar配置文件

helloHome.java(就是Home.java本地接口)

packagehello;

importjava.rmi.RemoteException;

importjavax.ejb.CreateException;

importjavax.ejb.EJBHome;

publicinterfaceHelloHomeextendsEJBHome{

publicHellocreate()throwsCreateException,RemoteException;

}


hello.java(就是Remote.java远程接口)
packagehello;

importjava.rmi.RemoteException;

importjavax.ejb.EJBObject;

publicinterfaceHelloextendsEJBObject{

publicStringsayHello()throwsRemoteException;

}
helloBean.java(就是Bean.java实现类)
packagehello;

importjava.rmi.RemoteException;

importjavax.ejb.EJBException;

importjavax.ejb.CreateException;

importjavax.ejb.SessionBean;

importjavax.ejb.SessionContext;

publicclassHelloBeanimplementsSessionBean{

privateSessionContextctx;

privateStringwords;

publicStringsayHello(){

System.out.println("iaminanEJBserver."+words);

returnwords;

}

publicvoidejbCreate()throwsCreateException{

this.words="helloworld";

}

publicvoidejbActivate()throwsEJBException,RemoteException{

//TODOAuto-generatedmethodstub

}

publicvoidejbPassivate()throwsEJBException,RemoteException{

//TODOAuto-generatedmethodstub

}

publicvoidejbRemove()throwsEJBException,RemoteException{

//TODOAuto-generatedmethodstub

}

publicvoidsetSessionContext(SessionContextarg0)throwsEJBException,

RemoteException{

this.ctx=arg0;

}

}


还有一个配置文件ejb-jar.xml

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEejb-jarPUBLIC"-//SunMicrosystems,Inc.//DTDEnterpriseJavaBeans2.0//EN""http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar>

<display-name>HelloEjb</display-name>

<enterprise-beans>

<session>

<ejb-name>FirstEJB</ejb-name>

<home>hello.HelloHome</home>

<remote>hello.Hello</remote>

<ejb-class>hello.HelloBean</ejb-class>

<session-type>Stateless</session-type>

<transaction-type>Container</transaction-type>

</session>

</enterprise-beans>

<assembly-descriptor>

<container-transaction>

<method>

<ejb-name>FirstEJB</ejb-name>

<method-intf>Remote</method-intf>

<method-name>*</method-name>

</method>

<trans-attribute>Required</trans-attribute>

</container-transaction>

</assembly-descriptor>

</ejb-jar>

调用方法:Http://localhost:9080/Context(上下文节点)/servlet/TestEJBServlet
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: