`
xiaolongfeixiang
  • 浏览: 236837 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

EJB中的依赖管理

    博客分类:
  • EJB3
阅读更多
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是按类型注入的还是按某种命名规则注入的?



2
0
分享到:
评论

相关推荐

    EJB依赖注入的原理

    在EJB3.0中,依赖注入主要通过容器来实现,使得bean不再需要手动查找和管理依赖。 依赖注入的基本概念是,当一个对象(调用者)需要另一个对象(被调用者)协助时,不再由调用者直接创建被调用者的实例,而是由外部...

    实战EJB 实战EJB 实战EJB

    BMP (Bean Managed Persistence) 是另一种实体Bean的持久化方式,在EJB1.1规范中,BMP要求开发者自行管理实体Bean的持久化逻辑,而不是依赖容器。 **编写一个EJB1.1的BMP程序** 1. **定义接口**:包括`remote`和`...

    图书馆管理系统代码(Ejb3.0)

    总的来说,这个“图书馆管理系统代码(Ejb3.0)”项目是一个很好的学习EJB3.0及其在实际应用中的实例,它涵盖了企业级开发中的许多关键概念,如持久化、事务管理、依赖注入以及Web接口的设计。对于想要深入理解Java EE...

    pafa中使用ejb

    理解EJB的生命周期、注入机制(例如,依赖注入通过@EJB注解)以及事务管理(EJB支持声明式事务管理)也是开发者需要掌握的关键概念。 文件名“pafa中使用ejb.doc”可能包含更详细的步骤、示例代码或案例研究,以...

    EJB3.0中文 版

    - 配置JNDI连接以在Tomcat中远程访问EJB。 - **JBOSS集成环境中的WEB应用调用EJB**: - 在同一服务器上配置JBOSS和Tomcat以实现无缝通信。 #### 3. 开发前的准备 - **熟悉JBOSS目录结构**: - `bin`:包含启动...

    图书管理系统(strtust+EJB)

    Spring框架可能作为依赖注入容器,与Struts和EJB协同工作,提供更好的组件管理和解耦;还有可能使用JPA(Java Persistence API)作为EJB3.0的替代方案,或者结合JSF(JavaServer Faces)来创建用户界面。 在文件...

    EJB技术代码样例

    - **依赖注入**:EJB支持依赖注入,允许bean通过注解直接获取所需的其他bean或服务,如JDBC数据源、邮件服务等,而无需手动查找。 - **事务管理**:EJB支持声明式事务管理,开发人员只需在方法上添加事务属性,容器...

    EJB的事务属性

    EJB的事务属性是指EJB容器如何管理和控制EJB方法执行过程中的事务边界。这些属性定义了EJB方法调用时事务的开始、结束以及与其他事务的关系,对于确保数据的一致性和完整性至关重要。接下来,我们将详细解析EJB的六...

    EJB3.0中文文档

    依赖注入是一种设计模式,用于自动管理组件间的依赖关系,提高代码的可测试性和灵活性。 **2.11.1 资源类型的注入** 包括数据源、消息队列等资源的自动注入。 **2.11.2 注入与继承关系** 即使子类继承了父类,也...

    EJB设计模式Ejb中涉及到的设计模式详解

    EJB设计模式是软件开发中的重要概念,它借鉴了设计模式的经典理论,目的是提升EJB架构的灵活性、可扩展性、可维护性和性能。通过运用这些模式,开发者能够更好地组织和管理EJB组件,降低系统的耦合度,提高组件的...

    基于JSP Servlet和EJB的学生教务管理系统

    在学生教务管理系统中,EJB可能包含了如学生管理、课程管理、成绩管理等业务逻辑,这些逻辑被封装在可重用的bean中,使得系统结构更加清晰,易于维护和扩展。 4. **学生与教务系统**: 系统的主要功能围绕学生信息...

    EJB配置部署打包实例

    3. **部署描述符**:在ejb-jar.xml文件中,你需要定义EJB的元数据,包括bean的名称、接口、实现类、事务管理策略等。 4. **注解配置**:从Java EE 5开始,可以使用注解(如`@Stateless`、`@Stateful`、`@Singleton`...

    ejb2.0与ejb3.0的区别

    - **EJB 3.0**:减少了对部署描述符的依赖。EJB 3.0支持使用元数据驱动的方式进行配置,即通过注解(Annotations)来指定EJB的行为,使得开发更加便捷。 #### 四、Home接口的变化 - **EJB 2.0**:需要为每个实体...

    ejb\ejb3.0实例教程

    在Java企业级开发中,Enterprise JavaBeans (EJB) 是一种核心组件模型,用于构建可扩展、安全且事务管理的服务器端应用程序。EJB3.0是EJB规范的一个重大里程碑,它引入了许多改进,使得EJB更加轻量级、开发者友好,...

    EJB3.0规范-EJB3.0 SPECIFICATION

    - `ejb-3_0-fr-spec-persistence.pdf`:该文档专注于EJB3.0中的持久化机制,即JPA,解释了如何创建和管理对象-关系映射。 - `ejb-3_0-fr-spec-simplified.pdf`:这个版本可能提供了一个简化的EJB3.0规范概述,方便...

    Idea搭建EJB架构Demo项目源代码

    通过这个Demo项目,开发者可以学习到如何在Idea中配置和管理EJB项目,理解EJB组件间的交互方式,以及如何利用EJB提供的服务来构建可扩展、可维护的企业级应用。同时,它也能帮助开发者掌握Java EE的其他相关技术,如...

    jboss7ejb配置文件

    在`ejb-jar.xml`中,还可以定义安全性、依赖注入、定时器服务等高级特性。 `jboss-ejb3.xml`是JBoss AS 7特有的配置文件,用于扩展或覆盖`ejb-jar.xml`中的配置。这个文件允许开发者针对特定的JBoss实现进行更细致...

    EJB学习源代码

    通过深入学习和理解这些源代码,开发者可以更全面地掌握EJB的使用,包括会话bean的生命周期管理、数据访问、事务控制、定时任务、对象查询、Web服务调用以及依赖注入等关键技能,这对于提升企业级应用开发的能力至关...

    EJB高级——资源管理与EJB环境.rar_java ppt

    本教程将深入探讨EJB中的资源管理和EJB环境,这对于理解如何高效地利用企业级服务至关重要。 **资源管理** 1. **JNDI(Java Naming and Directory Interface)**: EJB中的资源管理始于JNDI,它是Java应用程序查找...

Global site tag (gtag.js) - Google Analytics