`

EJB 3.0开发指南之依赖注入

    博客分类:
  • EJB3
ejb 
阅读更多
依赖注入(Dependency Injection),又称作控制反转(IOC),本来是一种设计模式,现在被吵得热火朝天,有点过了。比较有名项目如String,picoContainer等。

  在EJB3.0中,可以通过在字段和设置方法上加上注释注入依赖,我想在很快会有新的项目,或者在原来的项目的基础上,一些IOC容器会采用注释的方式注入依赖,JDK5.0加入的注释的确是一个很强大的功能,相对而言,在.net中的属性却没有发挥那么大的价值。这就是开源的威力,成千上万的在开源java程序员不断涌现出新的想法新的功能。

  看下面的例子:我们知道,JBOSS中已经默认配置了一个数据源,它的JNDI名称是"java:/DefaultDS"。下面这个例子声明了一个数据源,通过注释,就可以将JBOSS的这个默认的数据源赋值给它。

@Resource(jndiName="java:/DefaultDS")
public DataSource customerDB;
Resource注释的声明
@Target({TYPE, METHOD, FIELD, PARAMETER}) @Retention(RUNTIME)

public @interface Resource {

String name() default "";

String resourceType() default "";

AuthenticationType authenticationType() default CONTAINER;

boolean shareable() default true;

String jndiName() default "";

}


public enum Authentication Type {

CONTAINER,

APPLICATION

}

@Target(TYPE) @Retention(RUNTIME)

public @interface Resources {

Resource[] value();

}

  Resource的name指向一个在环境属性中命名的资源,AuthenticationType用来指定是容器还是EJB组件来进行身份验证,sharebale指定是否共享,jndiName用来指定JDNI中的名称。resourceType()用来指定资源的类型。

  如果name和resourceType都指向被注释的程序成员,AuthenticationType和resourceType都是缺省的,则可以使用Inject注释:

@Inject(jndiName="java:/DefaultDS")

public DataSource customerDB;

  对于单例的成员,你可以更简化:

@Inject javax.ejb.SessionContext ctx;

@Inject javax.ejb.TimerService timer;

@Inject javax.ejb.UserTransaction ut;

@Inject javax.ejb.EntityManager manager;

  Resources注释可以注入多个资源。

  在Eclipse中导入本文提供的例子DI。

  这个例子从数据库中读取JMS_USER表,并显示表中的内容。这个例子使用依赖注入的方式得到JBOSS默认的数据源。

  这个例子主要有5个文件:

   JmsUsers.java:业务接口。

   JmsUsersBean.java:业务实现类。将来我们开发的EJB也都是这样命名(在接口名上加上Bean)。

   Client.java:测试EJB的客户端类。

   jndi.properties:jndi属性文件,提供访问jdni的基本配置属性。

   Build.xml:ant 配置文件,用以编译、发布、测试、清除EJB。

  下面针对每个文件的内容做一个介绍。

JmsUsers.java

package com.kuaff.ejb3.di;
import java.util.List;
import javax.ejb.Remote;
import javax.sql.*;

@Remote
public interface JmsUsers
{
 public List<String> getUsers();
}

  这个接口很简单,定义了一个得到全部用户的方法,JBOSS默认使用接口的全称作为它的JNDI名。在上面的例子中,它的全称可以通过JmsUsers.class。getName()得到。

CounterBean.java

package com.kuaff.ejb3.di;
import java.util.List;
import java.util.ArrayList;
import javax.ejb.Stateless;
import javax.ejb.Resource;
import javax.sql.*;
import java.sql.*;


@Stateless
public class JmsUsersBean implements JmsUsers
{
 @Resource(jndiName="java:/DefaultDS",resourceType="javax.sql.DataSource")
 public DataSource customerDB;
 public List<String> getUsers()
 {
  List<String> list = new ArrayList<String>();
  try
  {
   Connection conn = customerDB.getConnection();
   Statement st = conn.createStatement();
   ResultSet rs = st.executeQuery("select * from jms_users");
   while(rs.next())
   {
    list.add(rs.getString("userid"));
   }
  }
  catch(SQLException e)
  {}
  return list;
 }
}

  这个是业务逻辑的具体实现。一旦这个EJB被容器产生,则容器将JBOSS的数据源注入到customerDB变量上,所以不要以为customerDB没有被初始化,这些工作是容器做的。

Client.java

package com.kuaff.ejb3.di;
import java.util.List;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class Client
{
 public static void main(String[] args)
 {
  InitialContext ctx;
  try
  {
   ctx = new InitialContext();
   JmsUsers users = (JmsUsers) ctx.lookup(JmsUsers.class.getName());
   List<String> jmsUsers = users.getUsers();
   for(String user:jmsUsers)
   {
    System.out.printf("用户名:%s%n",user);
   }
  }
  catch (NamingException e)
  {
   e.printStackTrace();
  }
 }
}

  这个类用来测试我们发布的EJB组件。显示从JMS_USERS表中读取的数据。

  请运行{$JBOSS_HOME}/bin目录下的run.bat: run ?call,启动JBOSS。

  在Eclipse的Ant视图中执行ejbjar target。或者在命令行下,进入到此工程目录下,执行ant ejbjar,将编译打包发布此EJB

  在Eclipse的Ant视图中执行run target。或者在命令行下,进入到此工程目录下,执行ant run,测试这个EJB。
分享到:
评论

相关推荐

    2022年EJB 3.0开发指南之依赖注入Java教程.docx

    依赖注入(Dependency Injection,简称DI)是Java编程中一种重要的设计模式,特别是在企业级Java应用(Enterprise JavaBeans,EJB)3.0版本中得到了广泛的应用。依赖注入的核心思想是解耦,它允许开发者在不修改代码...

    EJB3.0开发指南

    ### EJB3.0开发指南知识点详解 #### 一、EJB3.0概述与特点 EJB(Enterprise JavaBeans)3.0是Java EE平台的一部分,用于构建可移植、健壮、重用性强的企业级应用程序。相比于之前的版本,EJB 3.0引入了大量的简化...

    精通EJB 3.0

    5. 依赖注入:EJB 3.0引入了依赖注入(Dependency Injection,DI)的概念,如@Autowired和@Resource,使得组件之间的关联可以通过容器自动管理,减少了手动装配的工作。 6. 无状态和有状态会话Bean:@Stateless和@...

    ejb3.0 免费 教程

    3. **ejb3.0-1.pdf** - 这可能是EJB 3.0的特定部分或专题教程,比如可能专门讲解新的JPA(Java Persistence API)或者EJB 3.0的容器服务,如依赖注入、声明式事务管理等。 4. **EJB3.rar** - 这个RAR文件可能包含源...

    EJB3.0标准技术手册与JBoss实践指南第5版.rar

    4. **依赖注入**:EJB3.0引入了依赖注入,使得组件之间可以通过接口进行协作,而无需硬编码引用。@EJB、@Inject和@Resource注解分别用于注入EJB、CDI(Contexts and Dependency Injection)和资源。 5. **容器管理...

    ejb3.0中英文规范

    **ejb3.0中英文规范** Enterprise JavaBeans (EJB) 3.0是Java平台上企业级应用程序开发的重要组成部分,它提供了服务器端组件模型,用于构建可扩展、安全且可移植的分布式业务应用程序。EJB 3.0规范旨在简化开发...

    ejb3.0src.rar_ejb

    4. **依赖注入**:EJB 3.0利用Java Dependency Injection (JSR 330)标准,如`@Inject`和`@Named`,实现了依赖查找和注入,降低了组件之间的耦合度。 5. **查询语言JPA QL**:EJB 3.0引入了JPQL(Java Persistence ...

    精通EJB 3.0第四版

    4. **依赖注入(Dependency Injection,DI)**:EJB 3.0引入了JSR 330规范,支持依赖注入,允许容器自动管理Bean之间的依赖关系,降低了代码的耦合度。 5. **注解(Annotations)**:EJB 3.0大量使用注解,如`@...

    ejb3.0实例教程

    EJB3.0相比之前的版本,引入了许多简化开发过程的特性,例如注解、依赖注入和改进的消息驱动Bean。 #### 运行环境配置 配置EJB3.0的运行环境,首先需要下载并安装JBoss服务器。JBoss是支持EJB3.0规范的开源应用...

    ejb3.0学习资料PDF格式

    EJB 3.0支持JSR 330规范的依赖注入,允许bean之间通过`@Inject`注解来声明和注入依赖。这有助于降低组件之间的耦合度,提高代码的可测试性和可维护性。 **6. 事务管理** EJB 3.0提供了强大的事务管理能力。开发者...

    EJB3.0相关

    与前一版本相比,EJB3.0引入了许多简化开发流程的新特性,如注解驱动的配置、无接口视图、依赖注入等,极大地提高了开发效率和组件的可维护性。 ### 主要特性解析 #### 注解驱动的配置 EJB3.0允许使用注解来定义...

    最新EJB3.0教程

    《最新EJB3.0教程》是一份详尽的指南,专为希望深入了解Java企业级应用程序接口(EJB)3.0版本的开发者设计。EJB3.0是Java平台企业版(J2EE)的一部分,旨在简化企业级Java应用程序的开发过程,通过提供组件模型来支持...

    EJB3.0(PDF)电子书

    EJB (Enterprise JavaBeans) 3.0 是一种Java企业级应用的标准规范,它简化了EJB 2.x 版本中复杂的编程模型,引入了许多新特性,如依赖注入、增强的会话Bean支持、简化实体Bean模型等。本文档主要基于《JbossEJB3.0...

    Jboss EJB3.0教程

    - 如何在EJB3.0中利用注解自动完成依赖注入。 - **定时服务 (Timer Service)**: - 介绍如何利用EJB3.0提供的定时服务功能实现任务调度。 - **安全服务 (Security Service)**: - 详述EJB3.0的安全模型和认证...

    EJB3.0的学习教材

    通过对上述知识点的深入学习,开发者不仅能够理解 EJB3.0 的基础概念和技术细节,还能够掌握如何在实际项目中有效地利用 EJB3.0 进行高效的企业级应用开发。这将有助于提升项目的质量和开发效率,同时也能更好地应对...

Global site tag (gtag.js) - Google Analytics