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 IDE与JBoss应用程序服务器(版本7.x)来开发和部署一个基于EJB 3.x的简单企业级Java应用程序。EJB(Enterprise JavaBeans)是Java平台上的核心组件,它提供了一种标准的...
JBoss AS(现在称为WildFly)是一个开源的应用服务器,它支持Java EE规范,包括EJB。在JBoss 7及以上版本中,对EJB的配置过程相较于之前的版本有所变化,主要涉及到两个关键的配置文件:`jboss-ejb3.xml`和`ejb-jar....
3. **EJB2.0的Helloworld实例**:在EJB2.0的Helloworld示例中,我们通常会创建一个简单的会话bean,提供一个方法,如“sayHello”。客户端通过JNDI(Java Naming and Directory Interface)查找bean并调用该方法。这...
在Java企业版(Java EE)的早期版本中,EJB(Enterprise JavaBeans)2.0是核心组件之一,用于构建分布式、事务处理和面向服务的业务应用程序。消息驱动Bean(Message-Driven Bean, MDB)是EJB的一个特殊类型,它充当...
EJB 2.0版本是EJB规范的一个里程碑,引入了许多改进,包括对组件模型、容器管理和部署的优化。 在"一个完整的Helloworld"示例中,我们将深入理解EJB 2.0的基础知识,包括Bean的类型、接口、生命周期管理以及如何在...
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规范的集成,以及...
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 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,是专为Java 6环境设计的,它在JBoss AS(Application Server)4.x系列中是一个稳定且广泛使用的版本。本文将深入探讨JBoss EJB服务器的核心特性、主要功能以及如何部署和管理EJB组件...
jboss-ejb3-client.jar
《JBoss 3.2 Workbook for Enterprise JavaBeans™, 3rd Edition》为开发者提供了一个全面了解和掌握EJB技术的机会。通过本书的学习,读者不仅可以了解到EJB的基本概念和技术细节,还能掌握如何在JBoss环境下有效地...
JBoss 4.3.0.GA_CP06、EJB3 和扩展的 PersistenceContext 注意:这个项目演示了一个问题。 它不起作用,不应使用。 将 JBoss 4.3.0.GA_CP06 与 JPA 2.0 (Hibernate 4.3.9.Final) 一起使用的测试项目。 ...
第一章 前言......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 Seam 2.0 是一个全面的企业级Java开发框架,旨在简化Java EE(现在称为Java EE)应用程序的构建过程,尤其是在集成各种技术和处理业务逻辑方面。Seam 提供了一个统一的模型,允许开发者用一种更直观的方式来...
在这个页面中,我们应该选择`jboss-4.0.4.GA-Patch1-installer.jar`文件进行下载。这是因为该文件包含了完整的安装程序,方便用户通过图形化界面完成整个安装过程。 #### 三、安装步骤 1. **启动安装程序** 双击...
ejb在jboss下的组件基础类,包含javax.ejb.Stateless等
这是一个基于EJB(Enterprise JavaBeans)技术的项目,利用了JBuilder作为开发工具,JBoss应用服务器进行部署,以及MySQL数据库存储数据。这个项目名为"ejb_jboss_estoreW",推测是一个电子商务(e-store)平台的...
使用jboss-4.2.2.GA+JbossIDE for eclipse+MyElipse5.0+JDK1.5做一个EJB3.0 的例子 所需要的文件
JBoss 作为 EJB(Enterprise JavaBeans)的容器和服务器,支持 EJB 1.1、EJB 2.0 和 EJB 3.0 规范。尽管核心服务不包含对 Servlet 和 JSP 的支持,但通常会与 Tomcat 或 Jetty 这样的 Web 容器结合使用,以提供完整...