在Web系统和EJB整合的过程中,比较麻烦的经历就是打包、部署了。搞不好就会报出异常信息。如果想让web顺利调用EJB组件,必须将web项目、ejb项目分别导出相关的包,之后再结合起来形成一个EAR包,应用服务器认识这个东西,和部署一般的EJB组件(打成jar)一样,将ear包丢到${JBOSS_HOME} \server\default\deploy下面即可。ear的结构是:
1:0――n个war包(web项目)
2:0――n个jar包(EJB组件类)
3:META-INF文件夹:里面是application.xml文件,该文件描述了war和jar的部署信息。
我的myear.ear内容如下
?
META-INF里面的application.xml内容如下
<?xml version="1.0" encoding="UTF-8"?> <application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd"> ? <display-name>ear</display-name> ? <module id="myeclipse.1298296534181"> ??? <web> ????? <web-uri>JavaEE4StrutsEJB.war</web-uri> ????? <context-root>/JavaEE4StrutsEJB</context-root> ??? </web> ? </module> ? <module id="myeclipse.1296557119812"> ??? <web> ????? <web-uri>JavaEE4Jboss.war</web-uri> ????? <context-root>/JavaEE4Jboss</context-root> ??? </web> ? </module> ? <module id="myeclipse.1298296534571"> ??? <ejb>earEJB.jar</ejb> ? </module> </application> |
红色字体是描述web项目的war部署情况,蓝色字体描述的是EJB组件的部署jar包。有了这个配置文件,应用服务器就会根据这个配置文件部署相关组件块。注:很多人使用MyEclipse集成JBoss,直接将web项目发布到JBoss上面(就像之前做Web项目发布到Tomcat上面似的),实际上在JavaEE6标准下,支持此标准的应用服务器(比如JBoss6就已经支持了)是可以如此部署的,实际上JavaEE6在部署上更简单了,一个war里面包含EJB组件,在应用服务器上就可以直接部署此EJB组件。
在MyEclipse中打ear包的步骤大致如下:
1,建立一个Enterprise Application Project;
?
2,选择新建空的EJB组件项目和新建空web项目此处只是方便打包项目后的application.xml内容生成,并没其他的含义;
3,选中Enterprise Application Project项目导出ear包;
?
4,将自己的web项目导出war包;
5,将EJB组件项目导出jar包;
6,用rar方式打开ear包,将刚才生成的war包和jar包拷贝到此ear下面,按实际情况修改一下META-INF/application.xml里面的内容;
7,将此ear部署到JBoss下面,重启服务器,即完成了部署。
这里还要罗嗦一句就是在打包的时候一定记住war包中绝对不能包含任何EJB组件类,否则,在EJB组件注入的时候会发生
javax.ejb.EJBException: java.lang.IllegalArgumentException: Wrong target. class异常。一般是将war包中的关于EJB组建的class类直接删除掉再放入到ear包中。而EJB组件中包含web层的类倒是没什么关系。