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

时间:2016-06-21 20:53:22

标签: java mysql web-services eclipselink tomee

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

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

我终于设法让它适用于TomEE 1.7和7.

这是我必须做的改变:

  • 从persistence.xml
  • 中删除与数据库相关的属性
  • 用persistence.xml中的jta-data-source替换非jta-data-source标记
  • 将mysql连接器jar放入我的server / lib
  • 在我的服务器/conf/tomee.xml中,我已将myDatasource配置添加为资源。
  • 将@XmlRootElement(name =&#34; eleve&#34;)放在我的Eleve实体上(这似乎仅限于TomEE&lt; 7)

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

  

用户缺少未找到的权限或对象

来自以下事实:

  

如果应用程序需要DataSource且未声明一个DataSource,   TomEE将使用默认设置动态创建一个。

TomEE documentation

我并不是100%肯定这个解释,但至少问题已经解决,如果我误解了某些内容,请不要犹豫。

我更新了gitlab project

编辑请注意,您还可以在/WEB-INF/resources.xml文件中配置资源

编辑2:如果您使用的是Eclipse,如果您错误地配置了服务器位置,也可能会遇到此问题,应将其设置为&#34;使用Tomcat安装(控制... )&#34;而不是&#34;使用工作区元数据&#34;