无法让 REST WS 与 Netbeans 协同工作



我在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的地方。

最新更新