用户操作
[即时聊天] [发私信] [加为好友]
余俊ID:sheepfish
2284次访问,排名2万外,好友0人,关注者0人。
sheepfish的文章
原创 4 篇
翻译 0 篇
转载 0 篇
评论 24 篇
最近评论
Greateway:微软采用的是内部的PCM,一个更重量级的过程
SilentAcorn:不错,有启发
文章分类
    收藏
      相册
      存档
      软件项目交易
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创 JBOSS初次实践收藏

      新一篇: 与MSF有关的两个问题  | 旧一篇: Apache2+Tomcat4的配置

      http://www.channel7.cn/2004/12-20/18426-4.html

      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:\JBOSS\myproject\jsp\hello.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:\JBOSS\myproject\src 目录,新建一个 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:\JBOSS\myproject\src 目录,新建一个 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:\JBOSS\myproject\src 目录中,新建一个 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:\JBOSS\myproject\ejb\client 目录,用记事本新建一个 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:\JBOSS\myproject\jsp\hello.war\WEB-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:\JBOSS\myproject\ejb\hello.jar\META-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:\JBOSS\BIN 目录下,新建一个 com.bat 文件,内容如下:

      set classpath=.;c:\j2sdk1.4.1_01\lib\tools.jar;C:\JBOSS\client\jbossall-client.jar;C:\JBOSS\client\jboss-client.jar;C:\JBOSS\client\jboss-iiop-client.jar;C:\JBOSS\server\default\lib\jnpserver.jar;C:\JBOSS\client\jnp-client.jar;C:\JBOSS\client\log4j.jar;C:\JBOSS\client\jboss-j2ee.jar; C:\JBOSS\server\all\lib\javax.servlet.jar

      javac %1

      同样在此目录新建一个 runclient.bat ,用于运行客户端程序,内容如下:

      set classpath=.;c:\j2sdk1.4.1_01\lib\tools.jar;C:\JBOSS\client\jbossall-client.jar;C:\JBOSS\client\jboss-client.jar;C:\JBOSS\client\jboss-iiop-client.jar;C:\JBOSS\server\default\lib\jnpserver.jar;C:\JBOSS\client\jnp-client.jar;C:\JBOSS\client\log4j.jar;C:\JBOSS\client\jboss-j2ee.jar; C:\JBOSS\server\all\lib\javax.servlet.jar

      java %1

      五、编译和运行测试程序
      1、 进入 C:\JBOSS\myproject\src 目录中,运行 :

      com *.java

      将产生一系列 .class 文件。

      2、 将产生的 HelloWorld.class 和 HelloServlet.class 拷贝到 C:\JBOSS\myproject\jsp\hello.war\WEB-INF\classes\hello 目录中。

      3、 将产生的 HelloHome.class 和 HelloClient.class 和 Hello.class 文件放入 C:\JBOSS\myproject\ejb\client\hello\ejb 目录中

      4、 将产生的 Hello.class 和 HelloBean.class 和 HelloHome.class 和 HelloLocal.class 和 HelloLocalHome.class 放入 C:\JBOSS\myproject\ejb\hello.jar\hello\ejb 目录中。

      至此,我们己经完成了所有类的编译,并将它们放入到适当的地方,目前为止,文件和目录分布结构如下图所示:

      这时,我们将 myproject 下 ejb 目录中的 hello.jar 目录和 jsp 下的 hello.war 目录拷贝到

      C:\JBOSS\server\all\deploy 下。

      这时启动 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:\JBOSS\myproject\ejb\client 运行:

      Runclient hello/ejb/HelloClient

      发表于 @ 2006年01月11日 16:54:00|评论(loading...)|编辑

      新一篇: 与MSF有关的两个问题  | 旧一篇: Apache2+Tomcat4的配置

      评论:没有评论。

      发表评论  


      当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
      Csdn Blog version 3.1a
      Copyright © sheepfish