`
longgangbai
  • 浏览: 7341160 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

EJB3..0的依赖注入的使用

阅读更多
为什么我喜欢EJB 3.0并且尤其喜欢EJB 3.1

 

 

 

package com.easyway.tbs;

/**
 *
 * @author longgangbai
 *
 */
public interface Injection {
 public String sayHello();
}

 

 

package com.easyway.tbs;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;
/**
 * 依赖注入的应用
 * @author longgangbai
 *
 */

@Stateless
@EJB(//@EJB注解工作时,会自动引发容器在JNDI ENC中为被注入的元素创建一个注册项,这不仅对@EJB注解使用,对其他的环境用注解也使用,名称有name决定,如果没有,则容器
  name="ejb/HellWorld",  //ejb 引用的JNDI ENC注册项名称,相对于java:comp/env 上下文
  beanName="HelloWorldBean", //被调用EJB的名称   其值与@Stateless.name(),@Stateful.name(),或者ejb-jar.xml中<ejb-name>元素所指定的值相等。
  beanInterface=HelloWorld.class //bean接口的名称,用于区分本地还是远程接口,如果在bean class 上面 必须指定该属性值,其他可以省略
       // ,mappedName="" //EJB的全局JNDI的名称,而全局JNDI的名称与容器厂商有关,设置该属性值将不利于移植
  // 
)//通过注解添加注册项
/*
    上面代码相等于如下配置
    <enterprise-beans>
     <session>
        <ejb-name>InjectionBean</ejb-name>
         <ejb-ref>
            <ejb-ref-name>ejb/HelloWorld</ejb-ref-name>
             <ejb-ref-type>Session</ejb-ref-type>
             <remote>com.easyway.tbs.HelloWorld</remote>
             <ejb-link>HelloWorldBean</ejb-link>
         </ejb-ref>
     </session>
  </enterprise-beans>
  
 */
@Remote(Injection.class)
public class InjectionBean  implements Injection{
 /**
  *
  * 备注如果要从ENC中户获取资源的引用,我们可以通过注册项目名称进行JDNI查找,
  * 例如:
  *   HelloWorld  helloWorld=(HelloWorld)ctx.lookup("java:comp/env/ejb/HelloWorld")
  *  
  *   comp:代表组件,
  *   java:comp/env指向该EJB的ENC,
  *   ejb/HellWorld是在ENC中定义的注册项的名称。
  *  
  * EJB的注入方式
  */
 private HelloWorld hellworld;
 

 @EJB(beanName="HelloWorldBean")//采用EJB注入的方式
 public void setHelloWorld(HelloWorld hellworld)
    {
  this.hellworld=hellworld;
    }

  
 public String sayHello(){
      return hellworld.sayhello("注入者");
     }
}

 

 

简介

EJB 3是Java EE 5中获取提升最多的技术,在即将发布的Java EE 6中 EJB 3.1将进一步带给大家惊喜。Adam结合他的项目实践,在本文中详细列举了他所喜爱EJB 3的特性。

Marc Fleury在2002年写了一篇值得一读的文章 蓝皮书 "为什么我爱EJB"  (下载),他的观点在当时是令人惊讶的。我那是已经在使用EJB,但并不真正地爱他们 :-)。我没有到哪个程度,但我真的喜欢EJB 3.0。原因如下:

  1. 性能开销低。Glassfish v2中 只有大约3%.
  2. EJB 3.0是线程安全的(thread save)。这是一个巨大的优点。 每个线程所都拥有的实例,包括所有注入的资源比如实体管理器(Entity Manager),数据源(Data Source)和JMS,都是线程安全的。最棒的是:容器为你做到了这一切。你只需要一个标识(annotation),比如引用EJB的@EJB,获取 持久化上下文的@PersistenceContext以及引用资源的@Resource :-))。更多讨论请参看"plain old Web Container" :-)(想想POJO-Plain Old Java Object,译者注)。提醒一下:Servlet作为一种单例(singletons)模式不是线程安全的。
  3. EJB 3.0 支持 事务(transactional)。 所以只要成功调用了EJB方法,所有的资源将都是同步的(synchronized),比如写到数据库中的数据,发给服务器的消息等。容器会为你做到这些,你只要知道你所要做的是什么 (这和平台无关,但有时难以实现 :-))
  4. 在我所有的项目中都将部署描述符而替换成了annotation。这样就只有一个persistence.xml文件需要部署。EJB在重构,部署和移植方面都表现良好。
  5. EJB 3.0是真正可移植的(它可以让你中立于实现提供商和架构)。 相比EJB 2.1,这点更加突出,因为私有的部署描述符不再需要。实际上,EJB 3不再需要任何描述符。你只要部署干干净净的jar文件,然后附上在meta-inf中的persistence.xml,而其他都是可选的。 
  6. 在EJB 3 中,惯例优先原则(Convention Over Configuration)或正式地称为基于期望的配置( Configuration By Exception) ,它们和依赖注入(Dependency Injection) 的结合非常完美。大多数场合,开发EJB只需要少量的代码(比如没有"new"的调用,而只需要做个声明)
    @Stateless
    public class SampleBean implements Sample {
        @PersistenceContext
        private EntityManager em;


        @EJB
        private Another anotherBean;
  7. Getters 和Setters方法是可选的: 不仅对于EJB,同样对于JPA。 资源可以直接注入到字段之中。
  8. 缺省和annotation的配置能够被XML描述符覆盖。而XML描述符不需面面俱到 - 你只要指定感兴趣的部分。你可以为某个特定阶段(比如测试、集成)开发通过XML描述对产品进行重新设置。
  9. 不需要特别的工具。你只需要annotation,一个Java 6 的编辑器和一个Jar文件。 无论是IntelliJ,Eclipse (含500附件的插件:-))还是Netbeans 6.1都对EJB 3提供了完善的支持,并对应用服务器也做了很好的集成,EJB的部署、取消部署、配置等都可以直接由IDE来管理。
  10. EJB 3.1可嵌入的特性很可能将获得支持。Glassfish v3已经对此提供支持。在GlassFish的测试中,我发现容器的启动只要令人惊讶的500ms。 此外,JBoss也支持可嵌入。
  11. EJB 3.1将提供许多有用的特性:Singletons (更便于配置和用于启动类等), 更好的timer支持 (cron-like),将来的异步方法,可选的local-interfaces 和基于WAR包的部署。
  12. 池的设置和线程池的配置对伸缩性的控制非常有帮助(除非容器崩溃,否则你不会为无法确定伸缩性而头痛:-))
  13. 和脚本语言交互的良好支持(包括JavaScript, Groovy)
  14. EJB是缺省可以被管理和监控的。EJB部署到容器后,你就可以对其方法调用和性能等进行监控。
  15. 不需事先依赖任何的架构和库等。ejb-jar和容器为你的应用代码打理一切,所以抛出像NoClassDefFoundErrors,ClassCastExceptions这样异常的可能会降到最低。
  16. EJB 3.0是超级紧凑的技术。实际上你已经不可能再为它做些什么简化 :-)。当然,这方面我也愿意听大家的意见。
  17. 他们非常容易测试-因为EJB就是一些类和接口。你甚至可以在容器之外启动它们。
  18. 即使最简单的use cases也可以用EJB 3高效的实现。比如关于增删查改的 CRUD的例子:
分享到:
评论

相关推荐

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

    2. 自动依赖注入:通过`@EJB`注解,可以实现bean之间的自动依赖注入,简化了组件间的交互。 3. POJO(Plain Old Java Object)支持:EJB 3.x中的bean不再需要继承特定的基类或实现接口,它们可以是普通的Java类。 ...

    JSF-EJB3.rar_EJB3.rar_base.util.EJBUtil_ejb jsf_jsf ejb3_jsf mys

    4. **依赖注入(Dependency Injection, DI)**:EJB3支持通过@EJB注解进行依赖注入,使得组件之间的依赖关系更加清晰,减少了代码的耦合。 **JSF的关键特性** 1. **组件模型**:JSF使用UI组件库,如h:inputText和p...

    jboss7ejb配置文件

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

    基于Java的实例开发源码-ejbCreate函数用于初始化一个EJB实例.zip

    1. **构造函数**:使用带有注解的构造函数进行依赖注入,这允许你在创建Bean实例时就完成初始化。 2. **@PostConstruct**:标记一个方法为`@PostConstruct`,这个方法会在Bean实例创建并依赖注入完成后被容器自动...

    javax.ejb.jar.zip

    11. **依赖注入**:EJB支持依赖注入(Dependency Injection,DI),容器可以直接将所需的资源注入到Bean中,减少代码的耦合度。 通过理解和掌握这些知识点,开发者可以有效地利用EJB来构建高效、稳定且易于维护的...

    EJB3.rar

    6. **依赖注入(Dependency Injection,DI)**:EJB3.0引入了依赖注入的概念,通过@EJB、@Inject等注解,容器能够自动将依赖的服务注入到Bean中,减少了代码的耦合度。 7. **查询语言(JPQL,Java Persistence ...

    基于Java的ejbCreate函数用于初始化一个EJB实例.zip

    在EJB 3.x及更高版本中,这种特定的方法已经被注解和依赖注入(Dependency Injection)机制所取代,但理解ejbCreate对于理解EJB的历史和发展仍然很有价值。 1. EJB生命周期: EJB实例经历几个生命周期阶段,包括...

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

    在WebLogic 10.x中,EJB 3.0的性能和稳定性已经得到了显著提升,支持了诸如依赖注入、事务管理、安全性和持久化等功能。然而,开发过程中需要注意的一些常见问题包括:内存泄漏、线程安全问题、性能优化(如缓存策略...

    ejb3.rar_EJB3

    此外,EJB3还引入了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP),使得服务的获取和调用更为便捷。例如,通过`@EJB`注解,`CustomerWEB`可以直接注入`customer3`实体...

    EJB3.pdf

    2. **依赖注入(Dependency Injection, DI)**:EJB3 支持JSR 330规范的依赖注入,通过`@Inject`注解,容器可以自动管理和提供bean之间的依赖关系,减少了手动管理对象实例的麻烦。 3. **实体 Bean(Entity Beans)...

    ppt课件-第10章 EJB编程.zip

    此外,EJB 3.x引入了依赖注入(DI),允许bean通过`@Inject`注解获取所需的依赖,减少代码间的耦合。 ### 7. JNDI查找 客户端通过Java Naming and Directory Interface (JNDI)查找并获取EJB的引用,然后调用其方法...

    用EJB 3.zip

    4. **依赖注入**:EJB 3引入了JSR 250规范中的CDI(Contexts and Dependency Injection),允许通过注解自动注入Bean所需的服务和资源,如`@Inject`、`@EJB`、`@Resource`等。 5. **查询语言**:EJB 3引入了JPQL...

    ejbCreate函数用于初始化一个EJB实例.zip_QRL_YVVX_初始化一个EJB实例

    在EJB 2.x版本中,`ejbCreate`是标准的生命周期方法之一,而在EJB 3.x及更高版本中,推荐使用注解(@PostConstruct)来替代,以符合更现代的Java编程实践。 ### EJB生命周期方法的演变: 1. **EJB 2.x**: - 实体...

    EJB3.pdf EJB3 文档 资料

    理解两者之间的区别,并掌握如何改变会话Bean的JNDI名称、如何管理会话Bean的生命周期,以及如何使用拦截器和依赖注入等高级特性,对于开发高效、可扩展的企业级应用至关重要。 #### 五、JMS(Java Message Service...

    基于Java的源码-ejbCreate函数用于初始化一个EJB实例.zip

    4. 容器管理的依赖注入:在Java EE中,容器负责管理bean的依赖,通过注解如@EJB、@Inject、@Resource等,可以在ejbCreate或@PostConstruct方法中注入其他bean或资源,简化了代码并提高了可维护性。 5. 事务管理:...

    EJB3.rar_site:www.pudn.com

    5. **依赖注入(Dependency Injection, DI)**:通过`@EJB`注解实现组件间的依赖关系,简化了组件的组装和测试。 **EJB3与JavaEE其他组件的协作:** EJB3可以与Servlet、JSP、JSF(JavaServer Faces)、JMS、JPA、...

    Manning.EJB.3.in.Action.Apr.2007.rar

    4. **依赖注入(Dependency Injection)**:EJB 3.0引入了依赖注入,使得对象之间的关系可以通过容器来管理,而不是硬编码。CDI(Contexts and Dependency Injection for the Java EE Platform)也是依赖注入的一种...

    EJB依赖注入的原理

    例如,以下代码展示了如何在EJB3.0中使用依赖注入: ```java @Stateless public class ServiceBean implements Service { private javax.sql.DataSource myDS; @Resource(mappedName="LocalDataSource") ...

    基于java的ejbCreate函数用于初始化一个EJB实例.zip

    在EJB 3.x引入的依赖注入(Dependency Injection,DI)和POJO(Plain Old Java Object)模型,使得EJB的使用更加简单和灵活。开发者可以通过注解直接在类和方法上声明依赖,而无需实现特定接口或继承特定基类。 总...

    eclipse-ejb项目.zip

    这个模块与EJB模块通过Java EE的依赖注入(Dependency Injection)机制进行通信,使得Web层可以直接使用EJB服务,而无需手动管理对象的生命周期。 至于Wildfly(或JBOSS),它是一个开源的应用程序服务器,完全支持...

Global site tag (gtag.js) - Google Analytics