EJB 3.1 依赖注入失败

2023-12-15

我创建了一个无状态会话 bean,如下所示:

@WebServlet(name = "ProductController", urlPatterns = {"/ProductController"})
public class ProductController extends HttpServlet {

  @EJB
  private ProductFacadeBean productBean;
}

@Stateless
public class ProductFacadeBean extends AbstractFacade<Product> implements ProductFacadeLocalInterface {
  @PersistenceContext(unitName = "OnlineStorePU")
  private EntityManager em;

  protected EntityManager getEntityManager() {
    return em;
  }

  public ProductFacadeBean() {
    super(Product.class);
  }

}

@Local
public interface ProductFacadeLocalInterface {

  void create(Product product);

  void edit(Product product);

  void remove(Product product);

  Product find(Object id);

  List<Product> findAll();

  List<Product> findRange(int[] range);

  int count();

}


public abstract class AbstractFacade<T> {
  private Class<T> entityClass;

  public AbstractFacade(Class<T> entityClass) {
    this.entityClass = entityClass;
  }

  protected abstract EntityManager getEntityManager();

  public void create(T entity) {
    getEntityManager().persist(entity);
  }

  public void edit(T entity) {
    getEntityManager().merge(entity);
  }

  public void remove(T entity) {
    getEntityManager().remove(getEntityManager().merge(entity));
  }

  public T find(Object id) {
    return getEntityManager().find(entityClass, id);
  }

  public List<T> findAll() {
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    cq.select(cq.from(entityClass));
    return getEntityManager().createQuery(cq).getResultList();
  }

  public List<T> findRange(int[] range) {
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    cq.select(cq.from(entityClass));
    javax.persistence.Query q = getEntityManager().createQuery(cq);
    q.setMaxResults(range[1] - range[0]);
    q.setFirstResult(range[0]);
    return q.getResultList();
  }

  public int count() {
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
    cq.select(getEntityManager().getCriteriaBuilder().count(rt));
    javax.persistence.Query q = getEntityManager().createQuery(cq);
    return ((Long) q.getSingleResult()).intValue();
  }

}

问题 :

  1. 错误是什么?如何 解决这个问题 ?

    javax.naming.NamingException:查找 失败了 'java:comp/env/Controller.ProductController/productBean' 在 SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [根异常是 javax.naming.NamingException: 解决“Remote”的 Ejb 异常 ejb 引用 名称=Controller.ProductController/productBean,Remote 3.x 接口 =EJB.ProductFacadeBean,ejb-link=null,lookup=,mappedName=,jndi-name=EJB.ProductFacadeBean,refType=Session' 。实际(可能是内部)远程 用于查找的 JNDI 名称是 'EJB.ProductFacadeBean#EJB.ProductFacadeBean' [根异常是 javax.naming.NamingException:查找 失败了 'EJB.ProductFacadeBean#EJB.ProductFacadeBean' 在 SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [根异常是 javax.naming.NameNotFoundException: EJB.ProductFacadeBean#EJB.ProductFacadeBean 未找到]]]

完整的例外附在这里:

HTTP Status 500 -

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: PWC1392: Error instantiating servlet class Controller.ProductController

root cause

com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class Controller.ProductController

root cause

com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote ejb-ref name=Controller.ProductController/productBean,Remote
3.x interface =EJB.ProductFacadeBean,ejb-link=null,lookup=,mappedName=,jndi-name=EJB.ProductFacadeBean,refType=Session into class Controller.ProductController

root cause

javax.naming.NamingException: Lookup failed for 'java:comp/env/Controller.ProductController/productBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=Controller.ProductController/productBean,Remote
3.x interface =EJB.ProductFacadeBean,ejb-link=null,lookup=,mappedName=,jndi-name=EJB.ProductFacadeBean,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'EJB.ProductFacadeBean#EJB.ProductFacadeBean' [Root exception is javax.naming.NamingException: Lookup failed for 'EJB.ProductFacadeBean#EJB.ProductFacadeBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: EJB.ProductFacadeBean#EJB.ProductFacadeBean not found]]]

root cause

javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=Controller.ProductController/productBean,Remote
3.x interface =EJB.ProductFacadeBean,ejb-link=null,lookup=,mappedName=,jndi-name=EJB.ProductFacadeBean,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'EJB.ProductFacadeBean#EJB.ProductFacadeBean' [Root exception is javax.naming.NamingException: Lookup failed for 'EJB.ProductFacadeBean#EJB.ProductFacadeBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: EJB.ProductFacadeBean#EJB.ProductFacadeBean not found]]

root cause

javax.naming.NamingException: Lookup failed for 'EJB.ProductFacadeBean#EJB.ProductFacadeBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: EJB.ProductFacadeBean#EJB.ProductFacadeBean not found]

root cause

javax.naming.NameNotFoundException: EJB.ProductFacadeBean#EJB.ProductFacadeBean not found

note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.1 logs. GlassFish Server Open Source Edition 3.1
  1. 当我创建会话时 实体bean使用netbeans吧 为我们创造了抽象的外观? 什么目的 ?我知道门面 模式是作为接口 路由请求 ?
  2. ejb-jar.xml 有什么用?

所有设置均为默认设置。 ejb bean 是在 java ee 6 Web 应用程序中创建的,而不是在另一个 war 或 jar 中创建的。 Glassfish 3.1 服务器。

请帮忙。

Thanks.


您需要通过引用 bean 的接口而不是直接引用其实现来注入 bean。像这样的东西..

@EJB
private ProductFacadeLocalInterface productBean;

然后,您可以使用您在中公开的接口方法来访问该 beanProductFacadeLocalInterface.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EJB 3.1 依赖注入失败 的相关文章

随机推荐

  • 定量和定性解释变量之间相互作用的多元 Logistic 回归

    作为后续这个问题 我拟合了定量和定性解释变量之间相互作用的多重逻辑回归 MWE 如下 Type lt rep x LETTERS 1 3 each 5 Conc lt rep x seq from 0 to 40 by 10 times 3
  • 隐藏 Access 2016 功能区

    我试图在运行时禁用 Access 的所有默认工具栏和功能区 到目前为止 我遇到的剩余问题是功能区 我按照这个教程https msdn microsoft com en us library office ff837012 aspx 但当 A
  • 将实例的一个属性与一组其他实例进行比较

    我正在尝试编写一个实例方法Card将单张卡与数组进行比较的类 该类具有一些属性 例如 shape and color The otherCards数组中充满了此类的其他实例 这些实例也有它们的shapes and colors 现在 我想编
  • 显示所有打开的 RODBC 连接

    有谁知道如何做到这一点 showConnections 不会列出来自 odbcConnect 的任何打开的连接 您可以通过以下方式缩小搜索范围 这将返回当前环境中 RODBC 类的所有变量 envVariables lt ls bools
  • MongoDB .Net 驱动程序 2.0 Pull(删除元素)

    你能帮我用 2 0 驱动程序正确运行 拉 删除 吗 我有一个像这样的集合 我想通过关注者字段删除第一个名为 fethiye 的关注者 id ObjectId 554e05dfc90d3d4dfcaa2aea username bodrum
  • 为什么设置 MenuItem.InputGestureText 不会导致当我执行输入手势时激活 MenuItem?

    我想实现键盘快捷键MenuItem 我使用了下面的代码
  • 在 #define 宏中转义 # 符号?

    在不涉及血淋淋的细节的情况下 我想使用 define宏将扩展为 include但 符号使预处理器感到困惑 因为它认为我想引用一个参数 例如 我想做这样的事情 define MACRO name include name foo 并这样使用它
  • 在 Azure 上找不到“Microsoft.SqlServer.Types”版本 10 或更高版本

    我正在尝试在 ASP NET MVC 4 中创建一个 Web api 该 webapi 使用实体框架 5 空间类型 并且我编写了一个非常简单的代码 public List area GetAllAreas List area aList d
  • 在 React 功能组件中使用 Cornerstone.js 中的堆栈滚动工具时,如何访问“currentImageIdIndex”?

    我目前正在 React 组件中成功显示一堆图像 但不确定在哪里放置事件侦听器以便访问currentImageIdIndex滚动时 import React useEffect useRef useCallback from react im
  • fancybox 图像上的自定义宽度和高度

    我想知道是否可以在 fancybox 图像上设置自定义宽度和高度 作为标准 fancybox 的宽度和高度相对于图像的宽度和高度而变化 但我希望所有图像的宽度为 800 高度为 600 我想创建一些与 Facebook 上的图像框相似的内容
  • 通过使用最小交换交换相邻元素来对序列进行排序

    我们有一个未排序的 N 个数字序列 1 2 3 4 N 我们可以通过按特定顺序交换相邻元素来对整个序列进行排序 给定一个序列 如何计算对序列进行排序所需的最小可能交换 作为示例 请考虑序列 4 2 5 3 1 对此进行排序的最佳方法是按以下
  • 使用REGEX用SED解析括号

    我正在寻找命令sed它转换这个输入流 dummy key1 key2 dummy key3 dummy key4 dummy dummy key5 dummy dummy dummy key6 dummy key7 dummy 进入这个 k
  • 下一个更高的素数和回文数

    是否有关于从给定的整数中求解下一个更高的素数和回文数的建议 这是我正在尝试的片段 但它有点慢 请建议我是否有任何好的算法可以测试 usr bin python def next higher n while True s str n if
  • 报告设计无效。未找到字段 Jasper 报告

    我正在尝试创建一个基本的碧玉报告JRBeanCollectionDataSource 在那里 我有一个 javabean 内的对象列表 public class Course private int id private List
  • 计算pandas数据框中每列值的变化

    有没有什么巧妙的方法来计算 pandas 数据框中每列值的变化次数 我不想在每一列上循环 例如 import pandas as pd frame pd DataFrame time 1234567000 1234567005 123456
  • AngularJs指令添加属性,事件不被触发

    大家早上好 我对这个指令有点困惑 我想要的是从 getProperties 函数接收一个 JSON 字符串 例如 class someclass ng change someChange ng click someCLick 该指令将创建
  • Android 寻呼机暂停问题

    我正在使用 Pager 和兼容性库构建一个应用程序 每当我尝试暂停应用程序时 例如 当我回到桌面时 我的应用程序都会强制关闭 我从未遇到过此类错误 因此我不知道如何解决它 我将向您展示我的代码 而我确信您不必查看它 public class
  • 使用Functional Swift 求斐波那契项的总和

    我正在尝试学习函数式 Swift 并开始从 Project Euler 做一些练习 甚至斐波那契数列 问题2 斐波那契数列中的每一项新项都是通过添加前两项而生成的 从 1 和 2 开始 前 10 项将是 1 2 3 5 8 13 21 34
  • 删除R中的多个值

    我有一个大约有 14 000 行和 40 列的数据集 我试图删除数据集第一列中具有以下值的所有行 但是当我执行类似操作时 filter data set data set DMS rem rem lt c 02M177 02M267 02M
  • EJB 3.1 依赖注入失败

    我创建了一个无状态会话 bean 如下所示 WebServlet name ProductController urlPatterns ProductController public class ProductController ext