EJBにおける依存管理


EJBの2の依存管理の形式:
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はタイプごとに注入されますか?それとも何らかの命名規則で注入されますか?