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

 

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;
 
public interface Hello extends EJBObject {
    public String sayHello() throws RemoteException;
}
 
HelloHome.java
package powerwind;
 
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
 
public interface 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;
 
public class HelloBean implements SessionBean {
 
    private SessionContext context ;
 
    public void ejbCreate() throws EJBException, RemoteException {
    }
    public void ejbActivate() throws EJBException, RemoteException {
    }
    public void ejbPassivate() throws EJBException, RemoteException {
    }
    public void ejbRemove() throws EJBException, RemoteException {
    }
 
    public void 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;
 
public class ClientServlet extends HttpServlet {
 
    public void 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();
    }
 
    public void 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”,就是成功了。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值