2013-02-26 30 views
8

Tôi có thể định cấu hình MySQL DataSource trong standalone.xml và đang hoạt động tốt. Nhưng tôi muốn cấu hình DataSource bằng cách sử dụng chú thích @DataSourceDefinition.Định cấu hình MySQL DataSource bằng cách sử dụng @DataSourceDefinition trong JBoss AS7

Cách định cấu hình nguồn dữ liệu MySQL bằng cách sử dụng @DataSourceDefinition trong JBoss AS7?

Những gì tôi đã cố gắng là:

@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 { 
} 

cùng với điều này 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> 

Tôi có mysql tập tin kết nối jar trong WEB-INF/lib.

Nhưng khi tôi triển khai các ứng dụng Tôi nhận được lỗi này:

(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]"]}}}

Trả lời

4

I figured it out bản thân mình.

Dường như quá trình quét JBoss AS7 có một số sai sót. Theo đặc tả Java EE 6, nó sẽ quét các chú thích @DataSourceDefinition trên mọi lớp. Nhưng nó hoạt động tốt nếu chúng ta đặt nó vào một lớp có chú thích @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

Một gợi ý là tên nguồn dữ liệu trong cấu hình standalone.xml hoặc domain.xml trong JBoss như 7. và cấu hình mysql nối jar trong jboss module. Và thử.

Định cấu hình kết nối Mysql jar Tham khảo liên kết này.

http://www.mastertheboss.com/jboss-datasource/how-to-configure-a-datasource-with-jboss-7

cấu hình nguồn dữ liệu trong Standalone.xml Tham khảo link này

https://docs.jboss.org/author/display/AS71/DataSource+configuration

+0

Tôi đã nói rằng tôi có thể cấu hình DataSource trong standalone.xml. Tôi đang tìm cấu hình dựa trên @DataSourceDefinition. –

+0

Bạn đã cấu hình Mysql Connector Jar trong Mô-đun Jboss chưa? –

0

Ngoài ra vấn đề tiếp theo mà bạn có thể có là:

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

Nguyên nhân param className của @DataSourceDefinition phải cung cấp DataSource thực hiện (xem javadoc), chứ không phải lớp lái xe.

Đối với MySQL nó có thể là:

className = "com.mysql.jdbc.jdbc2.optional.MysqlDataSource" 
className = "com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource" 
className = "com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" // XA transaction 
Các vấn đề liên quan