[英]Configuring MySQL DataSource using @DataSourceDefinition in JBoss AS7
我能夠在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:組合操作失敗並被回滾。失敗的步驟:” => {“ Operation step-2” => {“ JBAS014771:缺少/不可用依賴項的服務” => [“ jboss.persistenceunit。\\“ javaee6-app.war#javaee6-app \\” jboss.naming.context.java.global.jdbc.MyDSMissing [jboss.persistenceunit。\\“ javaee6-app.war#javaee6-app \\” jboss。 naming.context.java.global.jdbc.MyDS]“]}}}
我自己弄清楚了。
看來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
}
}
另外,您可能遇到的下一個問題是:
java.lang.ClassCastException:com.mysql.jdbc.Driver無法轉換為javax.sql.DataSource
原因@DataSourceDefinition
param className
必須提供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
一種建議是在jboss中的standalone.xml或domain.xml中將數據源名稱配置為7,並在jboss模塊中配置mysql連接器jar。然后嘗試。
配置Mysql Connector 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.