初识EJB2.1

本文深入探讨了EJB2.1的基本概念,包括实体Bean、会话Bean、消息驱动Bean等,并详细说明了如何将Java文件和部署描述的XML配置整合并部署到WebLogic Server上。通过实例代码展示了如何创建、配置和调用EJB,最终在控制台上成功打印出EJB的响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

企业Bean分为实体Bean、会话Bean和消息驱动Bean,其中会话Bean又分为有状态会话Bean和无状态会话Bean。
Enterprise Java Bean = EJB
|--Entity Bean
|--Session Bean
| |--Stateful Session Bean = SFSB
| |--Stateless Session Bean = SLSB
|--Message Driven Bean = MDB

Remote Method Invocation = RMI

Container Managed Persistent = CMP
Container Managed Relationships = CMR
Bean Managed Persistent = BMP

Container Managed Transaction = CMT
Bean Managed Transaction = BMT
EJB不支持嵌套事务。

Business Interface[EJBObject]
Home Interface[EJBHome]
Bean Class[EnterpriseBean]
Client通过JNDI找到Server的Stub,然后找到Home Interface,用Home Interface生成一个Business Interface,Business Interface代理了Bean Class。
Business Interface中的方法和Bean Class中的业务方法存在一一对应的关系,需要手工或者IDE来确保这一点。

接下来是从《Head First EJB》中的第一章EJB入门里实现的例子。
首先是Bean Class,
package com.bms;

import java.rmi.RemoteException;

import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

public class AdviceBean implements SessionBean {

private static final long serialVersionUID = 1L;

public String advice() {
return "this is for EJB 2.1";
}

@Override
public void ejbActivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub

}

@Override
public void ejbPassivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub

}

@Override
public void ejbRemove() throws EJBException, RemoteException {
// TODO Auto-generated method stub

}

@Override
public void setSessionContext(SessionContext arg0) throws EJBException,
RemoteException {
// TODO Auto-generated method stub

}

}


接着是Business Interface,
package com.bms;

import java.rmi.RemoteException;

import javax.ejb.EJBObject;

public interface Advice extends EJBObject {

public String advice() throws RemoteException;

}


最后是Home Interface,
package com.bms;

import java.rmi.RemoteException;

import javax.ejb.CreateException;
import javax.ejb.EJBHome;

public interface AdviceHome extends EJBHome {

public Advice create() throws CreateException, RemoteException;

}


ejb-jar.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
<display-name>bpm-ejb </display-name>
<!--
<ejb-client-jar>bpm-ejbClient.jar</ejb-client-jar>
-->
<enterprise-beans>
<session>
<display-name>AdviceBean</display-name>
<ejb-name>AdviceBean</ejb-name>
<home>com.bms.AdviceHome</home>
<remote>com.bms.Advice</remote>
<ejb-class>com.bms.AdviceBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
<security-identity>
<description></description>
<use-caller-identity/>
</security-identity>
</session>
</enterprise-beans>
</ejb-jar>


最后部署在weblogic server上,增加一个JNDI对象。
文件weblogic-ejb-jar.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-ejb-jar xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.2/weblogic-ejb-jar.xsd">
<!--weblogic-version:10.3.6-->
<wls:weblogic-enterprise-bean>
<wls:ejb-name>TaskBean</wls:ejb-name>
<wls:stateless-session-descriptor></wls:stateless-session-descriptor>
<wls:jndi-name>com/bms/TaskBeanRemote</wls:jndi-name>
<wls:local-jndi-name>com/bms/TaskBeanLocal</wls:local-jndi-name>
</wls:weblogic-enterprise-bean>
<wls:weblogic-enterprise-bean>
<wls:ejb-name>QueryBean</wls:ejb-name>
<wls:stateless-session-descriptor></wls:stateless-session-descriptor>
<wls:jndi-name>QueryBean</wls:jndi-name>
</wls:weblogic-enterprise-bean>
<wls:weblogic-enterprise-bean>
<wls:ejb-name>AdviceBean</wls:ejb-name>
<wls:stateless-session-descriptor></wls:stateless-session-descriptor>
<wls:jndi-name>AdviceBean</wls:jndi-name>
</wls:weblogic-enterprise-bean>
</wls:weblogic-ejb-jar>


这3个Java文件和两个部署描述的XML准备好了,就可以把整个EJB项目部署到weblogic上了。

[b]客户端的调用代码如下:[/b]
package com.bms;

import java.rmi.RemoteException;
import java.util.Properties;

import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;

public class Ejb2InvocationTest {

public static void main(String[] args) {
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL, "t3://localhost:7001");
p.put(Context.SECURITY_PRINCIPAL, "weblogic");
p.put(Context.SECURITY_CREDENTIALS, "welcome1");

InitialContext ctx;
try {
ctx = new InitialContext(p);
Object stub = ctx.lookup("AdviceBean");
AdviceHome home = (AdviceHome) PortableRemoteObject.narrow(stub,
AdviceHome.class);
Advice bean = home.create();
System.out.println(bean.advice());

} catch (NamingException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (CreateException e) {
e.printStackTrace();
}

}

}


控制台打印出“this is for EJB 2.1”。

Done!!!!!!!!!!!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值