JavaEE + eclipseLink + TomEE 给出 java.sql.SQLSyntaxErrorException: 用户缺少权限或找不到对象
Posted
技术标签:
【中文标题】JavaEE + eclipseLink + TomEE 给出 java.sql.SQLSyntaxErrorException: 用户缺少权限或找不到对象【英文标题】:JavaEE + eclipseLink + TomEE gives java.sql.SQLSyntaxErrorException: user lacks privilege or object not found 【发布时间】:2016-06-21 20:53:21 【问题描述】:我尝试使用 rest 服务、eclipseLink 和 mysql 制作一个简单的应用程序。 我想让它在 TomEE 服务器上运行 (apache-tomee-plume-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
感谢您的帮助
【问题讨论】:
你好,你的表ELEVE是否存在于MySQL数据库中? 不应该是 transaction-type="JTA" 而不是 transaction-type="RESOURCE_LOCAL"? 你好,是的,它存在并且查询“SELECT ID, ADRESSE, classe, date_naissance, NOM, PRENOM, SEXE FROM ELEVE”返回我在 mysql 控制台中的期望 @leo 为什么应该是JTA? 因为我想你想让 tomee 处理持久性——见tomee.apache.org/jpa-concepts.html 【参考方案1】:我终于设法让它在 TomEE 1.7 和 7 上运行。
这是我必须做的改变:
从persistence.xml中删除数据库相关属性 在persistence.xml中用jta-data-source替换非jta-data-source标签 将mysql连接器jar放到我的服务器/lib中 在我的服务器 /conf/tomee.xml 中,我已将 myDatasource 配置添加为资源。 将 @XmlRootElement(name = "eleve") 放在我的 Eleve 实体上(这似乎只在 TomEE最后我认为我的问题是需要在 EE 上下文中的服务器 conf 中配置数据源(我认为持久性中的数据源属性只是忽略,所以就像没有人声明一样)和异常
用户缺少权限或找不到对象
来自以下事实:
如果应用程序需要一个 DataSource 而没有声明一个, TomEE 将使用默认设置动态创建一个。
TomEE documentation
我不是 100% 肯定这个解释,但至少问题已经解决了,如果我误解了一些东西,请不要犹豫。
我已经更新了gitlab project
编辑:请注意,您还可以在 /WEB-INF/resources.xml 文件中配置资源
编辑 2: 如果您使用的是 Eclipse,如果您错误地配置了您的服务器位置,您也可能会遇到这个问题,它应该设置为“使用 Tomcat 安装(控制...)”并且不是“使用工作区元数据”
【讨论】:
以上是关于JavaEE + eclipseLink + TomEE 给出 java.sql.SQLSyntaxErrorException: 用户缺少权限或找不到对象的主要内容,如果未能解决你的问题,请参考以下文章
Up-to-date cache with EclipseLink and Oracle
使用 MariaDB 10.4 和 eclipselink 的 java @GeneratedValue (strategy = GenerationType.IDENTITY) 问题
JPA eclipselink坚持没有主键但有两个外键的实体
TypedQuery<String> 上的 NullPointerException -- JavaEE Spring JPA2.1
ArtifactTransferException: Failure to transfer org.apache.openejb:javaee-api:jar:5.0-1