经历了被EJB、JBOSS这两个重量级庞然大物的无情蹂躏加上相关资料的严重缺乏的双重考验之后,终于把EJB的demo跑起来了。
现在就来说一下这小小的开发实例小教程吧。个人小站:http://muscle1990.com/?p=271
1.配置开发环境:
JDK任选;
eclipse任选;
JBOSS建议jboss-4.2.1.GA。百度直接就可以找到RED-HAT的官网下载,我就不贴了。
理论上新版的都可以,只不过我之前折腾得有阴影了。。。
2.配置JBOSS_HOME并跑起来
解压jboss-4.2.1.GA到你喜欢的目录,建议目录名不要有空格,不要有中文。
打开环境变量,添加“JBOSS_HOME”,值为安装目录,如“C:\dev\jboss-4.2.1.GA”,引号是木有的!
打开JBOSS_HOME/bin看到run,bat,双击启动jboss。
也可以在cmd中cd到该目录,运行“run”,或者"run -c all"。
没有报错并且看到如下界面的话,基本就是安装成功了。
浏览器打开:http://localhost:8080/ (sure你8080端口没有被占用),可以看到jboss的欢迎页面。
这样基本就是启动成功了。
3.创建EJB项目:
1)在eclipse中新建java项目,名字自己喜欢,我的叫“HelloWorld”,你懂的。
2)引入JBOSS_HOME/client中的jbossall-client.jar.
2)新建名为HelloWorld的接口,实例代码如下:
/* * @author 莫仕豪 * moshihao@gmail.com muscle1990.com * @version:2013-5-7 上午1:11:04 * */ public interface HelloWorld { public String sayHello(String name); }
新建名为HelloWorldBean的无状态会话bean
import javax.ejb.Remote; import javax.ejb.Stateless; /* * @author 莫仕豪 * moshihao@gmail.com muscle1990.com * @version:2013-5-7 上午1:12:23 * */ @Stateless @Remote({HelloWorld.class}) public class HelloWorldBean implements HelloWorld{ public String sayHello(String name){ return name+"这是Muscle的第一个EJB case!"; } }
接下来就是将项目Export成为jar文件
位置放到JBOSS_HOME\server\all\deploy\目录下
ok,如无意外,你的JBOSS控制台应该会有所响应了
02:13:53,083 INFO [EJBContainer] STARTED EJB: HelloWorldBean ejbName: HelloWorl dBean 02:13:53,136 INFO [EJB3Deployer] Deployed: file:/C:/dev/jboss-4.2.1.GA/server/a ll/deploy/HelloWorld.jar
如果没有的话,关闭JBOSS,CMD到JBOSS_HOME\bin目录下,控制台输入 run -c all,理论上就可以解决了。
接下来我们去http://localhost:8080/jmx-console/看看。
选择service=JNDIView,看到
点击invoke,进入找到最后,可以看到
恭喜你,成功了一大半了。
4.创建测试程序。
在原项目新建任意类,实例如下:
import java.util.Properties; import javax.naming.InitialContext; import javax.naming.NamingException; /* * @author 莫仕豪 * moshihao@gmail.com muscle1990.com * @version:2013-5-7 上午1:26:09 * */ public class HelloWorldTest { public static void main(String args[]){ HelloWorld helloworld; try{ Properties props =new Properties(); props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory"); props.setProperty("java.naming.provider.url","localhost:1099"); props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces"); InitialContext ctx=new InitialContext(props); helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote"); System.out.print(helloworld.sayHello("HelloWorld,")); }catch (NamingException e){ e.printStackTrace(); } } }
run,如无意外可以看到控制台输出:
HelloWorld,这是Muscle的第一个EJB case!
理论上这个EJB 小测试就成功了,简单而又粗暴地通过EJB 、JBOSS,利用JNDI访问远程接口就成功实现了。