JavaEE + eclipseLink + TomEE 给出 java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象

JavaEE + eclipseLink + TomEE gives java.sql.SQLSyntaxErrorException: user lacks privilege or object not found

我尝试使用休息服务、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

感谢您的帮助

我终于设法让它在 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 <7 上是强制性的)

最后我认为我的问题是数据源需要在 EE 上下文中的服务器 conf 中配置(我认为持久化中的数据源属性只是被忽略了,所以就像没有人被声明一样)并且异常

user lacks privilege or object not found

来自以下事实:

If a DataSource is needed by the application and one is not declared, TomEE will create one dynamically using default settings.

TomEE documentation

我不是 100% 肯定这个解释,但至少问题解决了,如果我误解了什么,请不要犹豫发表评论。

我更新了 gitlab project

编辑: 请注意,您还可以在 /WEB-INF/resources.xml 文件

中配置资源

编辑 2: 如果您使用的是 Eclipse,如果您错误地配置了您的服务器位置,您也会遇到这个问题,它应该设置为 "use Tomcat installation (take control...)" 而不是 "use workspace metadata"