Comsteed | 航纶

        天行健,君子以自强不息;地势坤,君子以厚德载物.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一、目录结构与打包
jbossEJB(文件夹)
---------------
|
|--ejb组件(文件夹)
|   |
|   |--META-INF(文件夹)
|   |     |--ejb-jar.xml
|   |     |--jboss.xml
|   |
|   |--ejbs(文件夹)
|   |     |--Hai.class
|   |     |--HaiHome.class
|   |     |--HaiBean.class
|
|--web组件(文件夹)
|   |--haiejb.jsp
|   |
|   |--WEB-INF(文件夹)
|   |     |--web.xml
|   |     |--jboss.xml
|
|--META-INF(文件夹)
|   |--application.xml

打包haiejb.jar:jar cvf haiejb.jar META-INF/ ejbs/
打包haiejb.war:jar cvf haiejb.war haiejb.jsp WEB-INF/
打包haiejb.ear:jar cvf haiejb.ear haiejb.jar haiejb.war META-INF/

二、文件
1、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>Hai EJB instance.</description>
    <display-name>Hai EJB</display-name>
    <enterprise-beans>
        <session>
            <ejb-name>HaiEJB</ejb-name>
            <home>ejbs.HaiHome</home>
            <remote>ejbs.Hai</remote>
            <ejb-class>ejbs.HaiBean</ejb-class>
            <session-type>Stateless</session-type>
            <transaction-type>Bean</transaction-type>
        </session>
    </enterprise-beans>
</ejb-jar>
2、jboss.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
    <enterprise-beans>
        <session>
            <ejb-name>HaiEJB</ejb-name>
            <jndi-name>ejb/HaiEJB</jndi-name>
        </session>
    </enterprise-beans>
</jboss>
3、java文件
//Haihome.java
package ejbs;
import java.io.Serializable;
import java.rmi.*;
import javax.ejb.*;
public interface HaiHome extends EJBHome {
    Hai create() throws RemoteException, CreateException;
}
//Hai.java
package ejbs;
import javax.ejb.*;
import java.rmi.RemoteException;
public interface Hai extends EJBObject {
    public String sayHai() throws RemoteException;
}
//HaiBean.java
package ejbs;
import javax.ejb.*;
import javax.naming.*;
public class HaiBean implements SessionBean{
    public String sayHai(){
        return "Hai, EJB technology!";
    }
    public void ejbCreate() throws EJBException {}
    public void ejbRemove() throws EJBException {}
    public void ejbPassivate(){}
    public void ejbActivate(){}
    public void setSessionContext(SessionContext sc){}
}
4、haiejb.jsp
<%@ page contentType="text/html;charset=GBK" %>
<%@ page import="ejbs.*,javax.ejb.*,javax.naming.*,javax.rmi.PortableRemoteObject,java.rmi.RemoteException" %>
<html>
<body>
<% String message = "nothing!";
   try {
        InitialContext ic = new InitialContext();
        Object objRef = ic.lookup("ejb/HaiEJB");
        HaiHome home = (HaiHome) PortableRemoteObject.narrow(objRef,ejbs.HaiHome.class);
        Hai haiRemote = home.create();
        message = haiRemote.sayHai();
   } catch (RemoteException re) {
       re.printStackTrace();
   } catch (CreateException ce) {
       ce.printStackTrace();
   } catch (NamingException ne) {
       ne.printStackTrace();
   }
%>
<h1><%=message%></h1>
</body>
</html>
5、web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!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>
    <ejb-ref>
        <ejb-ref-name>HaiEJB</ejb-ref-name>
        <ejb-ref-type>Session</ejb-ref-type>
        <home>ejbs.HaiHome</home>
        <remote>ejbs.Hai</remote>
    </ejb-ref>
</web-app>
6、jboss-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <ejb-ref>
        <ejb-ref-name>HaiEJB</ejb-ref-name>
        <jndi-name>ejb/HaiEJB</jndi-name>
    </ejb-ref>
</jboss-web>

三、部署J2EE应用

  把haiejb.ear拷贝到JBOSS_HOME\server\default\deploy\
启动jboss 4.0.2默认服务器,注意命令行窗口中有无异常,如果有异常情况,请查看log文件:
    JBOSS_HOME\server\default\log\server.log
从中查找分析问题所在,然后改正之,直到无异常显示
    说明:haiejb的servlet写在JBOSS_HOME\server\default\work\jboss.web\localhost\里,可以删除并重新部署。

  最后在浏览器地址栏中键入:
http://localhost:8080/haiejb/haiejb.jsp

  结果:  Hai, EJB technology!

四、application client
//Client.java
import ejbs.HaiHome;
import ejbs.Hai;
import javax.ejb.*;
import javax.naming.*;
import javax.rmi.PortableRemoteObject;
import java.rmi.RemoteException;
import java.util.Properties;
public class Client{
    public static void main(String []args){
        String message = "nothing!";
Properties env=new Properties();
env.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
        env.put("java.naming.provider.url","localhost:1099");
        env.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
try{
            InitialContext ic = new InitialContext(env);
            Object objRef = ic.lookup("ejb/HaiEJB");
            HaiHome home =(HaiHome)PortableRemoteObject.narrow(objRef,HaiHome.class);
            Hai haiRemote = home.create();     
            message = haiRemote.sayHai();
            System.out.println(message);
        }catch(RemoteException re){
            re.printStackTrace();
        }catch (CreateException ce){
            ce.printStackTrace();
        }catch (NamingException ne){
            ne.printStackTrace();
        }
    }
}
application client的运行注意事项请参照本博客以前的文章(jboss3.2.3的例子)

posted on 2008-03-27 21:07  航纶  阅读(738)  评论(0编辑  收藏  举报