我正在关注Netbeans网站上的教程,但无法让它发挥作用。我在gist here中发布了相关文件。我选择了一个maven项目,Tomcat 7和Java 5EE(因为Java 6EE显然不适用于Tomcat 7)
在学习本教程后,我创建了一个带有“user”表的数据库,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版
答案 0 :(得分:0)
此错误表示您的应用程序试图在JNDI中查找数据源并失败。 JNDI是一种为与应用程序容器绑定的应用程序提供配置的方法,它最常用于配置数据库连接。
搜索“Tomcat JNDI JPA”,你应该得到一些有用的信息。
好的,我仔细看了一下你的代码。我实际上不确定为什么JNDI查找失败,但是因为你已经设置了应用程序管理的连接,你应该能够完全跳过JNDI并得到这样的工厂:
// use the name specified in persistence.xml
javax.persistence.Persistence.createEntityManagerFactory("com.mycompany_test3_war_1.0-SNAPSHOTPU")
另一件事:创建一个EntityManagerFactory很昂贵,所以你应该只做一次。你现在拥有它的方式,你在每笔交易中创建一个,这将是非常低效的。我要做的是在应用程序启动时创建它,然后将它存储在像ServletContext这样的地方。