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/j2eehttp://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
相关文章推荐
- rmi经典实例---远程调用简单实现方式
- 【经典实例】利用C#反射动态编译代码,创建类的实例,并调用其成员
- js调用后台servlet方法实例
- Tomcat请求处理(七) - Servlet实例的调用
- 【图文经典版】声明式调用服务SpringCloud之Feign实例讲解
- servlet调用ejb的build.xml
- 关于jsp或servlet在weblogic中调用ejb
- oracle存储过程学习经典[语法+实例+调用]
- jboss 中JSP或SERVLET调用EJB问题
- Java 调用 Rest api 设置经典 Linux 虚拟机的实例启停
- 今天在Eclipse中建立Servlet中调用EJB成功!
- oracle存储过程学习经典[语法+实例+调用]
- Java 调用 Rest api 设置经典 Linux 虚拟机的实例启停
- oracle存储过程学习经典[语法+实例+调用]
- Servlet调用SQL Server2000存储过程实例
- Java 调用 Rest api 设置经典 Linux 虚拟机的实例启停
- Java 调用CMD 命令行 经典实例
- Java 调用 Rest api 设置经典 Linux 虚拟机的实例启停
- js调用后台servlet方法实例
- Android之ksoap2-android详解与调用天气预报Webservice完整实例