服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

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;
 
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 ?cdeploy 部署,启动jboss服务器,在浏览器地址栏输入:
http://localhost:8080/helloejb/clientservlet
然后看到浏览器输出“hello from ejb”,就是成功了。

扫描关注微信公众号