您的位置:首页 > 其它

win2k环境下基于JBOSS的J2EE开发实践----之一初始基础

2008-04-25 08:33 686 查看
win2k环境下基于JBOSS的J2EE开发实践
        之一:初始基础开发环境的配置与测试
说明: 此节针对 ejb 开发初学者,主要是手动配置一个最基本的基于文本开发的环境,让初学者从头开始编写各类程序和配置文件,以更清楚的了解 EJB 开发和部署的步聚与原理。这是作者在学习 EJB 开发时的一个总结,欢迎指正。作者联系地址址: josserchai@yahoo.com

一、需求软件列表及下载地址

1、 Sun Java SDK ,我们采用的版本为: j2sdk1.4.1_01 ,下载地址为: http://www.sun.com/download/ ,下载后的文件名为: j2sdk-1_4_1_01-windows-i586.exe 2、 JBOSS ,一个免费的 EJB 容器。我们采用版本为: JBOSS-3.2.1_tomcat-4.1.24 ,这是一个内部己集成 Tomcat 的 EJB 容器。下载地址为: JBOSS.org/">http://www.JBOSS.org/ ,下载后的文件名为: JBOSS-3.2.1_tomcat-4.1.24.zip 。 3、 注意:作者只保证在以上软件版本下以下步聚成功,对于其它的版本也应相同,但作者没有求证。以下步聚请严格按照执行。

二、安装所需软件

1、 安装 SDK 到 C:j2sdk1.4.1_01 ;方法为:双击执行下载的 j2sdk-1_4_1_01-windows-i586.exe 文件,选择安装目录为 C:j2sdk1.4.1_01 ,其它默认即可。 2、 安装 JBOSS ;方法为:将下载的 JBOSS-3.2.1_tomcat-4.1.24.zip 文件解压到任意一个目录,解压后会在此目录中产生一个 JBOSS-3.2.1_tomcat-4.1.24 文件夹,在此文件夹下有一系列的文件和文件夹。然后在 C 盘根目录下建一个 JBOSS 目录,并将刚才解压后 JBOSS-3.2.1_tomcat-4.1.24 文件夹下的一系列文件和文件夹全都拷贝到 C : JBOSS 目录下。即将 JBOSS 安装到了 C:JBOSS 目录中。 3、 以上两个步聚进行后,文件夹如下图所示:

三、配置运行环境及测试程序目录

一、设置环境变量 1、 设置 JAVA_HOME 系统变量:在 win2k 下方法为,在桌面上右键点击“我的电脑”,选择属性,然后在弹出的页面上点“高级” -> “环境变量”,然后在弹出的页面中“系统变量”下点击“新建”,然后在弹出的窗口中“变量名 (N) 输入“ JAVA_HOME ”,在“变量值 (V) ”一栏中输入“ C:j2sdk1.4.1_01 ”。
2、 以同样的方法设置: JBOSS_HOME 值为: C:JBOSS 3、 以同样的方法在上面地方将 Path 的值后追加:以下内容:“ C:j2sdk1.4.1_01in;C:JBOSSin ” 二、创建程序目录 1、 在 C:JBOSS 下新建一个 myproject 目录,用于存放自己的所有项目。 2、 在 myproject 目录下新建三个目录:一个是 jsp 目录,其下用于存放所有的 jsp 文件和 servlet 文件及其它的 html , image 文件等;一个是 ejb 目录,用于存放所有即将发布的 EJB 类文件;一个是 src 目录,用于存放所有的 java 源文件。 3、 在 jsp 目录下新建一个目录,并命名为: hello.war ,用来发布 WEB 程序,然后再在此目录下新建一系列文件夹:即在 hello.war 下新建 WEB-INF (大写)文件夹,再在 WEB-INF 下新建 classes 文件夹,再在 classes 文件夹下新建一个 hello 文件夹。 4、 在 ejb 目录下新建一个 client 目录和一个 hello.jar 目录,分别用于存放 EJB 客户端和要发布的服务器端类。然后再在 client 目录下新建一个 hello 目录,再在此目录下新建一个 ejb 目录。然后在 hello.jar 目录下新建一个 hello 目录和一个 META-INF( 大写 ) 目录,并在 hello 目录中新建一个 ejb 目录。 5、 以上过程结束后,形成的目录结构如下图所示:

四、编写测试程序及相关脚本

一、 测试 JBOSS 安装成功与否,方法如下:进入 C : JBOSS 目录中,执行 run.bat –c all 启动具有全部功能的 JBOSS 配置服务器。屏幕经过一会滚动后不再滚动。这时启动 IE 输入: http://localhost:8080/jmx-console/index.jsp 即可看到 IE 中出现一系列列表,即表明 JBOSS 启动成功。此时可在启动 JBOSS 的 DOS 窗口上按 Ctrl+C 关闭 JBOSS 服务器。 二、 进入 C:JBOSSmyprojectjsphello.war 目录中,用记事本新建一个 index.jsp 文件,内容如下:用于测试 jsp 程序 <%@page contentType="text/html; charset=gb2312"%> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body bgcolor="#FFFFFF" text="#000000" topmargin="5"> <% String hello = "Hello world!this created by jsp file!"; out.println(hello); %> </body> </html> 三、 进入 C:JBOSSmyprojectsrc 目录,新建一个 HelloWorld.java ,是一个 Servlet 类,内容如下: package hello; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<hr>"); out.println("Hello World! This is created by Servlet!"); out.println("<hr>"); } } 到此,我们就建立好了用于测试的 JSP 文件和 Servlet 类,下面将建 HelloWorld 的无状态 SessionBean 。 四、 进入 C:JBOSSmyprojectsrc 目录,新建一个 Hello.java 文件,以实现 EJB 的 Remote 接口,内容如下, package hello.ejb; /** * Remote interface for Enterprise Bean: Hello * Remote 接口 */ public interface Hello extends javax.ejb.EJBObject { /** * 唯一的方法 hello ,向客户端返回问候。 */ public String hello() throws java.rmi.RemotEException; } 同样在此目录中新建一个 HelloLocal.java 文件,实现 Local 接口,内容如下: package hello.ejb; import javax.ejb.EJBLocalObject; public interface HelloLocal extends EJBLocalObject { public String hello(); } 同样在此目录中新建一个 HelloHome.java 文件,实现 Home 接口,内容如下: package hello.ejb; /** * Home interface for Enterprise Bean: Hello * Home 接口 */ public interface HelloHome extends javax.ejb.EJBHome{ /** * Creates a default instance of Session Bean: Hello */ public Hello create() throws javax.ejb.CreatEException, java.rmi.RemotEException; } 同样在此目录中新建一个 HelloLocalHome.java 文件,实现 LocalHome 接口,内容如下: package hello.ejb; import javax.ejb.EJBLocalHome; public interface HelloLocalHome extends EJBLocalHome { HelloLocal create() throws javax.ejb.CreatEException; } 同样在此目录中新建一个 HelloBean.java ,实现 EJB 类,内 [ 容如下: package hello.ejb; /** * Bean implementation class for Enterprise Bean: Hello */ public class HelloBean implements javax.ejb.SessionBean{ private javax.ejb.SessionContext mySessionCtx; /** * getSessionContext */ public javax.ejb.SessionContext getSessionContext(){ return mySessionCtx; } /** * setSessionContext */ public void setSessionContext(javax.ejb.SessionContext ctx){ mySessionCtx = ctx; } /** * ejbActivate */ public void ejbActivate(){ } /** * ejbCreate */ public void ejbCreate() throws javax.ejb.CreatEException{ } /** * ejbPassivate */ public void ejbPassivate(){ } /** * ejbRemove */ public void ejbRemove(){ } /** * 商务方法 */ public String hello(){ return "Hello,World! this is created by EJB!"; } } 至此,我们己经将 EJB 类所需的所有的所有类编写好了,下面我们编写用于测试此 EJB 程序的文件,具体来说有两个:一个是用客户端 Servlet 来调用 EJB ,另一个是用客户端类来调用 EJB 。实现如下: 五、 实现测试 EJB 的程序 进入 C:JBOSSmyprojectsrc 目录中,新建一个 HelloServlet.java 文件,用于测试通过 Servlet 调用 EJB 。内容如下: package hello; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import javax.ejb.*; import javax.naming.InitialContext; import javax.naming.Context; import hello.ejb.*; import java.util.*; public class HelloServlet extends HttpServlet { private HelloHome home; public void init() throws ServletException { try { String initCtxFactory = getInitParameter(Context.INITIAL_CONTEXT_FACTORY); String providerURL = getInitParameter(Context.PROVIDER_URL); Properties env = new Properties(); if(initCtxFactory!=null) { env.put(Context.INITIAL_CONTEXT_FACTORY,initCtxFactory); } if(providerURL!=null) { env.put(Context.PROVIDER_URL,providerURL); } Context ctx=new InitialContext(env); Object objRef = ctx.lookup("Hello"); // 主接口 home=(HelloHome)javax.rmi.PortableRemoteObject.narrow(objRef,hello.ejb.HelloHome.class); }catch(javax.naming.NamingException ne){ System.out.println("Create Exception caught:"+ne); throw new ServletException(ne.toString()); }catch(Exception e) { throw new ServletException(e.toString()); } } public void service(HttpServletRequest req,HttpServletResponse res) throws IOException { res.setContentType("text/html"); PrintWriter out =res.getWriter(); out.println("<html><head><title>the first EJB</title></head>"); try{ // 组件接口 Hello bean =home.create(); out.println(bean.hello()); }catch(javax.ejb.CreatEException ce){ out.println("Create Exception caught:"+ce); ce.printStackTrace(out); }catch(java.rmi.RemotEException re){ out.println("Remote Exception caught:"+re); re.printStackTrace(out); } out.println("</body></html>"); } } 同样在此目录中,新建一个 HelloClient.java 文件,用于通过客户端类测试 EJB ,内容如下: package hello.ejb; import java.util.*; import java.io.*; import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject; import javax.naming.Context; import javax.rmi.PortableRemoteObject; import hello.ejb.*; public class HelloClient { public static void main(String[] args) { try { //jndi 配置 , 应实现为外部属性文件 Properties env = new Properties(); //config.properties 文件应该放在和 hello 包目录所在目录的同级目录中。即它和 hello 文件夹同在一个文件夹中。 env.load(new FileInputStream("config.properties")); // Get a naming context System.out.println(env); InitialContext ctx = new javax.naming.InitialContext(env); System.out.println("Got context"); // Get a reference to the Interest Bean //JBOSS 默认 jndi 名为 ejb-jar.xml 中的 :ejb-name Object ref = ctx.lookup("Hello"); System.out.println("Got reference"); // Get a reference from this to the Bean"s Home interface HelloHome home = (HelloHome)PortableRemoteObject.narrow(ref, HelloHome.class); // Create an Hello object from the Home interface Hello hello = home.create(); // call the hello() method System.out.println(hello.hello()); }catch(Exception e) { System.out.println(e.toString()); } } } 然后,我们还需增加一个此客户端程序运行时所需的 JNDI 配置文件。方法如下: 进入 : C:JBOSSmyprojectejbclient 目录,用记事本新建一个 config.properties 文件,内容如下三行: java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs=org.JBOSS.naming:org.jnp.interfaces java.naming.provider.url=jnp://192.168.10.114:1099 六、 编写服务器端的配置文件, 首先进入 C:JBOSSmyprojectjsphello.warWEB-INF 目录,用记事本创建一个 web.xml 文件,用于配置 servlet ,内容如下: <?xml version="1.0" encoding="gb2312"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>HelloWorld</servlet-name> <display-name>HelloWorld</display-name> <servlet-class>hello.HelloWorld</servlet-class> </servlet> <servlet> <servlet-name>HelloServlet</servlet-name> <display-name>HelloServlet</display-name> <servlet-class>hello.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern> </servlet-mapping> </web-app> 然后进入 C:JBOSSmyprojectejbhello.jarMETA-INF 目录,创建一个 ejb-jar.xml 文件,内容如下: <?xml version="1.0" encoding="gb2312"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <description>This is Hello EJB example</description> <display-name>helloEEJB</display-name> <enterprise-beans> <session> <display-name>Hello</display-name> <ejb-name>Hello</ejb-name> <home>hello.ejb.HelloHome</home> <remote>hello.ejb.Hello</remote> <local-home>hello.ejb.HelloLocalHome</local-home> <local>hello.ejb.HelloLocal</local> <ejb-class>hello.ejb.HelloBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> </ejb-jar> 在此目录中,再建一个 JBOSS-service.xml 文件,内容如下: <?xml version="1.0" encoding="gb2312"?> <JBOSS> <enterprise-beans> <session> <ejb-name>Hello</ejb-name> <jndi-name>Hello</jndi-name> </session> <secure>true</secure> </enterprise-beans> <reource-managers/> </JBOSS> 七、 到此为止,我们将所有的测试文件和配置文件己编写完成。 八、 下面我们编写编译这些类文件的脚本程序,进入 C:JBOSSBIN 目录下,新建一个 com.bat 文件,内容如下: set classpath=.;c:j2sdk1.4.1_01lib ools.jar;C:JBOSSclientJBOSSall-client.jar;C:JBOSSclientJBOSS-client.jar;C:JBOSSclientJBOSS-iiop-client.jar;C:JBOSSserverdefaultlibjnpserver.jar;C:JBOSSclientjnp-client.jar;C:JBOSSclientlog4j.jar;C:JBOSSclientJBOSS-j2EE.jar; C:JBOSSserveralllibjavax.servlet.jar javac %1 同样在此目录新建一个 runclient.bat ,用于运行客户端程序,内容如下: set classpath=.;c:j2sdk1.4.1_01lib ools.jar;C:JBOSSclientJBOSSall-client.jar;C:JBOSSclientJBOSS-client.jar;C:JBOSSclientJBOSS-iiop-client.jar;C:JBOSSserverdefaultlibjnpserver.jar;C:JBOSSclientjnp-client.jar;C:JBOSSclientlog4j.jar;C:JBOSSclientJBOSS-j2EE.jar; C:JBOSSserveralllibjavax.servlet.jar java %1

五、编译和运行测试程序

1、 进入 C:JBOSSmyprojectsrc 目录中,运行 : com *.java 将产生一系列 .class 文件。 2、 将产生的 HelloWorld.class 和 HelloServlet.class 拷贝到 C:JBOSSmyprojectjsphello.warWEB-INFclasseshello 目录中。 3、 将产生的 HelloHome.class 和 HelloClient.class 和 Hello.class 文件放入 C:JBOSSmyprojectejbclienthelloejb 目录中 4、 将产生的 Hello.class 和 HelloBean.class 和 HelloHome.class 和 HelloLocal.class 和 HelloLocalHome.class 放入 C:JBOSSmyprojectejbhello.jarhelloejb 目录中。 至此,我们己经完成了所有类的编译,并将它们放入到适当的地方,目前为止,文件和目录分布结构如下图所示:

这时,我们将 myproject 下 ejb 目录中的 hello.jar 目录和 jsp 下的 hello.war 目录拷贝到
C:JBOSSserveralldeploy 下。 这时启动 JBOSS 的工作台自动会发布此两个目录。我们便可以测试了。 启动 JBOSS : run.bat –c all 用 IE 打开 http://localhost:8080/hello/index.jsp 测试 JSP 文件 用 IE 打开 http://localhost:8080/hello/HelloWorld 测试 Serlvet 用 IE 打开 http://localhost:8080/hello/HelloServlet 测试用 Servlet 调用 EJB 然后进入 C:JBOSSmyprojectejbclient 运行: Runclient hello/ejb/HelloClient 如下图所示:即成功了!具体目录结构及源代请见附件 myproject.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: