`
jackle_liu
  • 浏览: 147793 次
文章分类
社区版块
存档分类
最新评论

jboss4.x下的第一个ejb2.0程序(5)---本地EJB

阅读更多
EJB2.0规范中引入了本地EJB的概念,传统的EJB是走得rmi技术,是通过网络协议的( 通过网卡).如果采用本地EJB就不会多走一步网络,而是直接调用,效率会快很多.
     实际应用中,往往EntityBean都是放在本地,SessionBean是分布式的.所以EntityBean采用本地EJB.
     我们依然是针对前面的例子进行改动.同时我们讲在这里增加一个查询方法.
  首先是增加1个类,两个接口:
HelloLocalEntity.java:
package com.rox;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.RemoveException;
import javax.ejb.CreateException;
public abstract class HelloLocalEntity implements EntityBean {
    /** The entity context */
    private EntityContext context;
    public abstract Integer getHelloNo();
    public abstract void setHelloNo(Integer s);
    public abstract String getHelloName();
    public abstract void setHelloName(String s);
    public HelloLocalEntity() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Integer ejbCreate(Integer HelloNo,String HelloName) throws CreateException {
        setHelloNo(HelloNo);
        setHelloName(HelloName);
        return null;
    }
    public void ejbPostCreate(Integer HelloNo,String HelloName) throws CreateException {
    }
    public void setEntityContext(EntityContext newContext) throws EJBException {
        context = newContext;
    }
    public void unsetEntityContext() throws EJBException {
        context = null;
    }
    public void ejbRemove()
        throws RemoveException,
        EJBException,
        RemoteException {
        // TODO Auto-generated method stub
    }
    public void ejbActivate() throws EJBException, RemoteException {
        // TODO Auto-generated method stub
    }
    public void ejbPassivate() throws EJBException, RemoteException {
        // TODO Auto-generated method stub
    }
    public void ejbLoad() throws EJBException, RemoteException {
        // TODO Auto-generated method stub
    }
    public void ejbStore() throws EJBException, RemoteException {
        // TODO Auto-generated method stub
    }
  
 
HelloLocalEntityHome.java:
package com.rox;
import java.util.Collection;
import javax.ejb.FinderException;
public interface HelloLocalEntityHome
   extends javax.ejb.EJBLocalHome
{
   public com.rox.HelloLocalEntityInterface create(Integer HelloNo,String HelloName)
   throws javax.ejb.CreateException;
  
   public com.rox.HelloLocalEntityInterface findByPrimaryKey(Integer pk)
      throws javax.ejb.FinderException;
  
   public Collection findAllEntitys() throws FinderException;//对应ejb-jar中<query-method></query-method>的定义.
}
 
HelloLocalEntityInterface.java:
package com.rox;
import java.util.Collection;
public interface HelloLocalEntityInterface
   extends javax.ejb.EJBLocalObject
{
    public String getHelloName();
    public void setHelloName(String s);
    public Integer getHelloNo();
    public void setHelloNo(Integer i);
}
 
然后是配置文件: 
ejb-jar.xml:
<!---->
<!---->http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar></ejb-jar>
 <description></description>
  
 
 <display-name></display-name>Generated by XDoclet
 <enterprise-beans></enterprise-beans>
  <!---->
  <session></session>
   <description></description>
    
   
   <ejb-name></ejb-name>HelloWorld
   <home></home>com.rox.HelloHome
   <remote></remote>com.rox.HelloWorld
   <ejb-class></ejb-class>com.rox.Hello
   <session-type></session-type>Stateless
    <transaction-type> </transaction-type> Container
   <ejb-ref></ejb-ref>
    <ejb-ref-name></ejb-ref-name>com.rox.HelloEntityHome
    <ejb-ref-type></ejb-ref-type>Entity
    <home></home>com.rox.HelloEntityHome
    <remote></remote>com.rox.HelloEntityInterface
    <ejb-link></ejb-link>HelloEntityInterface
   
   <ejb-local-ref></ejb-local-ref>
    <ejb-ref-name></ejb-ref-name>com.rox.HelloLocalEntityHome
    <ejb-ref-type></ejb-ref-type>Entity
    <local-home></local-home>com.rox.HelloLocalEntityHome
    <local></local>com.rox.HelloLocalEntityInterface
    <ejb-link></ejb-link>HelloLocalEntityInterface
   
  
  <entity></entity>
   <description></description>
    
   
   <ejb-name></ejb-name>HelloEntityInterface
   <home></home>com.rox.HelloEntityHome
   <remote></remote>com.rox.HelloEntityInterface
   <ejb-class></ejb-class>com.rox.HelloEntity
    <persistence-type></persistence-type> Container
    <prim-key-class></prim-key-class> java.lang.Integer
   <reentrant></reentrant>False
   <cmp-version></cmp-version>2.x
   <abstract-schema-name></abstract-schema-name>HelloEntity
            <cmp-field></cmp-field>
            <field-name></field-name>helloNo
           
            <cmp-field></cmp-field>
            <field-name></field-name>helloName
           
            <primkey-field></primkey-field> helloNo
   <!---->
   <query></query>
    <query-method></query-method>
     <method-name></method-name>findAllEntitys
     <method-params></method-params>
    
    <ejb-ql></ejb-ql>SELECT OBJECT(a) FROM HelloLocalEntity AS a
   
  
  <entity></entity>
   <description></description>
    
   
   <display-name></display-name>Name for HelloLocalEntity
   <ejb-name></ejb-name>HelloLocalEntityInterface
   <local-home></local-home>com.rox.HelloLocalEntityHome
   <local></local>com.rox.HelloLocalEntityInterface
   <ejb-class></ejb-class>com.rox.HelloLocalEntity
    <persistence-type></persistence-type> Container
    <prim-key-class></prim-key-class> java.lang.Integer
   <reentrant></reentrant>False
   <cmp-version></cmp-version>2.x
   <abstract-schema-name></abstract-schema-name>HelloLocalEntity
            <cmp-field></cmp-field>
            <field-name></field-name>helloNo
           
            <cmp-field></cmp-field>
            <field-name></field-name>helloName
           
            <primkey-field></primkey-field> helloNo
   <query></query>
    <query-method></query-method>
     <method-name></method-name>findAllEntitys
     <method-params></method-params>
    
    <ejb-ql></ejb-ql>SELECT OBJECT(a) FROM HelloLocalEntity AS a
   
   <!---->
  

 

 <assembly-descriptor></assembly-descriptor>
 
红色部分是相对于之前的ejb-jar.xml增加部分.

jboss.xml:
<!---->
<!---->http://www.jboss.org/j2ee/dtd/jboss_2_4.dtd">
<jboss></jboss>
   <enterprise-beans></enterprise-beans>

      <entity></entity>
         <ejb-name></ejb-name>HelloEntityInterface
         <jndi-name></jndi-name>ejb/HelloEntity
     
     
      <entity></entity>
         <ejb-name></ejb-name>HelloLocalEntityInterface
         <jndi-name></jndi-name>ejb/HelloLocalEntity
     
     
      <session></session>
         <ejb-name></ejb-name>HelloWorld
         <jndi-name></jndi-name>ejb/HelloWorld
     
   
  
   <resource-managers></resource-managers>
  
 
jbosscmp-jdbc.xml:
<!---->
<!---->http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_4_0.dtd">
<jbosscmp-jdbc></jbosscmp-jdbc>
  <enterprise-beans></enterprise-beans>
    <entity></entity>
      <ejb-name></ejb-name>HelloEntityInterface
      <table-name> </table-name> HELLO
      <cmp-field></cmp-field>
        <field-name></field-name>helloNo
        <column-name></column-name>HELLO_NO
     
      <cmp-field></cmp-field>
        <field-name></field-name>helloName
        <column-name></column-name>HELLO_NAME
     
   
    <entity></entity>
      <ejb-name></ejb-name>HelloLocalEntityInterface
      <table-name> </table-name> HELLO
      <cmp-field></cmp-field>
        <field-name></field-name>helloNo
        <column-name></column-name>HELLO_NO
     
      <cmp-field></cmp-field>
        <field-name></field-name>helloName
        <column-name></column-name>HELLO_NAME
     
   
 
 
做完这些还要修改Hello.java:
package com.rox;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Properties;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.FinderException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import org.apache.log4j.Logger;
public class Hello implements SessionBean {

    private SessionContext context;
    InitialContext initialContext = null;
    Object obj = null;
    Object localObj = null;
    HelloLocalEntityHome helloLocalEntityHome = null;
    HelloEntityHome helloEntityHome = null;
    private  final Logger log = Logger.getLogger(Hello.class);
    public Hello() {
        super();
        // TODO Auto-generated constructor stub
    }
    public void setSessionContext(SessionContext newContext)
        throws EJBException {
        context = newContext;
        log.info("set SessionContext");
    }
    public void ejbCreate() throws EJBException, RemoteException {
        // TODO Auto-generated method stub
        log.info("ejb create");
        Properties environment = new Properties();
        environment.put(Context.PROVIDER_URL, "localhost:1099");
        environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
        try {
            initialContext = new InitialContext();
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            obj = initialContext.lookup("java:comp/env/"+HelloEntityHome.class.getName());
            localObj = initialContext.lookup("java:comp/env/"+HelloLocalEntityHome.class.getName());
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        helloEntityHome = (HelloEntityHome)PortableRemoteObject.narrow(obj,HelloEntityHome.class);
        helloLocalEntityHome = (HelloLocalEntityHome)localObj;
        log.info("helloEntityHome:"+helloEntityHome);
        log.info("helloLocalEntityHome"+helloLocalEntityHome);
    }
    public void ejbRemove() throws EJBException, RemoteException {
        // TODO Auto-generated method stub
        log.info("ejb remove");
    }
    public void ejbActivate() throws EJBException, RemoteException {
        // TODO Auto-generated method stub
        log.info("ejb activate");
    }
    public void ejbPassivate() throws EJBException, RemoteException {
        // TODO Auto-generated method stub
        log.info("ejb passivate");
    }
    public Collection getAllLocalEntity()
    {
        Collection originalCol = null;
        Collection newCol = new ArrayList();
        try {
            originalCol = helloLocalEntityHome.findAllEntitys();
        } catch (FinderException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        Iterator it = originalCol.iterator();
        while(it.hasNext())
        {
            HelloLocalEntityInterface local = (HelloLocalEntityInterface)it.next();
            HelloObject obj = new HelloObject();
            obj.setHelloName(local.getHelloName());
            obj.setHelloNo(local.getHelloNo());
            newCol.add(obj);
        }
        return newCol;
    }
    public String sayIt() throws EJBException {
       
        HelloEntityInterface helloEntity = null;
        try {
          
            log.info("helloEntityHome:"+helloEntityHome);
            //helloEntityHome.create(1,"mysql first try");
            helloEntity = helloEntityHome.findByPrimaryKey(1);
            log.info("helloEntity:"+helloEntity);
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FinderException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
        try {
            return helloEntity.getHello();
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
           
            e.printStackTrace();
            return "sorry, exception";
        }
    }
}
注意红色部分的方法,HelloObject是一个pojo:
package com.rox;
import java.io.Serializable;
public class HelloObject implements Serializable{
   private String HelloName;
   private int HelloNo;
public String getHelloName() {
    return HelloName;
}
public void setHelloName(String helloName) {
    HelloName = helloName;
}
public int getHelloNo() {
    return HelloNo;
}
public void setHelloNo(int helloNo) {
    HelloNo = helloNo;
}
 
}
最后在EjbTest.java中加上如下语句就可以看到结果集了
            Collection localResultCol = hello.getAllLocalEntity();
            System.out.println(localResultCol.size());
            Iterator localResultIter = localResultCol.iterator();
            while(localResultIter.hasNext())
            {
                HelloObject helloLocal = (HelloObject)localResultIter.next();
                System.out.println(helloLocal.getHelloNo()+"\t"+helloLocal.getHelloName());
            }
分享到:
评论

相关推荐

    使用eclipse通过jboss开发简单的ejb应用(jboss7.x & ejb3.x)

    在本文中,我们将深入探讨如何使用Eclipse IDE与JBoss应用程序服务器(版本7.x)来开发和部署一个基于EJB 3.x的简单企业级Java应用程序。EJB(Enterprise JavaBeans)是Java平台上的核心组件,它提供了一种标准的...

    jboss7ejb配置文件

    JBoss AS(现在称为WildFly)是一个开源的应用服务器,它支持Java EE规范,包括EJB。在JBoss 7及以上版本中,对EJB的配置过程相较于之前的版本有所变化,主要涉及到两个关键的配置文件:`jboss-ejb3.xml`和`ejb-jar....

    EJB2.0 实例开发

    3. **EJB2.0的Helloworld实例**:在EJB2.0的Helloworld示例中,我们通常会创建一个简单的会话bean,提供一个方法,如“sayHello”。客户端通过JNDI(Java Naming and Directory Interface)查找bean并调用该方法。这...

    ejb2.0消息驱动bean的开发(JBOSS4.0.4.GA 环境)

    在Java企业版(Java EE)的早期版本中,EJB(Enterprise JavaBeans)2.0是核心组件之一,用于构建分布式、事务处理和面向服务的业务应用程序。消息驱动Bean(Message-Driven Bean, MDB)是EJB的一个特殊类型,它充当...

    EJB2.0一个完整的Helloworld

    EJB 2.0版本是EJB规范的一个里程碑,引入了许多改进,包括对组件模型、容器管理和部署的优化。 在"一个完整的Helloworld"示例中,我们将深入理解EJB 2.0的基础知识,包括Bean的类型、接口、生命周期管理以及如何在...

    jboss-4.0.5.GA.zip

    1. **Java EE 5支持**:JBoss 4.0.x系列是基于Java EE 5标准的,提供了诸如EJB 3.0、JPA(Java Persistence API)、JSF(JavaServer Faces)、JMS(Java Message Service)等组件的支持,使得开发企业级应用变得更加...

    基于 JBoss 4.x的 J2EE 1.4 应用 开发指南

    《基于JBoss 4.x的J2EE 1.4应用开发指南》是一本专为开发者设计的详尽教程,旨在帮助读者掌握如何在JBoss 4.x应用服务器上开发和部署J2EE 1.4标准的应用程序。这本书深入探讨了JBoss 4.x与J2EE 1.4规范的集成,以及...

    在JBoss下配置EJB

    4. **部署**:在JBoss中部署EJB 2.0应用,通常需要将ejb-jar.jar、client-ejb-jar.jar和相应的jboss.xml放入`server/default/deploy`目录下。 接下来,我们转向EJB 3.0的配置: 1. **注解驱动**:EJB 3.0引入了...

    jboss-4.2.3.GA_下的jboss-4.2.3.GA_下的

    JBoss AS 4.2.3.GA(Application Server)是Red Hat公司开发的一款开源Java应用服务器,它基于Java EE(Enterprise Edition)5规范,提供了全面的企业级服务,包括EJB(Enterprise JavaBeans)、JMS(Java Message ...

    jboss-4.2.3.GA-jdk6的EJB服务器

    这个版本,jboss-4.2.3.GA-jdk6,是专为Java 6环境设计的,它在JBoss AS(Application Server)4.x系列中是一个稳定且广泛使用的版本。本文将深入探讨JBoss EJB服务器的核心特性、主要功能以及如何部署和管理EJB组件...

    jboss-ejb3-client.jar

    jboss-ejb3-client.jar

    JBoss下配置和部署EJB英文版.pdf

    《JBoss 3.2 Workbook for Enterprise JavaBeans™, 3rd Edition》为开发者提供了一个全面了解和掌握EJB技术的机会。通过本书的学习,读者不仅可以了解到EJB的基本概念和技术细节,还能掌握如何在JBoss环境下有效地...

    jboss-4-3-jpa-ejb:将 JBoss 4.3.0 与 JPA 2.0 一起使用的测试项目(Hibernate 4.3.9.Final)

    JBoss 4.3.0.GA_CP06、EJB3 和扩展的 PersistenceContext 注意:这个项目演示了一个问题。 它不起作用,不应使用。 将 JBoss 4.3.0.GA_CP06 与 JPA 2.0 (Hibernate 4.3.9.Final) 一起使用的测试项目。 ...

    EJB3.0 实例教程 -- 切片1

    第一章 前言......4 1.1 本教程适合人群4 1.2 联系作者..4 第二章运行环境配置4 2.1 下载与安装........4 2.2 运行一个EJB3例子.......9 2.3 在独立的TOMCAT 中调用EJB....9 2.4 发布在JBOSS集成环境中的WEB应用调用...

    jboss-seam2.0文档.rar

    JBoss Seam 2.0 是一个全面的企业级Java开发框架,旨在简化Java EE(现在称为Java EE)应用程序的构建过程,尤其是在集成各种技术和处理业务逻辑方面。Seam 提供了一个统一的模型,允许开发者用一种更直观的方式来...

    下载和安装jboss-4.0.4.GA 服务器

    在这个页面中,我们应该选择`jboss-4.0.4.GA-Patch1-installer.jar`文件进行下载。这是因为该文件包含了完整的安装程序,方便用户通过图形化界面完成整个安装过程。 #### 三、安装步骤 1. **启动安装程序** 双击...

    jboss-ejb-api_3.1_spec.jar

    ejb在jboss下的组件基础类,包含javax.ejb.Stateless等

    ejb_jboss.rar_ejb mysql_ejb_jboss_estoreW_java ejb jbo_jboss

    这是一个基于EJB(Enterprise JavaBeans)技术的项目,利用了JBuilder作为开发工具,JBoss应用服务器进行部署,以及MySQL数据库存储数据。这个项目名为"ejb_jboss_estoreW",推测是一个电子商务(e-store)平台的...

    jboss-ejb3x.jar

    使用jboss-4.2.2.GA+JbossIDE for eclipse+MyElipse5.0+JDK1.5做一个EJB3.0 的例子 所需要的文件

    jboss 下载(httpwww.jboss.org)

    JBoss 作为 EJB(Enterprise JavaBeans)的容器和服务器,支持 EJB 1.1、EJB 2.0 和 EJB 3.0 规范。尽管核心服务不包含对 Servlet 和 JSP 的支持,但通常会与 Tomcat 或 Jetty 这样的 Web 容器结合使用,以提供完整...

Global site tag (gtag.js) - Google Analytics