我在Netbeans网站上学习教程,但无法使其发挥作用。我在这里简要地张贴了相关文件。我选择了一个maven项目,Tomcat7和Java5EE(因为Java6EE显然不适用于Tomcat7)
在学习教程时,我创建了一个带有"用户"表的数据库,Netbeans可以连接到该数据库并创建必要的文件,所以我的数据库没有任何问题。当我运行web应用程序时,它会显示默认的index.jsp页面,因此web服务器也可以工作。
如果我尝试访问其中一个资源(http://localhost:8084/test3/resources/com.mycompany.test3.user/count)我得到以下异常:
java.lang.RuntimeException: javax.naming.NameNotFoundException: Name persistence-factory is not bound in this Context
service.UserRESTFacade.getJpaController(UserRESTFacade.java:33)
service.UserRESTFacade.count(UserRESTFacade.java:97)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
据我所知,persistence.xml看起来很正确,而且名称在Java文件中被引用,所以我不知道从哪里开始。如前所述,文件可用作GIST(见顶部链接)
我正在运行Netbeans和Tomcat的版本7,如果这有助于
此错误意味着您的应用程序试图在JNDI中查找数据源,但失败了。JNDI是一种为绑定到应用程序容器的应用程序提供配置的方法,它最常用于配置数据库连接。
搜索"TomcatJNDI JPA",您应该会得到一些有用的信息。
编辑:
好的,我仔细看了一下你的代码。实际上,我不确定JNDI查找失败的原因,但由于您是为应用程序管理的连接而设置的,因此您应该能够完全跳过JNDI并获得如下工厂:
// use the name specified in persistence.xml
javax.persistence.Persistence.createEntityManagerFactory("com.mycompany_test3_war_1.0-SNAPSHOTPU")
另一件事是:创建EntityManagerFactory非常昂贵,所以您应该只做一次。按照你现在的方式,你在每个事务上创建一个,这将是非常低效的。我要做的是在应用程序启动时创建它,然后将它存储在类似ServletContext的地方。