如何在 TomEE 中定义 MySQL 数据源?

Posted

技术标签:

【中文标题】如何在 TomEE 中定义 MySQL 数据源?【英文标题】:How to define MySQL data source in TomEE? 【发布时间】:2012-12-07 22:07:49 【问题描述】:

平台:TomEE Web 配置文件 1.5.0。

我正在尝试做一件非常基本的事情,为 mysql 设置数据源。我已阅读官方指南(http://openejb.apache.org/configuring-datasources.html)。它要求我们在 openejb.xml 中输入一个 Resource 元素。我在 tomee-webprofile-1.5.0 的任何地方都找不到该文件。我在其他地方读到我可以将 tomee.xml 用于相同目的。所以,我将它添加到我的 conf/tomee.xml 中。

<Resource id="TestDS" type="DataSource">
    JdbcDriver  com.mysql.jdbc.Driver 
    JdbcUrl jdbc:mysql://localhost/test 
    UserName    root 
    Password    some_pass 
</Resource>

我将 MySQL 驱动程序 JAR 复制到 tomee/lib 文件夹。

我写了这段代码。在此处显示 sn-ps:

@Resource(name="TestDS") 
DataSource ds; 

Connection con = ds.getConnection(); 
PreparedStatement ps = con.prepareStatement("select * from UserProfile"); 

prepareStatement() 调用抛出此异常:

java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: USERPROFILE 
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source) 

为什么系统使用hsqldb驱动?事实上,无论@Resource 的名称是什么,我都会遇到同样的异常。

我做错了什么?我正在从 Eclipse 启动 TomEE,如果这有什么不同的话。

【问题讨论】:

【参考方案1】:

我已经找到了根本原因。仅当我从 Eclipse 启动 TomEE 时才会出现此问题。如果我从命令行启动它,我的数据源定义就可以正常工作。

看来,当我从命令行运行 TomEE 时,它使用来自 /.metadata/.plugins/org.eclipse.wst.server.core/tmp0/conf 的配置文件。要改变这一点,我必须在 Eclipse 中采取这些步骤:

    从服务器中删除所有已部署的项目。 打开服务器设置并从“服务器位置”中选择“使用 Tomcat 安装”。如果您至少有一个项目仍部署到服务器,则此部分显示为灰色。因此,请确保您已完成第 1 步。 重新启动服务器并重新部署应用程序。现在,我的应用程序正在查找数据源。

【讨论】:

我遇到了完全相同的问题...TomEE 使用了错误的 tomee.xml 文件...但是,我使用的是 NetBeans。我不知道如何解决这个问题。【参考方案2】:

一般安装说明在这里http://tomee.apache.org/tomee-and-eclipse.html

【讨论】:

默认情况下应该使用“使用 Tomcat 安装”选项以避免不必要的麻烦。【参考方案3】:

[我会将此作为对 RajV 答案的评论,但没有足够的声誉这样做。]

平台:Tomee 1.6.0 Webprofile、eclipse-jee-kepler-SR2-linux-gtk-x86_64 和 OpenJDK 1.7.0_51

执行http://tomee.apache.org/tomee-and-eclipse.html 中的步骤(包括“工作区元数据安装”)后,我得到了同样的错误“用户缺少权限或找不到对象”。 我的反应是:

$ ln -s [workspace_path]/Servers/tomee.xml \ [workspace_path]/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/conf/

作为这个解决方案的一个优势,Eclipse 中的 TomEE 始终使用当前版本的 Workspace/Servers/tomee.xml,无需任何进一步的手动操作。

【讨论】:

【参考方案4】:

对我来说,更好的解决方案是将 tomee.xml 文件放在您的 wpt 服务器目录 (/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/conf) 并在那里定义您的数据源。

【讨论】:

以上是关于如何在 TomEE 中定义 MySQL 数据源?的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate、mysql 和 Tomee - org.hsqldb.HsqlException:用户缺少权限或找不到对象

如何解决 TomEE 8.x、Hibernate 5.4 和 Java 8 的 ASM 问题?

如何在 Tomee docker 容器上启用 https?

为啥我在本地 TomEE 1.6 中收到 HsqlException?

Tomcat和TomEE、TomEE和TomEE Plus有啥区别

获取 SQLException:当使用系统属性定义资源时,Driver:org.hsqldb.jdbcDriver 为 tomee 中的 URL 返回 null