是否可以在所有现有 EJB 都在 ejb-jar.xml 中配置的遗留项目中使用 ejb 注释和 CDI

Is it possible to use ejb annotation and CDI in a legacy project where all the existing EJB are configured in ejb-jar.xml

有一个包含最旧 EJB 的遗留代码库,其中所有现有 EJBS 都在 ejb-jar.xml

中配置
<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1">
    <session>
        <ejb-name>ABean</ejb-name>
        <home>com.bla.api.RemoteBeanHome</home>
        <remote>com.bla.api.RemoteBean</remote>
        <ejb-class>com.bla.api.ABean</ejb-class>
        <session-type>Stateless</session-type>
        <transaction-type>Container</transaction-type>
    </session>
....

这是通过 JNDI 搜索实现的。但是,服务器已升级到 Weblogic 12.2,其中支持 Java EE 7。因此,当将新的 local EJB 注入远程会话 bean ABean 时,我正在考虑仅使用注释 @EJB,而不触及现有 XML 部署描述符。

但是出现如下错误:

The ejb-ref does not have an ejb-link and the JNDI name of the target bean has
not been specified. Attempts to automatically link the ejb-ref to its target 
bean failed because no EJBs in the application were found to implement the
"com.bla.api.NewBean" interface. Link or map this ejb-ref to its target EJB 
and ensure the interfaces declared in the ejb-ref are correct.

新的本地无状态ejb代码如下:

@Stateless
public class TestEJB {
    public void test() {
        System.out.println("I am the first EJB injected with CDI");
    }
}

问题:在这种情况下,是否仍然可以添加带有注释而不是 ejb-jar.xml 的新 EJB?

我担心,您的部署描述符 version="2.1" 中的这个小标记会告诉应用程序服务器您的应用程序是 Java EE 2.1 应用程序,它会相应地处理它。所有新规范功能将不可用。此外,我担心从 Java-EE 2 到 5 的步骤如此之大,如果不更改代码,您将无法使您的应用程序成为 JavaEE 5+ 应用程序。我的意思是在 Java EE 5(主界面、远程界面等)中删除的所有样板代码似乎仍在您的项目中。但我可能错了,我没那么老,从第 5 版开始使用 JEE。