当前位置: 首页 > 面试题库 >

@EJBs注释有什么作用?

干鑫鹏
2023-03-14
问题内容

我大致了解这种构造的作用:它创建了SomeType EJB,并将对象注入到另一个EJB中。

 @EJB(name="name1")
 SomeType someVariable

现在,我有一个以这样的方式开始的类:(尽管我认为只有的@EJBs相关,我会给出所有类级别的注释)

@Remote(SomeClass.class)
@Stateless(name="someName")
@EJBs({@EJB(name="name1",beanInterface=Type1.class),
       @EJB(name="name2",beanInterface=Type2.class)})
@TransactionAttribute(TransactionAttributeType.REQUIRED)
@TransactionManagement(TransactionManagementType.CONTAINER)
public class X extends Y{ 
  //code

什么的@EJB就做吗?他们可能会从JNDI获取或创建“ name1”
…对象,但是将结果放在哪里?我看不到.lookup附近有任何电话,但是代码库很大,所以我对此不太确定。

额外的问题:我想这两个@Transaction注释只是重复默认值?

更新:目前有 多人声称这@EJBs是专有扩展。它不是。它是Java
EE5的核心部分。有关详细信息,请参见JavaDoc。。它只是单个@EJB注释的容器。

我相信声称这些EJB注释的每个人都会进行查找。我只想知道此查询的结果会发生什么。


问题答案:

@EJB注解(和@Resource@WebServiceRef等),有两个目的:

  1. 它在组件名称空间中声明一个引用。例如,@EJB(name="myEJB")创建一个引用java:comp/env/myEJB。如果您为字段添加注释而未指定名称,则它将创建一个引用java:comp/env/com.example.MyClass/myField
  2. 如果在字段或setter方法上声明了注释,则在创建组件时容器将执行注入。

引用的解析方式有所不同,与引用是针对lookup("java:comp/env/myEJB")注入还是由于注入而解析无关:

  1. 如果使用EE 6+,则该lookup属性需要JNDI查找来解析目标。
  2. 某些应用程序服务器支持mappedName,指定为特定于供应商的。这通常是通过执行查找来实现的。
  3. 应用程序服务器在部署时支持绑定。这通常是通过执行查找来实现的。
  4. 如果没有提供其他绑定信息,并且bean接口(beanInterface或字段类型)仅由应用程序中的单个EJB实现,则EJB规范要求它回落到那个。
  5. 如果没有提供其他绑定信息并且#4无法工作,则某些应用程序服务器将尝试基于引用名称在服务器名称空间中执行查找(例如,java:comp/env/myEJB可能导致myEJB在服务器名称空间中进行查找)。


 类似资料:
  • 问题内容: 尝试序列化作为JPA实体的ESRBRating对象时,我遇到了两个不同的堆栈跟踪(请参见下文)。我正在使用Spring DataJPA。控制器称为服务,服务称为存储库。通过在我的ESRBRating对象上添加@Proxy(lazy = false),我能够解决此问题。 我的主要问题是@Proxy(lazy=false)实际做什么?为什么添加时起作用?这是一个好的解决方案,还是会产生诸如

  • 问题内容: 嵌入式注释如何影响数据库? SQL查询将如何改变? 使用注释的典型用例是什么? 问题答案: 嵌入式注释如何影响数据库? 它根本不影响它。在ORM提供程序层上,来自嵌入式实体的所有字段都 将 与父实体 合并 ,并像对待它们始终在其中声明一样。换句话说,它的工作方式就好像您将所有字段,获取器和设置器直接复制到包含嵌入式对象的实体中一样。 SQL查询将如何改变? 他们不会。您无需更改任何内容

  • 问题内容: 我仍然不清楚Java中注释的用途。最初,我认为它们只是作为文档。但是,我不确定从Google App Engine数据存储中 查看此文档。 @PersistenceCapable(identityType = IdentityType.APPLICATION) 看起来更像是方法签名。 这种注释的目的是什么?它有什么作用? 问题答案: 它们是源级元数据。它们是将信息添加到不是代码的信息中

  • 同事们,我的测试类中有@Ignore注释 我的pom看起来: 结果我收到: [信息]正在扫描项目...[INFO][INFO]-----------------------------------------------------------------------------------------------------------------------------------------

  • 那么在这里@OrderColiv(name="order_id")有什么用呢? 那么在这里@OrderColiv(name="order_id")有什么用呢?