文档章节

EJB---->依赖注入(dependency injection)

小强斋太
 小强斋太
发布于 2016/11/09 20:08
字数 737
阅读 23
收藏 0
使用@EJB 注释,你可以将EJB存根对象注入到任何EJB 3.0 容器管理的POJO 中。如果注释用在一个属性变量上,容器将会在它被第一次访问之前赋值给它。
package com.foshanshop.ejb3.impl;
import com.foshanshop.ejb3.HelloWorld;
import com.foshanshop.ejb3.Injection;
import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;
@Stateless
@Remote ({Injection.class})
public class InjectionBean implements Injection {
@EJB (beanName="HelloWorldBean")
HelloWorld helloworld;
public String SayHello() {
return helloworld.SayHello("注入者");
}
@EJB 注释的beanName 属性指定EJB 的名称(如果没有设置过@Stateless 或@Stateful 的name 属性,默认为不带
包名的类名),他的另一个属性mappedName 指定EJB 的全局JNDI 名。
下面的片断演示了如何使用beanName 或mappedName 属性查找HelloWorldBean 会话bean
public class InjectionBean implements Injection {
@EJB (beanName="HelloWorldBean")
//@EJB (mappedName="HelloWorldBean/remote")
HelloWorld helloworld;
@EJB 注释如果被用在JavaBean 风格的setter 方法上时,容器会在属性第一次使用之前,自动地用正确的参数调
用bean 的setter 方法。下面的片断演示了这是如何做的
public class InjectionBean implements Injection {
HelloWorld helloworld;
@EJB (beanName="HelloWorldBean")
public void setHelloworld(HelloWorld helloworld) {
this.helloworld = helloworld;
}
EJB 3.0 也支持@Resource 注释来注入来自JNDI 的任何资源。下面的例子中演示了如何注入数据源。"java:/DefaultMySqlDS"是数据源DefaultMySqlDS 的全局JNDI 名
public class InjectionBean implements Injection {
@EJB(beanName = "HelloWorldBean")
HelloWorld helloworld;
@Resource(mappedName = "java:/DefaultMySqlDS")
DataSource myDb;
java:comp/env 是环境命名上下文(environment naming context(ENC)),是在EJB规范1.1以后引入的,引入这个是为了解决原来JNDI查找所引起的冲突问题,也是为了提高EJB或者J2EE应用的移植性。ENC是一个引用,引用是用于定位企业应用程序的外部资源的逻辑名。引用是在应用程序部署描述符文件中定义的。在部署时,引用被绑定到目标可操作环境中资源的物理位置(JNDI名)。使用ENC是把对其它资源的JNDI查找的硬编码解脱出来,通过配置这个引用可以在不修改代码的情况下,将引用指向不同的EJB(JNDI)。 在J2EE中的引用常用的有:
---------JDBC 数据源引用在java:comp/env/jdbc 子上下文中声明
---------JMS 连接工厂在java:comp/env/jms 子上下文中声明
---------JavaMail 连接工厂在java:comp/env/mail 子上下文中声明
---------URL 连接工厂在 java:comp/env/url子上下文中声明

如果JNDI 对象在本地(java:comp/env)JNDI 目录中,你只需给定他的映谢名称即可,不需要带前缀,

如下面例子注入一个消息connection factory 和一个messaging queue

@Resource (mappedName="ConnectionFactory")
QueueConnectionFactory factory;
@Resource (mappedName="queue/A")
Queue queue;

对于"well-known"对象,@Resource 注释可以不指定JNDI 名就能注入他们,他通过变量的类型就能获得他的JNDI
名。
下面是一些例子。

@Resource
TimerService tms;
@Resource
SessionContext ctx;

和@EJB 注释相同, @Resource 注释也可以被用在JavaBean 风格的setter 方法上。

 

本文转载自:http://www.cnblogs.com/xqzt/archive/2012/05/15/5637404.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
私信 提问
Weld 1.1.1.Final 发布,JSR-299框架

Weld 1.1.1.Final 发布了.Weld 是一个实现了 JSR-299 的框架。 JSR 299 是 Java EE 6 中非常重要的部分,提供了如下功能: 1. 类型安全的依赖注入 2. 注入对象的上下文生存周期管理 3. 事件提...

红薯
2011/04/07
335
0
Weld 2.3.2.Final 发布,CDI 规范实现

Weld 2.3.2.Final 发布,此版本解决了 15 个 issues,详细改进请看发行说明。 值得关注的改进和 bug 修复 Weld proxies - add workaround for IBM JVM 8 (WELD-2056 and DELTASPIKE-1010) Fi...

叶秀兰
2015/12/13
452
0
CDI(Weld)高级JavaEE环境组件资源

Java EE 5引入了依赖注入了有限的支持,在部分环境下注入。一个组件的环境资源是一个Java EE组件,例如 JDBC datasource, JMS queue or topic, JPA persistence context, remote EJB or web ...

Zhao-Qian
2014/05/18
0
0
处理异常:org.eclipse.jdt.internal.compiler.CompilationResult.getProblems ()

异常信息:   java.lang.NoSuchMethodError: org.eclipspiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/IProblem; 发生场景:   maven正常编译后,由于引用jsp......

hi_jyf
2016/11/10
0
0
在eclipse上使用maven maven-war-plugin插件过滤一个子项目的xml文件不成功

maven配置 org.apache.maven.plugins maven-war-plugin 2.4 com.chinarb.new RBManagerNew-Model **/web.xml WEB-INF/classes/config/ 想把web-inf下面的web.xml过滤掉,但是不能成功不管将*......

joker_zhou
2014/10/16
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

设计模式之工厂模式

本篇博文主要翻译这篇文章: https://www.journaldev.com/1392/factory-design-pattern-in-java 由于翻译水平有限,自认为许多地方翻译不恰当,欢迎各位给出宝贵的建议,建议大家去阅读原文。...

firepation
6分钟前
1
0

中国龙-扬科
9分钟前
0
0
简单谈谈vue的过渡动画

在vue中,实现过渡动画一般是下面这样: `<``transition` `name``=``"fade"``>``<``div``></``div``>``</``transition``>` 用一个transition对元素或者组件进行封装. 在过渡的时候,会......

嫣然丫丫丫
15分钟前
1
0
文件及目录处理

file_get_contents file_put_contens fopen r/r+ 只读打开,指针开头 w/w+ 写入打开,指针开头,清空文件,不存创建 a/a+ 追加打开,指针末尾,不存创建 x/x+ 创建模式打开 b 二进制打开 t 文本打开...

关元
17分钟前
0
0
如何在Angular中使用better-scroll插件

由于需要在一个固定的的高度做无限滚动,本来css的overflow-y也可以完成的,奈何安卓不是很流畅,还很生硬,就是用了第三方库better-scroll,配合angular的ng-content。angular的ng-content和...

前端攻城老湿
23分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部