Jakarta ee 不带名称或查找属性的@Resource的JNDI查找

Jakarta ee 不带名称或查找属性的@Resource的JNDI查找,jakarta-ee,ejb,Jakarta Ee,Ejb,我在Payara上部署的Java EE应用程序中看到了以下代码: public class MyClass { @Resource ManagedScheduledExecutorService scheduler; <...> } 公共类MyClass{ @资源 ManagedScheduledExecutorService调度程序; } 这是一个支持CDI的应用程序,如果这有区别的话。 在Payara中,ManagedScheduledExecuto

我在Payara上部署的Java EE应用程序中看到了以下代码:

public class MyClass {
    @Resource
    ManagedScheduledExecutorService scheduler;

    <...>
}
公共类MyClass{
@资源
ManagedScheduledExecutorService调度程序;
}
这是一个支持CDI的应用程序,如果这有区别的话。 在Payara中,ManagedScheduledExecutorService存在一个资源,其JNDI名称为
concurrent/uu defaultManagedScheduledExecutorService
,逻辑JNDI名称为
java:comp/defaultManagedScheduledExecutorService

资源的JNDI名称是根据类名和字段创建的。这与上面的名称不匹配

到目前为止,我对资源注入的理解是,您使用lookup属性纯粹通过名称引用现有的JNDI条目。但正如您所看到的,没有使用属性,它仍然有效

为什么??是否存在特定于容器的回退机制,或者某些Java规范是否定义了这种行为

事实上,“某些Java规范定义了这种行为”适用

事实上,Java EE 7/8规范中的EE.5.21默认并发实用程序对象提供了以下定义:

Java EE产品提供程序必须使用以下JNDI名称使应用程序可以访问Java EE对象的默认并发实用程序:

  • java:comp/DefaultManagedExecutorService
    用于预配置的托管执行器服务
  • java:comp/DefaultManagedScheduledExecutorService
    用于预配置的托管计划执行器服务
  • java:comp/DefaultManagedThreadFactory
    用于预配置的托管线程工厂
  • java:comp/DefaultContextService
    用于预配置的上下文服务
应用程序组件提供程序或部署程序可以使用资源注释的lookup元素或resource ref deployment descriptor元素的lookup name元素将资源引用显式绑定到默认并发实用程序对象。比如说,

@Resource(name="myManagedExecutorService, 
          lookup="java:comp/DefaultManagedExecutorService")
ManagedExecutorService myManagedExecutorService;`  
在没有这种绑定的情况下,引用的映射将默认为产品的默认托管executor服务