我尝试使用rest服务、eclipseelink和mysql制作一个简单的应用程序。
我想在TomEE服务器上运行这个程序(apache-TomEE-plum-1.7.4)。
我用eclipse部署了这个应用程序。
部署似乎还可以
当我转到http://localhost:8080/eleve/时,我得到:
javax.servlet.ServletException: Error processing webservice request
org.apache.tomee.webservices.CXFJAXRSFilter.doFilter(CXFJAXRSFilter.java:98)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
java.io.IOException: Failed to invoke AbstractHTTPDestination
org.apache.openejb.server.cxf.rs.CxfRsHttpListener.doInvoke(CxfRsHttpListener.java:229)
org.apache.tomee.webservices.CXFJAXRSFilter.doFilter(CXFJAXRSFilter.java:94)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
java.lang.RuntimeException: org.apache.cxf.interceptor.Fault:
Internal Exception: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: ELEVE
Error Code: -5501
Call: SELECT ID, ADRESSE, classe, date_naissance, NOM, PRENOM, SEXE FROM ELEVE
Query: ReadAllQuery(referenceClass=Eleve sql="SELECT ID, ADRESSE, classe, date_naissance, NOM, PRENOM, SEXE FROM ELEVE")
org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:116)
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:324)
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:240)
org.apache.openejb.server.cxf.rs.CxfRsHttpListener.doInvoke(CxfRsHttpListener.java:227)
org.apache.tomee.webservices.CXFJAXRSFilter.doFilter(CXFJAXRSFilter.java:94)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
这是我的persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="notePU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>com.test.eleve.model.Eleve</class>
<properties>
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/notes_eleves" />
<!-- <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> -->
<property name="eclipselink.logging.level" value="INFO" />
</properties>
</persistence-unit>
</persistence>
我一定错过了什么,但我找不到什么。
我把代码推到这里:gitlab
谢谢你的帮助
最佳答案
我终于使它在1.7和7卷上运行。
这就是我必须做的改变:
从persistence.xml中删除与数据库相关的属性
在persistence.xml中用jta数据源替换非jta数据源标记
将mysql连接器jar放在我的服务器/lib中
在我的服务器/conf/tomee.xml中,我添加了myDatasource配置作为资源。
将@XmlRootElement(name=“eleve”)放在我的eleve实体上(这似乎只在我最后,我认为我的问题是需要在EE上下文的服务器配置中配置数据源(我认为持久化中的数据源属性只是忽略了,所以好像没有声明任何人)和异常
用户缺少权限或找不到对象
是因为:
如果应用程序需要一个数据源而没有声明,
TomEE将使用默认设置动态创建一个。
TomEE documentation
我不能百分之百肯定这个解释,但至少问题已经解决了,如果我误解了什么,不要犹豫发表评论。
我已经更新了gitlab project
编辑:请注意,您还可以在a/WEB-INF/resources.xml文件中配置资源
编辑2:如果您使用的是Eclipse,那么如果您错误地配置了服务器位置,也可能会遇到这个问题,应该将其设置为“使用Tomcat安装(获取控制权…”,而不是“使用工作区元数据”
关于java - JavaEE + eclipseLink + TomEE提供了java.sql.SQLSyntaxErrorException:用户缺少特权或找不到对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37954385/