【问题标题】:How to create statements on TomEE-managed DataSource connection?如何在 TomEE 管理的 DataSource 连接上创建语句?
【发布时间】:2016-06-30 08:54:07
【问题描述】:

我在 Eclipse 中工作。我添加了一个启动良好的 TomEE 服务器,但创建 MySQL 数据源似乎有问题。

我在 TomEE 1.7.2 中定义了以下 DataSource:

<Resource id="jdbc/WCMDS" type="javax.sql.DataSource">
    jdbcDriver com.mysql.jdbc.Driver
    jdbcUrl jdbc:mysql://localhost:3306/wcm?useUnicode=yes&amp;characterEncoding=utf8&amp;autoReconnect=true
    jtaManaged false 
    password pass
    userName user
    InitialSize 50 
    MaxActive 100
    MaxIdle 3   
</Resource>

在我的 bean 中,我检索数据源

@PostConstruct
public void postConstruct() {
    InitialContext context = new InitialContext();
    String dataSourceName="java:/comp/env/"+getDatasourceJndiName();
    DataSource dataSource = (DataSource) context.lookup(dataSourceName);
    DATASOURCE = dataSource;

在执行查询的 bean 方法中,我使用检索到的 DataSource 来获取连接。

Connection connection = DATASOURCE.getConnection();

然后我构建一个 PreparedStatement

connection.prepareStatement("select * from myTableName");

在准备声明时,我遇到了javax.el.ELException: org.hsqldb.HsqlException: user lacks privilege or object not found: myTableName

================================================ ===============

请注意,这不是数据库方面的问题。当我用手动创建的数据源替换 jndi 查找时,一切正常。

MysqlDataSource datasource = new MysqlDataSource();
datasource.setURL("jdbc:mysql://localhost:3306/wcm?useUnicode=yes&amp;characterEncoding=utf8&amp;autoReconnect=true");
datasource.setUser("user");
datasource.setPassword("pass");
DATASOURCE=datasource;

================================================ ===============

所以我得到的错误一定与 TomEE 管理的数据源有关。为什么来自此类数据源的连接会阻止我创建语句?

【问题讨论】:

  • 您是否将最新的 mysql-connector-5.1.x.jar 复制到您的 tomee/lib 文件夹中?如果不是,这可能是原因,因为在容器从基于 xml 的配置初始化数据源的早期启动阶段,容器没有 mysql 驱动程序。出于这个原因,默认情况下会启动一个存根/虚拟 hsqldb(它与您的 mysql DB 没有任何共同点)。
  • 是的,我在C:/TomEE_1_7_2/lib 中有mysql-connector-java-5.1.18-bin.jar。

标签: mysql datasource apache-tomee


【解决方案1】:

所以这似乎是Eclipse下TomEE的问题。另一位用户遇到了这个问题并展示了他的发现。我已按照他的指示进行操作,现在我正在获取 MySQL 数据源。

How to define MySQL data source in TomEE?

【讨论】:

    【解决方案2】:

    资源尚未创建,您获得了默认的 hsqldb 数据源。

    你在 conf/tomee.xml 中定义了吗?

    提示:您可以在 openejb 中使用 JMX 控制台检查配置的数据源

    【讨论】:

    • 根据我的问题中的 sn-p,我已将其添加到 tomee.xml。我也试过type="com.mysql.jdbc.jdbc2.optional.MysqlDataSource"。请注意,我没有收到 NameNotFound 异常。它使用 GeronimoTransactionManager 查找托管数据源。
    • 我发现一篇帖子说在 Eclipse 下的服务器上设置 TomEE 数据源存在问题。所以我应该补充一下我在 Eclipse 中工作的问题。我已经在/servers/ 目录下复制了tomee.xml,但这并没有什么区别。
    • type 应该是“DataSource”(它是资源类型而不是限定名称)并且 MysqlDataSource 应该是 JdbcDriver 属性值或 class-name 属性值,具体取决于您所做的配置。
    猜你喜欢
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 2019-05-15
    • 2012-02-13
    • 2019-05-16
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多