EJBにおける依存管理
EJBの2の依存管理の形式:
1、依存検索
1つ目の依存検索方法:
2つ目の依存検索方法:
依存注入
この方式では,AnnotationsをFieldまたはSetterメソッドに置くことができる.この二つの違いは,しばらくはっきりしない.JPAのEntity Beanでは2つに違いがあるそうです.(後でゆっくり研究する時間がある)
ここの@EJBはタイプごとに注入されますか?それとも何らかの命名規則で注入されますか?
1、依存検索
1つ目の依存検索方法:
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()+"
hello == hello2 "+(hello == hello2);
}
}
2つ目の依存検索方法:
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();
}
}
依存注入
この方式では,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はタイプごとに注入されますか?それとも何らかの命名規則で注入されますか?