科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Jboss4.x下第一个EJB2.x程序

Jboss4.x下第一个EJB2.x程序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

EJB的名声很不好,尤其在Spring框架出现以后,而EJB3似乎脱胎换骨了。而我现在学习的仍然是EJB2,原因是EJB3的书很难找。

作者:中国IT实验室 来源:中国IT实验室 2007年9月6日

关键字: JBoss

  • 评论
  • 分享微博
  • 分享邮件
EJB的名声很不好,尤其在Spring框架出现以后,而EJB3似乎脱胎换骨了。而我现在学习的仍然是EJB2,原因是EJB3的书很难找。暑假时大概把《精通EJB》和《EJB》这两本书看过一下,现在想复习,加深理解,就从第一个HelloWorld开始。
 
文件结构:
 
E:.
│ build.xml
└─src
    ├─META-INF
          application.xml
          ejb-jar.xml
          jboss.xml
   
    ├─powerwind
          ClientServlet.java
          Hello.java
          HelloBean.java
          HelloHome.java
   
    └─WEB-INF
            jboss-web.xml
            web.xml
 
ant文件
build.xml
<?xml version="1.0"?>
<project name="Hello" default="prepare" basedir=".">
 
    <property environment="env" />
    <property name="src.dir" value="${basedir}/src" />
    <property name="jboss.home" value="${env.JBOSS_HOME}" />
    <property name="build.dir" value="${basedir}/build" />
    <property name="classes.dir" value="${build.dir}/classes" />
    <property name="dist.dir" value="${basedir}/dist" />
 
    <path id="compile.classpath">
       <pathelement location="${classes.dir}" />
       <fileset dir="${jboss.home}/client">
           <include name="jboss-j2ee.jar" />
           <include name="javax.servlet.jar" />
           <include name="commons-httpclient.jar" />
       </fileset>
    </path>
 
    <target name="prepare">
       <mkdir dir="${classes.dir}" />
       <mkdir dir="${dist.dir}" />
       <copy todir="${build.dir}">
           <fileset dir="${src.dir}">
              <include name="WEB-INF/*.xml" />
              <include name="META-INF/*.xml" />
           </fileset>
       </copy>
    </target>
 
    <target name="clean">
       <delete dir="${build.dir}" />
       <delete dir="${dist.dir}" />
    </target>
 
    <target name="compile" depends="prepare">
       <javac srcdir="${src.dir}" destdir="${classes.dir}">
           <classpath refid="compile.classpath" />
       </javac>
    </target>
 
    <target name="jar" depends="compile">
       <jar destfile="${dist.dir}/HelloEJB.jar">
           <fileset dir="${build.dir}">
              <exclude name="META-INF/application.xml" />
              <include name="META-INF/*.xml" />
           </fileset>
           <fileset dir="${classes.dir}">
              <include name="**/*.class" />
           </fileset>
       </jar>
    </target>
 
    <target name="war" depends="jar">
       <jar destfile="${dist.dir}/HelloEJB.war">
           <fileset dir="${build.dir}">
              <include name="WEB-INF/*.xml" />
           </fileset>
       </jar>
    </target>
 
    <target name="ear" depends="war">
       <jar destfile="${dist.dir}/HelloEJB.ear">
           <fileset dir="${dist.dir}">
              <include name="HelloEJB.jar" />
              <include name="HelloEJB.war" />
           </fileset>
           <fileset dir="${build.dir}">
              <include name="META-INF/application.xml" />
           </fileset>
       </jar>
    </target>
 
    <target name="deploy" depends="ear">
       <copy file="${dist.dir}/HelloEJB.ear" overwrite="true"
           todir="${jboss.home}/server/default/deploy" />
    </target>
 
</project>
java源文件
Hello.java
package powerwind;
 
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
 
publicinterface Hello extends EJBObject {
    public String sayHello() throws RemoteException;
}
 
HelloHome.java
package powerwind;
 
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
 
publicinterface HelloHome extends EJBHome {
    public Hello create() throws RemoteException, CreateException;
}
 
HelloBean.java
package powerwind;
 
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
 
publicclass HelloBean implements SessionBean {
 
    private SessionContext context;
 
    publicvoid ejbCreate() throws EJBException, RemoteException {
    }
    publicvoid ejbActivate() throws EJBException, RemoteException {
    }
    publicvoid ejbPassivate() throws EJBException, RemoteException {
    }
    publicvoid ejbRemove() throws EJBException, RemoteException {
    }
 
    publicvoid setSessionContext(SessionContext newContext)
           throws EJBException {
       context = newContext;
    }
 
    public String sayHello() throws EJBException {
       return"Hello from ejb";
    }
}
 
用于测试的Servlet 
ClientServlet.java
package powerwind;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
publicclass ClientServlet extends HttpServlet {
 
    publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
 
       response.setContentType("text/html");
       PrintWriter out = response.getWriter();
       String message = null;
       try {
           InitialContext ic = new InitialContext();
           Object obj = ic.lookup("HelloEJB");
           HelloHome home = (HelloHome) PortableRemoteObject.narrow(obj,
                  powerwind.HelloHome.class);
           Hello hello = home.create();
           message = hello.sayHello();
       } catch (Exception e) {
           e.printStackTrace();
       }
       out.println(message);
       out.flush();
       out.close();
    }
 
    publicvoid doPost(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       doGet(request, response);
    }
 
}
配置文件:
ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<!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>HelloEJB,my first ejb program</description>
    <display-name>HelloEJB</display-name>
    <enterprise-beans>
       <session>
           <ejb-name>HelloEJB</ejb-name>
           <home>powerwind.HelloHome</home>
           <remote>powerwind.Hello</remote>
           <ejb-class>powerwind.HelloBean</ejb-class>
           <session-type>Stateless</session-type>
           <transaction-type>Container</transaction-type>
       </session>
    </enterprise-beans>
</ejb-jar>
 
jboss-jar
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
    <enterprise-beans>
       <session>
           <ejb-name>HelloEJB</ejb-name>
           <jndi-name>HelloEJB</jndi-name>
       </session>
    </enterprise-beans>
</jboss>
 
application.xml
<?xml version="1.0"?>
<application>
    <display-name>HelloEJB J2EE Application</display-name>
    <module>
       <web>
           <web-uri>HelloEJB.war</web-uri>
           <context-root>/HelloEJB</context-root>
       </web>
    </module>
    <module>
       <ejb>HelloEJB.jar</ejb>
    </module>
</application>
 
jboss-web.xml
<?xml version="1.0"?>
<jboss-web>
    <ejb-ref>
       <ejb-ref-name>HelloEJB</ejb-ref-name>
       <jndi-name>HelloEJB</jndi-name>
    </ejb-ref>
</jboss-web>
 
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
       <servlet-name>ClientServlet</servlet-name>
       <servlet-class>powerwind.ClientServlet</servlet-class>
    </servlet>
 
    <servlet-mapping>
       <servlet-name>ClientServlet</servlet-name>
       <url-pattern>/ClientServlet</url-pattern>
    </servlet-mapping>
 
    <ejb-ref>
       <ejb-ref-name>HelloEJB</ejb-ref-name>
       <ejb-ref-type>Session</ejb-ref-type>
       <home>powerwind.HelloHome</home>
       <remote>powerwind.Hello</remote>
    </ejb-ref>
 
</web-app>
 
输入 ant –deploy 部署,启动Jboss服务器,在浏览器地址栏输入:
http://localhost:8080/HelloEJB/ClientServlet
然后看到浏览器输出“Hello from ejb”,就是成功了。
 

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章