我能够在standalone.xml中配置MySQL DataSource并且工作正常。但我想使用@DataSourceDefinition
注释来配置DataSource。
如何在JBoss AS7中使用@DataSourceDefinition配置MySQL数据源?
我已经尝试过的是:
@DataSourceDefinition(
className = "com.mysql.jdbc.Driver",
name = "java:global/jdbc/MyDS",
serverName="localhost",
portNumber=3306,
user = "root",
password = "admin",
databaseName = "test"
)
@Startup
public class DBConfig {
}
与此 persistence.xml :
一起使用<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
<persistence-unit name="javaee6-app" transaction-type="JTA">
<jta-data-source>java:global/jdbc/MyDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
我在WEB-INF/lib
中有mysql连接器jar文件。
但是当我部署应用程序时,我收到了这个错误:
(DeploymentScanner-threads - 2){“JBAS014653:复合操作 失败并被退回。失败的步骤:“=&gt; {”操作步骤-2“ =&GT; {“JBAS014771:缺少/不可用依赖项的服务”=&gt; [ “jboss.persistenceunit。\” javaee6-app.war#javaee6应用内\ “jboss.naming.context.java.global.jdbc.MyDSMissing [jboss.persistenceunit。\” javaee6-app.war#javaee6应用内\” jboss.naming.context.java.global.jdbc.MyDS]“]}}}
答案 0 :(得分:4)
我自己想出来了。
JBoss AS7扫描过程似乎存在一些缺陷。根据Java EE 6规范,它应扫描任何类上的@DataSourceDefinition
注释。但是如果我们把它放在一个有@Stateless
注释的类上,它就可以了。
@DataSourceDefinition(
className = "com.mysql.jdbc.Driver",
name = "java:global/jdbc/MyDS",
serverName="localhost",
portNumber=3306,
user = "root",
password = "admin",
databaseName = "test"
)
@Stateless
public class DBConfig {
public void test() { //there should be atleast one method, so this dummy
}
}
答案 1 :(得分:0)
您可以遇到的下一个问题是:
java.lang.ClassCastException:com.mysql.jdbc.Driver无法强制转换为javax.sql.DataSource
因为className
的参数@DataSourceDefinition
必须提供DataSource
实现(请参阅javadoc),而不是驱动程序类。
对于MySQL,它可以是:
className = "com.mysql.jdbc.jdbc2.optional.MysqlDataSource"
className = "com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"
className = "com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" // XA transaction
答案 2 :(得分:-1)
一个建议是将standalone.xml中的数据源名称或jboss中的domain.xml配置为7.并在jboss模块中配置mysql连接器jar。并尝试。
配置Mysql连接器jar请参阅此链接。
http://www.mastertheboss.com/jboss-datasource/how-to-configure-a-datasource-with-jboss-7
Standalone.xml中的数据源配置请参阅此链接
https://docs.jboss.org/author/display/AS71/DataSource+configuration