【发布时间】: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&characterEncoding=utf8&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&characterEncoding=utf8&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