Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javax.naming.NameNotFoundException:MyBean#找不到MyBean_Java_Maven_Jakarta Ee_Glassfish_Ejb - Fatal编程技术网

javax.naming.NameNotFoundException:MyBean#找不到MyBean

javax.naming.NameNotFoundException:MyBean#找不到MyBean,java,maven,jakarta-ee,glassfish,ejb,Java,Maven,Jakarta Ee,Glassfish,Ejb,我有一个多模块maven项目,其中包含一个jar模块(模型)、两个EJB模块(存储库、服务)和一个web模块。 可能导致问题的第一件事是,我不知道应该将persistence.xml文件放在哪个EJB模块中 看起来是这样的: <?xml version="1.0" encoding="UTF-8" ?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.or

我有一个多模块maven项目,其中包含一个jar模块(模型)、两个EJB模块(存储库、服务)和一个web模块。 可能导致问题的第一件事是,我不知道应该将persistence.xml文件放在哪个EJB模块中

看起来是这样的:

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">

   <persistence-unit name="jthrdb">

        <jta-data-source>MySQL</jta-data-source>

   </persistence-unit>

</persistence>
有什么建议吗

更新

以下是servlet的一部分:

@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

@EJB
private CandidateBean bean;

/**
 * @see HttpServlet#HttpServlet()
 */
public MyServlet() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
 *      response)
 */
@Override
protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    Candidate temp = new Candidate();
    temp.setFirstName("Pos");
    // bean.insert(temp);
    out.println("<html>");
    out.println("<body>");
    out.println("<h1>" + bean.saySomething() + "</h1>");
    out.println("</body>");
    out.println("</html>");
}
}
@WebServlet(“/MyServlet”)
公共类MyServlet扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
@EJB
私人假丝酵母豆;
/**
*@参见HttpServlet#HttpServlet()
*/
公共MyServlet(){
超级();
//TODO自动生成的构造函数存根
}
/**
*@参见HttpServlet#doGet(HttpServletRequest请求,HttpServletResponse
*(答复)
*/
@凌驾
受保护的无效数据集(HttpServletRequest请求,
HttpServletResponse响应)引发ServletException,IOException{
PrintWriter out=response.getWriter();
候选者临时=新候选者();
临时setFirstName(“Pos”);
//插入(临时);
out.println(“”);
out.println(“”);
out.println(“+bean.saySomething()+”);
out.println(“”);
out.println(“”);
}
}

您不需要persistence.xml中的任何EJB,该文件是JPA配置文件,您可以在其中配置持久层。以下是您应该执行的步骤(我没有深入研究Glassfish配置,因为您必须创建一个名为JDBC/MySQL的MySQL JDBC数据源,并将持久化单元引用到EJB中,为此请参阅Glassfish文档)

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
        <persistence-unit name="jthrdb" transaction-type="JTA">
        <jta-data-source>jdbc/MySQL</jta-data-source>
        <class>com.test.MyJpaEntity</class>
        </persistence-unit>
   </persistence>

@PersistenceContext(unitName = "jthrdb")
private EntityManager entityManager;

我还发现了另一件事:在persistence.xml中,您正在使用JPA1.0。大多数现代应用服务器和Spring都支持JPA 2.0或event better 2.1的使用,它改进了API,是一个更好的选择(我在这里添加了persistence 2.0配置)。

请提供servlet代码和web.xml,您在哪里使用MyBean。我将JPA更改为2.0。这个问题仍然存在。在servlet中,我有一个简单的
entityManager.insert()
方法调用此异常。另一个问题是它不能在mysql模式中自动创建表。我找不到问题。您在这里提到的错误与JPA无关-这里的问题是在JNDI上下文中找不到的EJB MyBean。在servlet中是否有类似@EJB private MyBean的东西;我已经到了JPA可以在数据库中创建实体表的地步。你是对的,这与JPA无关,但那又怎么样?我得到了同样的异常。请在servlet中发布部分代码,您在哪里引用MyBean。另外,请发布定义MyBean的ejb项目的ejb-jar.xml配置文件(仅定义MyBean的部分就足够了)。我发现ejb-jar.xml文件丢失了,所以我尝试编写它,但我不知道在
部分编写什么才能正常工作。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
        <persistence-unit name="jthrdb" transaction-type="JTA">
        <jta-data-source>jdbc/MySQL</jta-data-source>
        <class>com.test.MyJpaEntity</class>
        </persistence-unit>
   </persistence>

@PersistenceContext(unitName = "jthrdb")
private EntityManager entityManager;
entityManager.persist(myJpaEntity);