J'exécute mon application sur un serveur WildFly 10. Je ne souhaite pas placer les détails de ma connexion sur les codes src de mon application, j'essaie donc de le placer dans le serveur WildFly 10 lui-même.
Cependant, je suis confronté à des problèmes.
Sous [WILDFLY_HOME]\modules\system\layers\base\com\Microsoft
, j'ai créé le répertoire suivant sqlserver\main
et je place mon fichier JAR et mon fichier XML dans le dossier principal.
Le fichier JAR que j'utilise est sqljdbc.jar
.
module.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!-- JDBC Drivers module.xml file to configure your JDBC drivers-->
<!-- SQL Server 2014 example -->
<module xmlns="urn:jboss:module:1.3" name="com.Microsoft.sqlserver">
<resources>
<resource-root path="sqljdbc.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
Suivant sous [WILDFLY_HOME]\standalone\configuration
, j'ai modifié le standalone.xml
. Dans la section relative à la source de données du sous-système, j’ajoute les détails de SQL Server.
standalone.xml:
<subsystem xmlns="urn:jboss:domain:datasources:4.0">
<datasources>
<datasource jndi-name="Java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-Java-context="true">
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
<datasource jndi-name="Java:/TestDS" pool-name="TestDS" enabled="true" use-Java-context="true">
<connection-url>jdbc:sqlserver://localhost\test:1433;databaseName=test</connection-url>
<driver>mssql</driver>
<security>
<user-name>sa</user-name>
<password>Password123!</password>
</security>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>50</max-pool-size>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
<flush-strategy>FailingConnectionOnly</flush-strategy>
</pool>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"></valid-connection-checker>
</validation>
</datasource>
<drivers>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
<driver name="mssql" module="com.Microsoft.sqlserver">
<xa-datasource-class>com.Microsoft.sqlserver.jdbc.SQLServerDriver</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>
L'erreur à laquelle je suis confronté est celle décrite ci-dessous lorsque je commence à utiliser WildFly:
15:19:51,098 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([
("subsystem" => "datasources"),
("data-source" => "TestDS")
]) - failure description: {
"WFLYCTL0412: Required services that are not installed:" => [
"jboss.jdbc-driver.mssql",
"jboss.jdbc-driver.mssql"
],
"WFLYCTL0180: Services with missing/unavailable dependencies" => [
"org.wildfly.data-source.TestDS is missing [jboss.jdbc-driver.mssql]",
"jboss.driver-demander.Java:/TestDS is missing [jboss.jdbc-driver.mssql]",
"org.wildfly.data-source.TestDS is missing [jboss.jdbc-driver.mssql]"
]
}
15:19:51,120 INFO [org.jboss.as.controller] (Controller Boot Thread) WFLYCTL0183: Service status report
WFLYCTL0184: New missing/unsatisfied dependencies:
service jboss.jdbc-driver.mssql (missing) dependents: [service org.wildfly.data-source.TestDS, service jboss.driver-demander.Java:/TestDS]
J'ai réussi à résoudre le problème avec cela.
Depuis que je place le fichier dans ce répertoire: [WILDFLY_HOME]\modules\system\layers\base\com\Microsoft
Ensuite, l'emplacement correct du module devrait être comme suit pour la source de données normale:
<driver name="mssql" module="system.layers.base.com.Microsoft.sqlserver">
<driver-class>com.Microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
</driver>
ou
si vous utilisez une source de données xa:
<driver name="mssql" module="com.Microsoft.sqlserver">
<xa-datasource-class>com.Microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
</driver>
crédits à @jklee
Le pilote est faux, utilisez
<driver name="mssql" module="com.Microsoft.sqlserver">
<xa-datasource-class>com.Microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
</driver>
ou
<driver name="mssql" module="com.Microsoft.sqlserver">
<driver-class>com.Microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
</driver>
Vous pouvez ajouter sqlserver
comme module global comme indiqué ci-dessous
<subsystem xmlns="urn:jboss:domain:ee:4.0">
<global-modules>
<module name="com.Microsoft.sqlserver" slot="main"/>
<module name="com.sql.mysql" slot="main"/>
</global-modules>
.
.
</subsystem>