2013-02-26 42 views
8

我可以在standalone.xml中配置MySQL數據源,並且工作正常。但我想使用@DataSourceDefinition註釋來配置數據源。在JBoss AS7中使用@DataSourceDefinition配置MySQL數據源

如何在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: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"JBAS014771: Services with missing/unavailable dependencies" => ["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]"]}}}

回答

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

一個建議是在standalone.xml或domain.xml中JBoss AS中7.配置數據源名稱和配置MySQL連接器一罐jboss模塊。並嘗試。

配置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

+0

我已經說過,我能在standalone.xml配置數據源。我正在尋找基於@DataSourceDefinition的配置。 – 2013-02-27 05:47:01

+0

您是否在Jboss模塊中配置了Mysql連接器Jar? – 2013-02-27 05:53:53

0

此外,你可以有下一個問題是:

java.lang.ClassCastException: com.mysql.jdbc.Driver cannot be cast to javax.sql.DataSource

原因PARAM的@DataSourceDefinitionclassName必須提供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