EJB中的依赖管理
程序员文章站
2024-02-22 21:57:24
...
[size=large][color=blue][b]EJB中的2中依赖管理的形式:[/b][/color][/size]
[size=large][color=blue][b]1、依赖查找[/b][/color][/size]
[size=medium][color=blue]第一种依赖查找的方式:[/color][/size]
[size=medium][color=blue]第二种依赖查找的方式:[/color][/size]
[size=large][b][color=blue]依赖注入[/color][/b][/size]
这种方式,可以将Annotations放在Field或者Setter方法上。这两种的区别,暂不清楚。据说JPA的Entity Bean中2者是有区别的。(以后有时间慢慢研究)
这里的@EJB是按类型注入的还是按某种命名规则注入的?
[size=large][color=blue][b]1、依赖查找[/b][/color][/size]
[size=medium][color=blue]第一种依赖查找的方式:[/color][/size]
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);
}
}
[size=medium][color=blue]第二种依赖查找的方式:[/color][/size]
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();
}
}
[size=large][b][color=blue]依赖注入[/color][/b][/size]
这种方式,可以将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是按类型注入的还是按某种命名规则注入的?
上一篇: mybatis 几个小技巧
推荐阅读
-
EJB中的定时服务
-
vaadin_Vaadin应用程序中的EJB查找
-
EJB中的依赖管理
-
Camel 中的几个重要概念之 CamelContext与CamelTemplate 博客分类: Camel ExchangeSpring配置管理junit项目管理
-
springboot中事务管理@Transactional的注意事项与使用场景
-
Camel 中的几个重要概念之 CamelContext与CamelTemplate 博客分类: Camel ExchangeSpring配置管理junit项目管理
-
c#中禁用windows的任务管理器的方法
-
Maven中的AJAX4JSF资源配置 maven配置管理JBossApacheXML
-
Maven中的AJAX4JSF资源配置 maven配置管理JBossApacheXML
-
如何解决一些项目开发和维护中的问题——Hibernate实战篇 博客分类: hibernate Hibernate项目管理SpringSQLDAO