前提条件, 到oracle官网上下载weblogic10安装文件并安装, 然后使用Configuration Wizard创建一个最最最普通的domain, 然后启动weblogic server.
1 新建一个普通的java project 命名为myEJB3, 新建一个ejb project也可以, 但我认为没必要, 反而生成一些让新手摸不着门的文件;
2 添加bea-10.2/wlserver_10.0/server/lib(若bea版本不同则目录略有差异)目录下的wlclient.jar, weblogic.jar, api.jar, wls-api.jar到classpath, 这些jar包只是为了让EJB程序编译通过, 在打包ejb的时候不需要它们.
3 新建一个包, 你想咋命名就咋命名, 比如com.mypkg1.mypkg2.ejb, 写一个接口HelloWorld, 它包含一个业务方法:
4 新建一个类HelloWorldBean 实现这个接口, 同时我们通过注解表明这是一个Stateless的Remote接口为HelloWorld的EJB, 它的jndi name 为HelloWorldBean(可以随便指定).
5 EJB像jsp一样需要部署在容器下才能提供服务, 现在用eclipse提供的export工具把这个项目导出为jar包, 只选中HelloWorld.java和HelloWorldBean.java,其他文件忽略, 导出文件可取名为Hello.jar.
6 到http://localhost:7001/console部署这个Hello.jar并激活它, 完了之后你会发现容器能够自动识别里面的ejb.
至此, 如果没有出错, 则ejb已经在容器里面准备接受请求了. 现在写一个控制台的java程序来调用这个ejb. 在weblogic10下的ejb客户端程序要使用wlfullclient.jar, 否则会抛出一写莫名其妙的错误. 因为在写EJB程序的时候用到一些weblogic的jar包, 而测试程序需要用到wlfullclient.jar, 为了不和以前的jar包产生冲突, 我把测试程序写在另外一个java project里面. 前提条件是要导入wlfullclient.jar, 但是你会发现weblogic里面没有带wlfullclient.jar, 需要自己生成:
1 cd C:/bea-10.2/wlserver_10.0/server/lib (若bea版本不同则目录略有差异)
2 java -jar ../../../modules/com.bea.core.jarbuilder_1.0.1.0.jar(若bea版本不同则jarbuilder.jar的版本略有差异略有差异,到../../../modules目录下看一看就知道了)
如此则在lib目录下生成wlfullclient.jar, 文件比较大, 60M.
测试程序如下:
成功!
困扰过我的两个问题:
1 客户端程序一定要确保你用的是wlfullclient.jar里面的类, 否则出现的错误让你找不着北, 我最后是在oracle官网上找到的解释.
2 注意jndi name 不同的容器(如jboss)的jndi name写法可能有差异, 你可以通过http://localhost:7001/console/consolejndi.portal?_nfpb=true&_pageLabel=JNDIHomePage&server=AdminServer 查看你部署的ejb的jndi绑定名.