首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

EJB实例教程札记(三)

2012-11-21 
EJB实例教程笔记(三)EJB实例教程笔记(三)电子书EJB3实例教程byLiHuoming.pdf笔记2.11 依赖注入(dependency

EJB实例教程笔记(三)
EJB实例教程笔记(三)

电子书EJB3实例教程byLiHuoming.pdf笔记

2.11 依赖注入(dependency injection)
在 传统的开发中,我们要使用某个类对象,可以通过new object来得到。但是在EJB中,需要通过JNDI查找或注入注释。
接口类Injection.java:
package com.sillycat.ejb;

public interface Injection {
public String sayHello();
}

EJB类InjectionBean.java如下:
package com.sillycat.ejb.impl;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;

import com.sillycat.ejb.HelloWorld;
import com.sillycat.ejb.Injection;

@Stateless
@Remote(Injection.class)
public class InjectionBean implements Injection{

@EJB (beanName="HelloWorldBean") HelloWorld helloWorld;
public String sayHello() {
return helloWorld.SayHello("注入类");
}

}
其中的@EJB  beanName引入类另外一个EJB,helloBean。
我的测试类InjectionTest.java如下:
package com.sillycat.ejb;

import javax.naming.InitialContext;

import org.junit.BeforeClass;
import org.junit.Test;

public class InjectionTest {

protected static Injection injection;

@BeforeClass
public static void setUpBeforeClass() throws Exception {
InitialContext ctx = new InitialContext();
injection = (Injection) ctx.lookup("InjectionBean/remote");
}

@Test
public void testSayHello() {
injection.sayHello();
}
}
@EJB注释除了可以标注字段,还可以标示到属性的setter方法上,比如替换成如下写法:
private HelloWorld helloWorld;

@EJB(beanName = "HelloWorldBean")
public void setHelloWorld(HelloWorld helloWorld) {
this.helloWorld = helloWorld;
}
如果注入的EJB在不同的jar,那么装载次序就有要求,不然要报找不到类。需要修改配置文件:
JBOSS_HOME/server/default/conf/jboss-service.xml找到里面的
<!--
<attribute name="URLComparator">org.jboss.deployment.DeploymentSorter</attribute>
-->
<attribute name="URLComparator">org.jboss.deployment.scanner.PrefixDeploymentSorter</attribute>
然后给jar文件编号,格式为:01_XXXX.jar, 02_XXXX.jar,JBOSS将根据编号从小到大的顺序发布。

2.11.1 资源类型的注入
注入DataSource
@Resource(mappedName="java:/DefaultMySqlDS") DataSource myDb;

注入DataSource带验证
@Resource(mappedName="java:/DefaultMySqlDS",authenticationType=AuthenticationType.APPLICATION) DataSource myDB
使用的时候要这样:
Connection conn = null;
conn = myDb.getConnection("root","*****");

注入事物类
@Resource private javax.transaction.UserTransaction utx;

注入时间服务
@Resource private javax.ejb.TimerService tms;

注入SessionContext
@Resource private javax.ejb.SessionContext ctx;

注入消息工厂
@Resource(mappedName="QueueConnectionFactory")
private javax.jms.QueueConnectionFactory factory;

注入消息连接地址
@Resource(mappedName="queue/mail")
private javax.jms.Queue queue;

2.11.2 注入与继承关系
InjectionBean注入了HelloWorld
那么public class SubInjectionBean extends InjectionBean 会默认也注入HelloWorld

2.11.3 自定义注入注释

2.12 定时服务(Timer Service)











热点排行