Enterprise JavaBean 笔记:JBoss安装与配置
记得刚上大学不久,学 Java 的时候,就曾经听说过 Enterprise JavaBean 了,但一直没有试用过,因为,从这个名字看来,很容易和 JavaBean 混淆。而在 Enterprise JavaBean 介绍中提到的分布式、可伸缩的网络模块的时候,又显然和作为对象数据存取规范的 JavaBean 规范不同。Enterprise JavaBean 更像是一个遵循 JavaBean 规范的网络服务提供者。一直以来用PHP来开发网站,对 Java 这边规范的 MVC 开发模式还是颇为羡慕。而这个学期就开始 EJB 的旅程了~
这个系列博客大概会持续讨论关于 Enterprise JavaBean 的问题,欢迎大家提出意见。 :-)
环境选择:
这里选择 NetBeans + JBoss AS 5.1 作为开发环境。选择 JBoss AS 5.1 是因为课程需要,其实 NetBeans + Glassfish 的组合可能更好。
- JBoss AS 5.1:可以在http://sourceforge.net/projects/jboss/files/JBoss/JBoss-5.1.0.GA找到,下载后解压即可。
- Netbeans 7.2:可以在http://www.netbeans.org下载NetBeans 7.2 for Java EE(按提示安装即可,其中可以选择安装安装包带上的Glassfish 3.2.2,Java EE 6兼容服务器)。
配置:
NetBeans安装成功后,如果开始时选择了Glassfish,那么已经有一个Java EE 6兼容服务器。不过,这里选择课堂要求的JBoss Application Server 5.1。
- 在NetBeans的服务器平台上,点击“工具”->“服务器”。
- 在服务器窗口点击“添加服务器”,按提示添加“JBoss Application Server”,选择JBoss的安装根目录即可。
-
启动JBoss AS 5.1,如果出现“java.lang.IllegalArgumentException: Wrong arguments. new for target java.lang.reflect.Constructor expected=[java.net.URI] actual=[java.io.File]”的提示,大多是因为注入AttachmentStore类的时候没有指定注入类型导致。
编辑%JBOSS_HOME%/server/default/conf/bootstrap/profile.xml文件:…… <bean name="AttachmentStore" class="org.jboss.system.server.profileservice.repository.AbstractAttachmentStore"> <constructor> <parameter> <inject bean="BootstrapProfileFactory" property="attachmentStoreRoot" /> </parameter> </constructor> ……
修改<parameter>标签为:
…… <parameter class="java.io.File"> ……
即可。
测试:
-
新建 EJB 模块。新建 Stateless Session Bean(无状态会话Bean),新建向导创建Local(本地)接口的无状态会话 Bean,添加一个 Bussiness Method (在编辑区域内,按 alt + Insert,即弹出生成代码框,选择 NetBeans 的原因一部分就是因为 NetBeans 挺方便的代码生成功能)。
代码看起来像:package hello.greeting; import javax.ejb.Stateless; @Stateless public class Greeting implements GreetingLocal { public String greet(String name) { return "Hello, " + name + "!"; } }
接口如下:
package hello.greeting; import javax.ejb.Local; @Local public interface GreetingLocal { public String greet(String name); }
-
新建 Web 应用程序项目,编辑项目属性,添加 上面创建的 EJB 模块到 Libraries (库)中,不需要包括在编译包中。这里只是为了让这个 Web 应用程序知道会话 Bean 的接口而已。
编辑 index.jsp,在空白处添加对 EJB 的引用:
<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@page import="javax.naming.*" %> <% InitialContext context = new InitialContext(); GreetingLocal bean = (GreetingLocal) context.lookup("Greeting/local"); out.println(bean.greet("Jack")); %>
- 发布 EJB 模块和 Web 应用程序来测试吧~