EJB中的2中依赖管理的形式:
1、依赖查找
第一种依赖查找的方式:
package app.xjtu.impl;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.ejb.EJBs;
import javax.ejb.Stateless;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import app.xjtu.DependentJNDI;
import app.xjtu.HelloEJBWorld;
/**
* 该方式的依赖注入,有以下几点疑问:
*
* 1、@EJB有多个时,应使用@EJBs注解
*
* 2、该种方式,似乎对“HelloEJBWorld”(即依赖注入的目标),命名了一个JNDI名称
*
* 3、"java:comp/env" 是服务器端的JNDI命名环境
*
*
*/
@Stateless(mappedName="ejb/DependentJNDI")
@EJBs(
{
@EJB(name="targetOne",beanInterface=HelloEJBWorld.class),
@EJB(name="targetTwo",beanInterface=HelloEJBWorld.class)
}
)
public class DependentJNDIBean implements DependentJNDI {
private HelloEJBWorld hello;
private HelloEJBWorld hello2;
@PostConstruct
public void init(){
try{
Context ctx = new InitialContext();
hello = (HelloEJBWorld)ctx.lookup("java:comp/env/targetOne");
hello2 = (HelloEJBWorld)ctx.lookup("java:comp/env/targetOne");
ctx.close();
}catch(NamingException e){
throw new EJBException("初始化依赖对象时出错!",e);
}
}
@Override
public String getInfo() {
return "这是第一种Dependent Lookup方式: "+hello.sayHello()+"\n hello == hello2 "+(hello == hello2);
}
}
第二种依赖查找的方式:
package app.xjtu.impl;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import app.xjtu.DependentJNDI;
import app.xjtu.HelloEJBWorld;
/**
* 这是第2种dependent lookup,相比第1种:
*
* 1、没有异常的抛出
*
* 2、需要SessionContext对象
*
* 3、查找的JNDI名称简化了
*
*/
@Stateless(mappedName="ejb/DependentJNDITwo")
@EJB(name="targetTwo",beanInterface=HelloEJBWorld.class)
public class DependentJNDIBeanTwo implements DependentJNDI {
@Resource SessionContext context;
HelloEJBWorld hello;
@PostConstruct
public void init(){
hello = (HelloEJBWorld)context.lookup("targetTwo");
}
@Override
public String getInfo() {
return "这是第2中依赖注入:"+hello.sayHello();
}
}
依赖注入
这种方式,可以将Annotations放在Field或者Setter方法上。这两种的区别,暂不清楚。据说JPA的Entity Bean中2者是有区别的。(以后有时间慢慢研究)
package app.xjtu.impl;
import javax.ejb.Stateless;
import app.xjtu.HelloEJBWorld;
@Stateless(mappedName="HelloEJBWorld")
public class HelloEJBWorldBean implements HelloEJBWorld {
@Override
public String sayHello() {
return "GlassFish EJB Client Invoked -- 通过默认的JNDI名称调用";
}
}
package app.xjtu.impl;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import app.xjtu.HelloEJBWorld;
import app.xjtu.Injection;
@Stateless(mappedName = "ejb/Myinjection")
public class InjectionBean implements Injection {
@EJB
private HelloEJBWorld hello;
@Override
public String getInfo() {
return "这是EJB 注入后的输出:"+hello.sayHello();
}
}
这里的@EJB是按类型注入的还是按某种命名规则注入的?
分享到:
相关推荐
在EJB3.0中,依赖注入主要通过容器来实现,使得bean不再需要手动查找和管理依赖。 依赖注入的基本概念是,当一个对象(调用者)需要另一个对象(被调用者)协助时,不再由调用者直接创建被调用者的实例,而是由外部...
BMP (Bean Managed Persistence) 是另一种实体Bean的持久化方式,在EJB1.1规范中,BMP要求开发者自行管理实体Bean的持久化逻辑,而不是依赖容器。 **编写一个EJB1.1的BMP程序** 1. **定义接口**:包括`remote`和`...
总的来说,这个“图书馆管理系统代码(Ejb3.0)”项目是一个很好的学习EJB3.0及其在实际应用中的实例,它涵盖了企业级开发中的许多关键概念,如持久化、事务管理、依赖注入以及Web接口的设计。对于想要深入理解Java EE...
理解EJB的生命周期、注入机制(例如,依赖注入通过@EJB注解)以及事务管理(EJB支持声明式事务管理)也是开发者需要掌握的关键概念。 文件名“pafa中使用ejb.doc”可能包含更详细的步骤、示例代码或案例研究,以...
- 配置JNDI连接以在Tomcat中远程访问EJB。 - **JBOSS集成环境中的WEB应用调用EJB**: - 在同一服务器上配置JBOSS和Tomcat以实现无缝通信。 #### 3. 开发前的准备 - **熟悉JBOSS目录结构**: - `bin`:包含启动...
Spring框架可能作为依赖注入容器,与Struts和EJB协同工作,提供更好的组件管理和解耦;还有可能使用JPA(Java Persistence API)作为EJB3.0的替代方案,或者结合JSF(JavaServer Faces)来创建用户界面。 在文件...
- **依赖注入**:EJB支持依赖注入,允许bean通过注解直接获取所需的其他bean或服务,如JDBC数据源、邮件服务等,而无需手动查找。 - **事务管理**:EJB支持声明式事务管理,开发人员只需在方法上添加事务属性,容器...
EJB的事务属性是指EJB容器如何管理和控制EJB方法执行过程中的事务边界。这些属性定义了EJB方法调用时事务的开始、结束以及与其他事务的关系,对于确保数据的一致性和完整性至关重要。接下来,我们将详细解析EJB的六...
依赖注入是一种设计模式,用于自动管理组件间的依赖关系,提高代码的可测试性和灵活性。 **2.11.1 资源类型的注入** 包括数据源、消息队列等资源的自动注入。 **2.11.2 注入与继承关系** 即使子类继承了父类,也...
EJB设计模式是软件开发中的重要概念,它借鉴了设计模式的经典理论,目的是提升EJB架构的灵活性、可扩展性、可维护性和性能。通过运用这些模式,开发者能够更好地组织和管理EJB组件,降低系统的耦合度,提高组件的...
在学生教务管理系统中,EJB可能包含了如学生管理、课程管理、成绩管理等业务逻辑,这些逻辑被封装在可重用的bean中,使得系统结构更加清晰,易于维护和扩展。 4. **学生与教务系统**: 系统的主要功能围绕学生信息...
3. **部署描述符**:在ejb-jar.xml文件中,你需要定义EJB的元数据,包括bean的名称、接口、实现类、事务管理策略等。 4. **注解配置**:从Java EE 5开始,可以使用注解(如`@Stateless`、`@Stateful`、`@Singleton`...
- **EJB 3.0**:减少了对部署描述符的依赖。EJB 3.0支持使用元数据驱动的方式进行配置,即通过注解(Annotations)来指定EJB的行为,使得开发更加便捷。 #### 四、Home接口的变化 - **EJB 2.0**:需要为每个实体...
在Java企业级开发中,Enterprise JavaBeans (EJB) 是一种核心组件模型,用于构建可扩展、安全且事务管理的服务器端应用程序。EJB3.0是EJB规范的一个重大里程碑,它引入了许多改进,使得EJB更加轻量级、开发者友好,...
- `ejb-3_0-fr-spec-persistence.pdf`:该文档专注于EJB3.0中的持久化机制,即JPA,解释了如何创建和管理对象-关系映射。 - `ejb-3_0-fr-spec-simplified.pdf`:这个版本可能提供了一个简化的EJB3.0规范概述,方便...
通过这个Demo项目,开发者可以学习到如何在Idea中配置和管理EJB项目,理解EJB组件间的交互方式,以及如何利用EJB提供的服务来构建可扩展、可维护的企业级应用。同时,它也能帮助开发者掌握Java EE的其他相关技术,如...
在`ejb-jar.xml`中,还可以定义安全性、依赖注入、定时器服务等高级特性。 `jboss-ejb3.xml`是JBoss AS 7特有的配置文件,用于扩展或覆盖`ejb-jar.xml`中的配置。这个文件允许开发者针对特定的JBoss实现进行更细致...
通过深入学习和理解这些源代码,开发者可以更全面地掌握EJB的使用,包括会话bean的生命周期管理、数据访问、事务控制、定时任务、对象查询、Web服务调用以及依赖注入等关键技能,这对于提升企业级应用开发的能力至关...
本教程将深入探讨EJB中的资源管理和EJB环境,这对于理解如何高效地利用企业级服务至关重要。 **资源管理** 1. **JNDI(Java Naming and Directory Interface)**: EJB中的资源管理始于JNDI,它是Java应用程序查找...