Jakarta ee 使用部署描述符的EJB注入

Jakarta ee 使用部署描述符的EJB注入,jakarta-ee,dependency-injection,ejb,Jakarta Ee,Dependency Injection,Ejb,我对注入EJB的各种方法感到有点困惑,因此,如果有人能解释以下一个或多个主题,我将不胜感激: 1) 通过注释注入EJB并指定“name”或“lookup”时有什么区别。例如: @EJB(name="ejb/mybean") // or @EJB(lookup="ejb/mybean") @Stateless public class MyStateless implements BusinessLocalInterface{ ... } 我认为“name”可以在“java:comp/env

我对注入
EJB
的各种方法感到有点困惑,因此,如果有人能解释以下一个或多个主题,我将不胜感激:

1) 通过注释注入
EJB
并指定
“name”
“lookup”
时有什么区别。例如:

@EJB(name="ejb/mybean") // or @EJB(lookup="ejb/mybean")
@Stateless
public class MyStateless implements BusinessLocalInterface{

...
} 
我认为
“name”
可以在
“java:comp/env/…”
下进行查找,但是使用
“lookup”
可以做些什么呢

2) 而是在
ejb jar.xml
中执行注入,即:

<ejb-local-ref>
        <ejb-ref-name>ejb/MyBean</ejb-ref-name>
        <local>pl.LocalInterface</local>
        <ejb-link>BeanClass</ejb-link>
        <injection-target>
            <injection-target-class>pl.MyClass</injection-target-class>
            <injection-target-name>targetName</injection-target-name>
        </injection-target>
    </ejb-local-ref>

ejb/MyBean
pl.LocalInterface
比恩克拉斯
pl.MyClass
目标名称
之间有什么区别


什么是
注入目标
元素,可以用它们实现什么,何时使用它们?

您可以在两种场景中使用@EJB注释

在您的应用程序中,当您想要注入bean时

@EJB
MyStateless myStateless
在第二个场景中,您还可以使用lookup参数定义要注入的EJB的JNDI路径。例如,如果EJB是不同EAR甚至不同应用服务器中的远程接口,则主要使用此选项

@EJB(lookup = "ejb:otherEar/modulename/MyStateless!com.yourcomp.MyStateless")
MyStateless myStateless

3.)关于CDI的一些评论:@EJB比@Inject旧,并且提供了更多和EJB特定的参数,尽管只要您只将EJB用作简单的本地服务,就可以尝试使用@Inject,因为这样您就可以使用其他功能,如生产者等。有时根本不需要EJB:)

我不寻求替代方案。我需要特定问题的答案,我认为你的答案没有提供足够的澄清。你的问题是:“但是,使用“查找”可以做什么不同的事情?”。。。我试图回答何时使用查找以及为什么使用查找。声明EJB时不使用@EJB/lookup参数,而仅在注入期间使用。