Jakarta ee 如何在web项目中使用Netbeans EJB项目中的EJB?

Jakarta ee 如何在web项目中使用Netbeans EJB项目中的EJB?,jakarta-ee,netbeans,ejb,cdi,Jakarta Ee,Netbeans,Ejb,Cdi,我创建了一个NetBeans企业应用程序,它由一个封装ejb(jar)项目和一个web(war)项目的ear组成 我的web项目中有一个servlet,我想使用其中ejb项目中的一个ejb @WebServlet(name = "Shop", urlPatterns = {"/ajax/add_to_cart"}) public class ShoppingCartServlet extends HttpServlet { @EJB ShoppingCartFacade sho

我创建了一个NetBeans企业应用程序,它由一个封装ejb(jar)项目和一个web(war)项目的ear组成

我的web项目中有一个servlet,我想使用其中ejb项目中的一个ejb

@WebServlet(name = "Shop", urlPatterns = {"/ajax/add_to_cart"})
public class ShoppingCartServlet extends HttpServlet {

    @EJB
    ShoppingCartFacade shoppingCartFacade
我在NetBeans中遇到一个错误,ShoppingCartFacade的“找不到符号”。Netbeans无法自动找到ShoppingCartFacade的包,即使它位于“同级”ejb项目中。如果我开始在Servlet中手动输入包名,即

import com.myproject....
我可以看到,唯一可见的包是web项目本身中的包,即

com.myproject.web.my\u web\u相关的\u包
可见

鉴于

com.myproject.ejb.my_ejb_相关_包
不可见

当然,将EJB注入到web项目中一定很简单,因为拥有独立的EJB和web项目的全部意义在于,业务逻辑可以放置在EJB中,并从web资源(如servlet)调用


那么,我应该如何在web(war)应用程序中使用EJB呢

我必须明确地将ejb项目声明为web项目的依赖项。如果它是一个常规的NetBeans企业应用程序,那么这似乎是自动完成的,但如果它是一个Maven企业应用程序,则不会自动完成,在我的案例中就是这样。

我认为问题在于Maven不知怎的没有更新它的存储库。您需要首先从本地maven repo中删除所有项目工件,然后使用依赖项重新构建。这个问题很快就会消失。

您现在也可以将ejb置于war中(如果您不需要远程访问它们),我不想将ejb置于war中,因为我希望分离关注点。我想指出,如果您的ejb到war映射工作正常,然后停止工作,这可能是一个损坏的缓存问题。这发生在我身上,清理缓存解决了问题。