ECLIPSE 建立分布式 EJB 项目的基本过程.docx
《ECLIPSE 建立分布式 EJB 项目的基本过程.docx》由会员分享,可在线阅读,更多相关《ECLIPSE 建立分布式 EJB 项目的基本过程.docx(22页珍藏版)》请在冰豆网上搜索。
![ECLIPSE 建立分布式 EJB 项目的基本过程.docx](https://file1.bdocx.com/fileroot1/2022-12/31/a4888d28-d081-4359-a5c3-eb53e4df73cd/a4888d28-d081-4359-a5c3-eb53e4df73cd1.gif)
ECLIPSE建立分布式EJB项目的基本过程
ECLIPSE建立分布式EJB项目的基本过程
环境要求
ØEclipseJavaEE(version3.6)
ØJDK1.6
ØJBOSS5.1.0
ØTOMCAT6.0.14
设计拓扑
步骤
1.建立/部署EJBSERVER项目
1.1建立EJBSERVER项目
点完成
1.2写入服务端源代码
点完成
自动生成的源代码如下:
package.sample;
importjavax.ejb.Remote;
@Remote
publicinterfaceHelloServiceRemote{
}
package.sample;
importjavax.ejb.Local;
@Local
publicinterfaceHelloServiceLocal{
}
package.sample;
importjavax.ejb.Stateless;
/**
*SessionBeanimplementationclassHelloService
*/
@Stateless
publicclassHelloServiceimplementsHelloServiceRemote,HelloServiceLocal{
/**
*Defaultconstructor.
*/
publicHelloService(){
//TODOAuto-generatedconstructorstub
}
}
加入我们的一个测试方法getHello()和addNum()
package.sample;
importjavax.ejb.Remote;
@Remote
publicinterfaceHelloServiceRemote{
publicStringgetHello(Stringname);
publicIntegeraddNum(Integerx,Integery);
}
package.sample;
importjavax.ejb.Local;
@Local
publicinterfaceHelloServiceLocal{
publicStringgetHello(Stringname);
publicIntegeraddNum(Integerx,Integery);
}
package.sample;
importjavax.ejb.Stateless;
/**
*SessionBeanimplementationclassHelloService
*/
@Stateless
publicclassHelloServiceimplementsHelloServiceRemote,HelloServiceLocal{
/**
*Defaultconstructor.
*/
publicHelloService(){
//TODOAuto-generatedconstructorstub
}
publicStringgetHello(Stringname){
return"Hello"+name;
}
publicIntegeraddNum(Integerx,Integery){
returnx+y;
}
}
1.3部署服务端源代码
将项目导出成JAR包,然后拷贝到JBOSS部署目录下
点browser,选中导出的目的地---JBOSS的部署目录
也可以导出到桌面上,然后COPY入JBOSS的部署目录
总之,结果是
启动JBOSS
可以在ECLIPSE里启动,也可以直接到JBOSS/bin目录下启动JBOSS
可以看到下面的启动日志
10:
38:
41,781INFO[JBossASKernel]Addedbean(jboss.j2ee:
jar=helloEJBServer.jar,name=HelloService,service=EJB3)toKernelDeploymentof:
helloEJBServer.jar
10:
38:
41,796INFO[EJB3EndpointDeployer]DeployAbstractBeanMetaData@18ddef7{name=jboss.j2ee:
jar=helloEJBServer.jar,name=HelloService,service=EJB3_endpointbean=org.jboss.ejb3.endpoint.deployers.impl.EndpointImplproperties=[container]constructor=nullautowireCandidate=true}
10:
38:
42,234INFO[SessionSpecContainer]Startingjboss.j2ee:
jar=helloEJBServer.jar,name=HelloService,service=EJB3
10:
38:
42,250INFO[EJBContainer]STARTEDEJB:
.sample.HelloServiceejbName:
HelloService
10:
38:
42,468INFO[JndiSessionRegistrarBase]BindingthefollowingEntriesinGlobalJNDI:
HelloService/remote-EJB3.xDefaultRemoteBusinessInterface
HelloService/remote-.sample.HelloServiceRemote-EJB3.xRemoteBusinessInterface
HelloService/local-EJB3.xDefaultLocalBusinessInterface
HelloService/local-.sample.HelloServiceLocal-EJB3.xLocalBusinessInterface
检查部署情况,访问http:
//localhost:
8080,点击进入JMXConsole
再点击进入service=JNDIView
在JNDIVIEW界面下,在list行,点击invoke按钮
可以在列出bean里面,在GlobalJNDINamespace下,看到部署上去的HelloServicebean和它的remote接口和local接口
2.建立/部署EJBCLIENT(客户端)项目
2.1建立EJBCLIENT项目
建议一个普通的WAR包项目(ECLIPSE下的DynamicWebProject项目)
2.2导入JBOSSEJB客户端库入项目buildpath
到JBOSS工作目录下的client子目录
将里面的所有文件都拷贝入WAR包的WEB-INF/lib目录下
2.3将服务端项目里的接口文件拷入客户端项目(当然更正规的做法是做成jar包放入buildpath)
注意:
1.只拷接口,不要拷实现类
2.不仅接口名不能变化,包名也不能变化,要保持一致
2.4建立EJBAPPLICATION客户端测试代码(可以直接命令行执行的客户端)
package.sample.testclient;
importjava.util.Hashtable;
importjavax.naming.Context;
importjavax.naming.InitialContext;
importjavax.naming.NamingException;
import.sample.HelloServiceRemote;
publicclassTestAppClient{
/**
*@paramargs
*@throwsNamingException
*/
publicstaticvoidmain(String[]args){
Hashtableproperties=newHashtable();
//配置驱动程序,JBoss特定的
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
//配置jndiURL,这个URL格式没有规定,各个服务器各自一套
properties.put(Context.PROVIDER_URL,"jnp:
//localhost");
try{
InitialContextctx=newInitialContext(properties);
HelloServiceRemotedao=
(HelloServiceRemote)ctx.lookup("HelloService/remote");
System.out.println(dao.getHello("mac2"));
System.out.println("3+13="+dao.addNum(3,13));
ctx.close();
}catch(NamingExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
执行这个程序(RunasJavaApplication)
Hellomac2
3+13=16
2.5建立EJBWEB客户端测试代码(可以网页客户端)
在WebContent下建立jsp文件
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
<%@pageimport="java.util.*,
javax.naming.Context,
javax.naming.InitialContext,
javax.naming.NamingException,
.sample.HelloServiceRemote"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
Inserttitlehere<%
Hashtableproperties=newHashtable();
properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
properties.put(Context.PROVIDER_URL,"jnp:
//127.0.0.1");
try{
InitialContextctx=newInitialContext(properties);
HelloServiceRemotedao=(HelloServiceRemote)ctx.lookup("HelloService/remote");
out.println(dao.getHello("mac2")+"
");
out.println("3+13="+dao.addNum(3,13));
ctx.close();
}catch(NamingExceptione){
e.printStackTrace();
}
%>
将项目加载到TOMCAT下
注意:
由于服务端项目是加载到JBOSS下,因此等于一台机器同时起两个应用服务器,有可能出现8080端口冲突,需要将TOMCAT的端口改成别的,避免和JBOSS的8080冲突
测试,访问http:
//localhost:
8190/helloEJBClient/hello.jsp
2.6建立EJBWEBMVC客户端测试代码(以简单的SERVLET代替)
本来想做个struts2的例子,但考虑要增加很多步骤,与本文力求简单初级使用的宗旨不符.所以这里以基础的servlet代替(尽管现在已经很少有人用servlet了)
建立servlet类
package.sample.testjsp.servlet;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.util.Hashtable;
importjavax.naming.Context;
importjavax.naming.InitialContext;
importjavax.naming.NamingException;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
import.sample.HelloServiceRemote;
@SuppressWarnings("serial")
publicclassHelloServiceServletextendsHttpServlet{
@Override
protectedvoiddoGet(HttpServletRequestreques,HttpServletResponseresponse)
throwsServletException,IOException{
this.doPost(reques,response);
}
@Override
protectedvoiddoPost(HttpServletRequestreques,HttpServletResponseresponse)
throwsServletException,IOException{
System.out.println("doPost");
PrintWriterout=response.getWriter();
Hashtableproperties=newHashtable();
//配置驱动程序,JBoss特定的
properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
//配置jndiURL,这个URL格式没有规定,各个服务器各自一套
properties.put(Context.PROVIDER_URL,"jnp:
//localhost");
try{
InitialContextctx=newInitialContext(properties);
HelloServiceRemotedao=
(HelloServiceRemote)ctx.lookup("HelloService/remote");
out.println(dao.getHello("macServlet")+"
");
out.println("3+13="+dao.addNum(3,13));
ctx.close();
}catch(NamingExceptione){
e.printStackTrace();
}
}
}
TOMCAT重启
测试,访问http:
//localhost:
8190/helloEJBClient/HelloWorldServlet