1

服务器:JBoss 7.1.1 EJB 3.0 Eclipse Juno

我正在使用 ejb 3.0 完成我的第一个 Web 服务项目,并且在我的客户端上遇到了问题。对于我的客户,我制作了一个 servlet。问题是当我尝试:

CalculatorOps calculator = (CalculatorOps)context.lookup("java:global/EJBCalculatorWS/CalculatorImp!math.CalculatorOps");

我在查找时收到 ClassNotFoundException。我从我的 JBoss server.log 得到这个 jndi

[org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-3) JNDI bindings for session bean named CalculatorImp in deployment unit deployment "EJBCalculatorWS.war" are as follows:

java:global/EJBCalculatorWS/CalculatorImp!math.CalculatorOps
java:app/EJBCalculatorWS/CalculatorImp!math.CalculatorOps
java:module/CalculatorImp!math.CalculatorOps

我有 2 个 Web 项目,WS 和 Client,都添加到服务器,WS 位于 Client 的构建路径中。

- - - - - - -代码 - - - - - -

界面

package math;

@Local
public interface CalculatorOps {
    public int add(int a, int b);
    public int subtract(int a, int b);
}

班级

package math;

@Stateless(mappedName="TheCalc")
@WebService
public class CalculatorImp implements CalculatorOps{

    @Override
    public int add(int a, int b) {
        return a+b;
    }

    @Override
    public int subtract(int a, int b) {
        return a-b;
    }
}

小服务程序

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

CalculatorOps calculator = (CalculatorOps)context.lookup("java:global/EJBCalculatorWS/CalculatorImp!math.CalculatorOps");

}
4

2 回答 2

0

已修复:我最终通过将客户端和 ejb 包放在一个项目中来解决此问题,然后使用新的 jndi。我仍然想知道为什么跨多个项目,我不能添加到构建路径,然后使用 jndi 来引用 ejb 而不会抛出 ClassNotFoundException。

于 2013-07-09T23:14:44.833 回答
0

如果您使用的是 eclipse,则需要将 EJB 项目添加到您的 Web 项目的部署程序集中以使其正常工作,构建路径将仅用于编译,但如果我是对的,您会在运行时收到错误。

右键单击您的Web项目->属性->部署程序集->添加

于 2013-07-27T14:38:23.030 回答