## 使用eclipse和wildfly-10.1.0.Final感受EJB的魅力 ##
EJB的设计目标与核心应用是部署分布式应用程序。就是把已经编写好的程序打包放在服务器上执行。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。
下面我们来一起来体验一下EJB吧!
工欲善其事,必先利其器。
首先需要下载eclipse(笔者使用的是j2ee):下载地址
其次需要下载jboss服务器(笔者使用的是wildfly-10.1.0.Final)下载地址(注:不需要下载jbossEAP(Enterprise Application Platform)版本,下载完成后解压缩即可)
1.开发HelloWorldEJB
1)首先File->New->Java Project创建EJB程序,name:HelloWorld,选择合适的JRE后点击Finish,如下图所示:
2)Project Explorer->HelloWorldEJB->src->new->package,包名为com.jacksenma.ejb,点击Finish,如下图所示:
3)在编写EJB代码前,需要先引入一个jar包(笔者使用的是javax.ejb-3.1.2.2.jar)下载地址,下载完成后HelloWorldEJB->Build Path->Configure Build Path->add External JARs引入javax.ejb-3.1.2.2.jar,点击OK即可,如下图所示:
4)在com.jacksenma.ejb包中建立一个名为HelloWorldRemote的接口文件,声明一个返回值为String的sayHello(String s)方法,代码如下:
package com.jacksenma.ejb;
import java.io.Serializable;
import javax.ejb.Remote;
@Remote
public interface HelloWorldRemote extends Serializable {
public String sayHello(String s);
}
此处需要注意的是,由于我们定义的是@Remote(远程访问方式),客户端和服务器之间进行通信的时候,数据需要序列化之后以传值的方式传输。与@Loacl(本地访问方式)的传址方式不同。
5)在com.jacksenma.ejb包中建立一个名为HelloWorld的class文件实现HelloWorldRemote接口,实现sayHello方法,代码如下:
package com.jacksenma.ejb;
import javax.ejb.Stateless;
/**
* Session Bean implementation class HelloWorld
*/
@Stateless
public class HelloWorld implements HelloWorldRemote {
/**
*
*/
private static final long serialVersionUID = 4956121584680672430L;
/**
* Default constructor.
*/
public HelloWorld() {
// TODO Auto-generated constructor stub
}
@Override
public String sayHello(String s) {
// TODO Auto-generated method stub
return "Hello World! My name is "+s;
}
}
5)至此,HelloWorldEJB(即EJB代码部分)就完成了,接下来将HelloWorldEJB部署到jboss服务器上。部署的方式有两种,一种是将HelloWorldEJB项目add到eclipse的jboss中再start,但是要装jboss的相关tools,这里介绍第二种:HelloWorldEJB->Export->JAR file->Next->Browse(选择路径为jboss安装目录的standalone下的deployments文件夹中,如D:\wildfly-10.1.0.Final\standalone\deployments\HelloWorldEJB.jar)取名为HelloWorldEJB(这里jar包的名称在客户端查询EJB的时候要用到),点击Finish完成,如下图所示:
2.开发HelloWorldClient
完成了HelloWorldEJB部分的代码编写和部署,接下来编写HelloWorldClient客户端程序来调用部署好的HelloWorldEJB
1)和之前一样,先创建一个名为HelloWorldClient程序,在src中建立名为client的包,如下图所示:
2)在client包中建立EJBFactory文件,用来通过jndi查找获得EJB,代码如下:
package client;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class EJBFactory {
public static Object getEJB(String jndipath) {
try {
final Hashtable<String, Object> jndiProps = new Hashtable<String, Object>();
jndiProps.put("jboss.naming.client.ejb.context", true);
jndiProps.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProps);
return context.lookup(jndipath);
} catch (NamingException e) {
e.printStackTrace();
}
return null;
}
}
3)建立客户端和HelloWorldEJB之间的联系,即将HelloWorldEJB中的He’llWorldRemote接口文件导出成JAR file,然后在HelloWorldClient中的Build Path中add External JARs来引入刚刚导出的jar文件(导出和引入jar文件上文已经提及,这里不再赘述),如图所示:
4)导入JNDI Remote Client需要的JAR包,位置在jboss安装目录下\bin\client\jboss-client.jar,如图所示:
5)在类路径(这里是src)下创建JNDI Remote EJB Client需要的properties(jboss-ejb-client.properties),如下图所示:
jboss-ejb-client.properties中的内容如下:
endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port=8080
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.two.host=localhost
remote.connection.two.port = 8080
remote.connection.two.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
6)在client包中创建testEJB文件,代码如下:
package client;
import com.jacksenma.ejb.HelloWorldRemote;
public class testEJB {
public static void main(String[] args) {
HelloWorldRemote hello = (HelloWorldRemote)EJBFactory.getEJB("ejb:/HelloWorldEJB/HelloWorld!com.jacksenma.ejb.HelloWorldRemote?stateless");
System.out.println(hello.sayHello("jacksenma"));
}
}
注意这里EJBFactory.getEJB(“ejb:/HelloWorldEJB/HelloWorld!com.jacksenma.ejb.HelloWorldRemote?stateless”)中括号内的内容可以概括成:ejb:/[导入到deployments文件夹下的jar包名称]/[Bean名称]![接口全名]?[bean类型]
3.启动jboss,运行客户端
1)启动jboss,双击jboss安装目录\bin\standalone.bat,运行jboss,如下图所示:
2)运行客户端的testEJB,显示成功信息如下图所示:
3)到此我们的EJB初体验就结束了,感兴趣的小伙伴可以自己体验一下哦^_^