参考博客:http://www.micmiu.com/j2ee/ejb/eclipse-jboss-ejb-demo/
https://blog.csdn.net/taiyangdao/article/details/50826865
http://www.zzqq.org/p/0326280574d92f13b11c3bce0eb785b0.html 最后 遇到问题 部分
一、Eclipse安装 Wildfly 10服务器
下载Wildfly 10 在eclipse中 配置 Server Runtime Environments
二、创建Server
File → New → Other → Server → Wildfly 10.0
三、创建EJB工程
File → New → Other … → EJB → EJB Project
输入工程名字,下面默认。
【Next】→【Next】(选中 Generate ejb-jar.xml deployment descriptor)→【Finish】
目录如下:
ejbModule就是编写JAVA源码的地方(即EJB代码)
在ejbModule 目录上右键【New】→【Other…】→【EJB】→ Session Bean(EJB 3.x)
→【Next】输入包名:com.micmiu.ejb、EJB类名:HelloWorld ,选中 Remote选项 →【Finish】.
自动生成两个类:HelloWorldRemote.java
这里添加了方法
接口类 需要打jar包 后面客户端访问的时候会用到
package com.micmiu.ejb;
import javax.ejb.Remote;
@Remote
public interface HelloWorldRemote {
String sayHello(String username);
}
HelloWorld.java
这是实现类
实现接口类方法
package com.micmiu.ejb;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
/**
* Session Bean implementation class HelloWorld
*/
@Stateless
@LocalBean
public class HelloWorld implements HelloWorldRemote {
/**
* Default constructor.
*/
public HelloWorld() {
// TODO Auto-generated constructor stub
}
@Override
public String sayHello(String username) {
// TODO Auto-generated method stub
return "Hello," + username + " welcome to EJB.";
}
}
四、部署
两种方式:
1、eclipse中启动wildfly服务器 server start
查看console 获取JNDI路径
第一行标注的是客户端访问用到的JNDI路径,只有准确写入之后才可以访问到ejb对象。
2、将EJB工程打包 放到wildfly 的server中
( 我电脑路径是:E:\ews\wildfly-10.1.0.Final\standalone\deployments )
再运行:E:\ews\wildfly-10.1.0.Final\bin 中的 standalone.bat
其中第二行才是需要的JNDI路径 原因:
HelloWorldRemote 接口类中有@Remote注解 才可以找到
分析路径:EJB-HelloWorld/HelloWorld!com.micmiu.ejb.HelloWorldRemote
EJB-HelloWorld 是ejb项目的名字,是编译部署到wildfly的名字,HelloWorld是你注解name的ejb名字,com.micmiu.ejb.HelloWorldRemote是@Remote注解的完整路径。
EJB工程在服务器的部署任务完成,接下来就是创建客户端对其进行访问。
五、创建客户端工程
1、创建java 类
File → New → Other … → Java Project
接下来很关键,需要添加两个jar包。这里是理解EJB的重点,一个是接口类jar包,说明请求访问EJB的哪个具体方法,具体实现方法 在这里不需要单独打包,部署的时候已经把整个EJB工程打包过了放到服务器上了,其中包括具体实现。
再一个就是 wildfly的Client的jar包,应该是client和wildfly的沟通规则,我理解是相当于对方的电话号码。
2、将EJB工程中的接口类 Export -> jar包 ,添加到客户端工程classpath中
3、添加wildfly Client的jar包 (E:\ews\wildfly-10.1.0.Final\bin\client)
这里存在两个 jboss-client.jar 和 jboss-cli-client.jar 测试发现 jboss-client.jar是必须的 第二个不知道有啥用 都添进去也不影响
4、创建客户端测试类 HelloWorldTest
package com.ews.ejb;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.micmiu.ejb.HelloWorldRemote;
public class HelloWorldTest {
public static void main(String[] args) throws NamingException {
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
props.put(Context.PROVIDER_URL, "http-remoting://localhost:8081");
props.put("jboss.naming.client.ejb.context", true);
InitialContext context = new InitialContext(props);
//JNDI路径 查看控制台输出文件 @remote 注解的
String fullEJBName = "EJB-HelloWorld/HelloWorld!com.micmiu.ejb.HelloWorldRemote";
HelloWorldRemote helloWorld = (HelloWorldRemote) context.lookup(fullEJBName);
System.out.println(helloWorld.sayHello("wls"));
}
}
其中 Properties 为常规配置
fullEJBName 为前面从控制台中获取到的JNDI的路径,通过该路径成功获取到ejb对象。
设置JNDI上下文参数
JNDI上下文的参数与使用的远程JNDI类型相关。具体可以分为http-remoting方式和ejb方式2种。
ejb方式测试以后报错,所以这里使用 http-remoting方式,来实现客户端通过JNDI远程调用EJB的方法
六、测试
前面已经启动了wildfly 服务器(两种方法都可以)
再运行客户端,成功打印如下: