2015-03-10 1 views
0

Я новичок в EJB. Я хочу знать, может ли EJB вводить метод другого сеанса bean, если не почему? в качестве кода ниже:Can Inject (@EJB) Bean в методе другого сеанса Bean Session (Remote или Local)

@Local 
interface car { 
    public void drive(); 
} 

@Stateless 
public class Toyota implements Car { 
    @Override 
    public void drive() { 
     @EJB 
     Color color; 
     ... 
    } 
} 

Пример кода приветствуется.

+0

Возможно, вам стоит прочитать некоторые основы Java EE/EJB, прежде чем задавать все ... – unwichtich

ответ

1

Нет, вы не можете вводить в метод. Вы можете использовать только @EJB на уровне класса, поля или сеттера, как это:

@Stateless 
@EJB(name="myBeanRef", beanInterface=MyBean.class) // this creates only reference - you will need to initialize it for example via initialConetxt.lookup() 
public class EJBTests{ 
    @EJB (name=”ejb/bean1”) // this injects bean named ejb/bean1 
    MyBean1 bean1; 

    MyBean2 bean2; 

    .... 
    @EJB (name="ejb/bean2") // this injects bean using setter method 
    public void setEcho(MyBean2 bean2) { 
     this.bean2 = bean2; 
    } 
} 

Для получения более подробной информации проверить 7.1 @EJB – injecting an EJB от EJB 3.1 specification.

1

Вы не можете. @EJB@Target определяется следующим образом:

@Target({TYPE, METHOD, FIELD}) 

и @Inject@Target определяется следующим образом:

@Target({ METHOD, CONSTRUCTOR, FIELD }) 

Это означает, что аннотации могут быть использованы только с перечисленными типами элементов. От Javadoc из @Target аннотацию:

Указывает виды программного элемента, к которому тип аннотации применимо.

Вы должны иметь LOCAL_VARIABLE как ElementType, чтобы иметь возможность вводить его в качестве локальной переменной метода.

Если вы читаете больше об EJB, вы действительно узнаете, что есть причина для этого, так как контейнеру было бы невозможно управлять локальными переменными.