1、下载jboss:http://www.jboss.org/jbossas/downloads/
本项目的jboss版本是:6.1.0.Final jboss-as-distribution-6.1.0.Final.zip
2、配置jboss环境变量:JBOSS_HOME= E:webServerjboss-as-distribution-6.1.0.Final
path添加jboss路径:;%JBOSS_HOME%in
在E:webServerjboss-as-distribution-6.1.0.Finalin目录下,点run.bat,或者在cmd中输入run,如果不出现异常,说明配置成功。
3、Myeclipse安装jboss, 选择 jboss-home-directory 的路径: E:webServerjboss-as-distribution-6.1.0.Final ,这里注意不能带bin目录
找到JBOSS 的 Paths : appendto classpath -- ADD DIR 添加jboss的bin目录:E:webServerjboss-as-distribution-6.1.0.Finalin
(另:其改jboss端口 在D:jboss-4.2.3.GAserverdefaultdeployjboss-web.deployerserver.xml中将8080改为其它)
4、创建一个EJB服务端项目:ejbdemo , 导入ejb注解所需要的包:jboss-ejb3-ext-api.jar 和 jboss-ejb3-ext-api-impl.jar
写一个接口MyEjb和实现类MyEjbImpl,如下:
MyEjb.java:
package demo.myejb.service; public interface MyEjb { public String hello(); }
package demo.myejb.service.impl; import javax.ejb.Remote; import javax.ejb.Stateless; import org.jboss.ejb3.annotation.RemoteBinding; import demo.myejb.service.MyEjb; @Stateless //无状态会话bean @Remote({MyEjb.class}) //指定远程调用 的接口类 该注解在javaee.jar中
////@Local({MyEjb2.class}) // 指定本地调用 的接口类 , 两个项目需在一个VM上方可调用 @RemoteBinding(jndiBinding="helloRemote") //给jndi取别名,本类的jndi默认名称是:MyEjbImpl/remote , 该注解在jboss-ejb3-ext-api.jar中
////@LocalBinding(jndiBinding="hello2Local") //给jndi取别名,默认是:MyEjbImpl/local public class MyEjbImpl implements MyEjb { public String hello() { System.out.println("ejb demo print .... "); return "ejb demo!"; } }
5、将ejbdemo服务端项目中的接口类MyEjb.java打包 : myejb.jar , 客户端调用接口时会用到该包
6、创建客户端项目:ejbclient
7、在src目录下创建jndi.properties文件,内容如下:
# DO NOT EDIT THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING ###new factory name远程实例化工厂的名字 java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory ##remote package path远程调用类的包路径 java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces ###remote class server path调用类的服务器路径 ##localhost:8080 is not run , must locahost java.naming.provider.url=localhost
8、将E:webServerjboss-as-distribution-6.1.0.Finalclient目录下的jar全部导入进来,且把刚才打包的接口:myejb.jar导入进来
9、编写main测试调用接口:
package ejb.test; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import demo.myejb.service.MyEjb; public class EjbClient { public static void main(String[] args) { try { Hashtable map = new Hashtable(); map.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); map.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces"); map.put("java.naming.provider.url", "localhost"); //相当于beanfactory 实例化封装的类 InitialContext ic = new InitialContext(map); /** * 实例InitialContext有两种方式 * 1、将属性值放到Hashtable中,传进去new InitialContext(map); * 2、在src下创建jndi.properties文件,将属性保存在Propertis文件中 ,直接 new InitialContext();即可 */ //得到远程的MyEjbImpl类,MyEjbImp/remote是服务器中MyEjb和MyEjbImpl的发布的Jndi名称 // MyEjb tg =(MyEjb) ic.lookup("MyEjbImpl/remote"); MyEjb client =(MyEjb) ic.lookup("helloRemote"); String ss = client.hello() ; //远程调用EJB服务端的方法 System.out.println("====="+ss); } catch (NamingException e) { e.printStackTrace(); } } }
10、运行main方法,会输出:==ejb demo