当前位置: 首页 > 知识库问答 >
问题:

EJB查找问题

彭坚壁
2023-03-14

我有一个Web项目,其中有几个EJB在不同的包中。但是我在查找EJB时遇到了问题。

我的目录结构:有两个包索引。作业和索引。ejb。

--包index.job有一个POJOindex.java

--包装索引。ejb有一个由@Stateless(name=“indexEJB”,mappedName=“indexEJB”)和@LocalBean定义的ejb

--包装索引。ejb还有一个定义为“本地”的本地ejb接口

我的本地豆子

package index.ejb;

import java.util.ArrayList;
import javax.ejb.Local;

@Local
public interface IndexEJBLocal {
    public ArrayList getLatestVersions(String year, int start, int end);
}

我的EJB

package index.ejb;

import javax.ejb.Stateless;
import javax.annotation.Resource;
import javax.ejb.LocalBean;

@Stateless(name = "indexEJB", mappedName = "indexEJB")
@LocalBean
public class IndexEJB implements IndexEJBLocal {

    @Resource(lookup = "jdbc/cap")
    private DataSource ds;

    @Override
    public ArrayList getLatestVersions(String year, int start, int end) {
        return null;
    }
}

我的POJO

//ADDED @ManagedBean ANNOTATION SO SERVER IDENTIFIES THIS OBJ AS A RESOURCE
//Also cannot use @PostConstruct as the execute method is overridden from quartz job interface

package index.job;

import javax.annotation.ManagedBean;
import javax.ejb.EJB;
import javax.inject.Inject;

@ManagedBean
public class IndexJob implements Job {

    @EJB
    IndexEJB billIndexEJB1;

    @EJB
    IndexEJBLocal billIndexEJB2;

    @Inject
    IndexEJB billIndexEJB3;

    @Inject
    IndexEJBLocal billIndexEJB4;

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {

        System.out.println("1::"+billIndexEJB1); //ALWAYS NULL
        System.out.println("2::"+billIndexEJB2); //ALWAYS NULL
        System.out.println("3::"+billIndexEJB3); //ALWAYS NULL
        System.out.println("4::"+billIndexEJB4); //ALWAYS NULL


        try {
            Context ctx = new InitialContext();
            IndexEJBLocal billIndex = (IndexEJBLocal) 
                ctx.lookup("java:global.MY-PROJECT-NAME.IndexEJB!index.ejb.IndexEJBLocal");

            //ABOVE LOOKUP ALWAYS FAILS WITH NameNotFoundException

            System.out.println("billIndex::" + billIndex);
        } catch (Exception e) {
        e.printStackTrace();
        }
    }
}

如有任何关于如何解决这一问题的提示,我们将不胜感激。

我的项目正在运行:NetBeans 8.2;JDK 1.8b45;Java EE 7 Web;WebLogic 12.2.1.1

共有1个答案

时衡虑
2023-03-14

每当您将bean注释为@LocalBean,使bean公开一个无接口视图时,查找返回的引用将是对EJB类的引用,而不是对接口的引用。@LocalBean注释公开了EJB实现中的所有方法,而不仅仅是接口中定义的方法。

您得到的例外可能是告诉您没有具有IndexEJBLocal视图的bean。

最简单的解决方案是删除@LocalBean注释,我相信这正是您想要的。

 类似资料:
  • 当我开始使用Jndi查找使用此语法java:comp/env/ejb/BankSession 它给出以下错误。 javax.naming。NameNotFoundException:在尝试查找“java:comp/env/ejb/BankSession”时,未找到子文本。 这里ejbbean和客户端代码在不同的jvm上运行。 我应该使用哪个Jndi查找? java: comp/env/ejb/Ba

  • 问题:似乎无法通过spring在Webphsere服务器中执行jndi查找EJB3。一直找不到我的jndi名称。我看不出我做错了什么。对于Websphere,您是否必须为jndi名称查找添加不同的内容? 堆栈溢出参考问题-EJB3注入Springbean 版本: Spring版本:4.1.2 WebSphereServer版本:7.0.0.27 Spring错误: 创建名为'myLocalEjb'

  • 在prop service中的必需类中,但serviceCaller在这里显示为null。在这个问题上搜索发现,我们只能在容器管理的类中使用@EJB,而不能在简单的java类中使用。 我已经尝试了一切,但注意似乎是有效的。所以请帮我解决这个问题。

  • 我正在将一个ejb应用程序从weblogic迁移到jboss。该应用程序正在寻找使用jndi的ejb。我有ejb-jar.xml和jboss.xml到WEB-INF/中,如下所示 jboss.xml ejb-jar.xml 当我运行应用程序时,它会加载。日志如下所示 在我的代码中,用于查找服务的JNDI名称如下所示 当代码尝试使用以下代码在上下文中查找 ejb 时,它会给出异常 serviceNa

  • 我有一个Spring MVC 3.1.1应用程序,它需要查找部署到WebLogic10.3.5中远程EJB3.0。 其中ABC不同的每一次尝试。 安装和配置Weblogic后,我可以看到部署在控制台中的EJB,这就是我在他的JNDI树中看到的: 每个都是一个树节点,名称为 如您所见,我想在Spring Security3.1.4中设置EJB for login作用域。 这是远程接口的分支: 这是类

  • 我在本地机器上创建了两个liberty实例。我在服务器X中部署了一个包含远程ejb的war模块,并在服务器Y中部署了另一个war模块,它必须从服务器X中远程查找ejb。 下面是从宁静的 Web 服务中查找 ejb 的代码。 当我尝试调用 Web 服务时,我得到以下异常 本地对象不支持 DII 操作 P.S.我已经在两个端口号不同的服务器上启用了ejbRemote功能。 我将查找字符串更改为“cor