我在 CentOS 6.3 下运行 Jboss 7.1.1。我有一场能够在 Jboss 4.0.2 下运行的战争(旧的,我知道,这就是我们要更新的原因),但我很难让它在 Jboss 7 下运行。
在我的 META-INF/MANIFEST.MF 文件下,我有以下条目:
Dependencies: com.jnetdirect,org.hibernate
在我的 META-INF/jboss-deployment-structure.xml 我有:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.hibernate" export="true" />
<module name="com.jnetdirect" export="true" />
</dependencies>
</deployment>
</jboss-deployment-structure>
我创建了 {JBOSS_HOME}/modules/com/jnetdirect/main 文件夹,并在其中放置了 JSQLConnect.jar、JSQLConnect.jar.index 和 module.xml。
我的 module.xml 文件包含:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.jnetdirect">
<resources>
<resource-root path="JSQLConnect.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.servlet.api" optional="true"/>
</dependencies>
</module>
我的 JSQLConnect.jar。包含 的输出jar -tf JSQLConnect.jar
,我.class
从使用 vim 和:%s/.class//
当我./standalone.sh
从 {JBOSS_HOME}/bin 运行时,我得到以下信息:
13:38:12,402 ERROR [stderr] (MSC service thread 1-1) org.hibernate.HibernateException: Specified JDBC Driver com.jnetdirect.jsql.JSQLDriver class not found
13:38:12,402 ERROR [stderr] (MSC service thread 1-1) at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:104)
<snip>
13:38:12,430 ERROR [stderr] (MSC service thread 1-1) Caused by: java.lang.ClassNotFoundException: com.jnetdirect.jsql.JSQLDriver from [Module "org.hibernate:main" from local module loader @34985fc6 (roots: /usr/local/src/jboss-as-7.1.1.Final/modules)]
13:38:12,434 ERROR [stderr] (MSC service thread 1-1) at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
<snip>
13:38:12,452 INFO [stdout] (MSC service thread 1-1) com.cs.common.cache.SessionFactoryCache.processRequest : Exception : org.hibernate.HibernateException: Specified JDBC Driver com.jnetdirect.jsql.JSQLDriver class not found
13:38:12,453 INFO [stdout] (MSC service thread 1-1) at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:104)
<snip>
13:38:12,484 INFO [stdout] (MSC service thread 1-1) Caused by: java.lang.ClassNotFoundException: com.jnetdirect.jsql.JSQLDriver from [Module "org.hibernate:main" from local module loader @34985fc6 (roots: /usr/local/src/jboss-as-7.1.1.Final/modules)]
13:38:12,484 INFO [stdout] (MSC service thread 1-1) at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
我尝试在我的standalone.xml 中包含以下内容:
<subsystem xmlns="urn:jboss:domain:datasources:1.0">
<datasources>
<datasource jndi-name="java:jboss/datasources/REDACTED" pool-name="REDACTED" enabled="true" use-java-context="true">
<connection-url>jdbc:JSQLConnect://redacted.net:1433;DatabaseName=REDACTED</connection-url>
<driver>jnetdirect</driver>
<security>
<user-name>redacted</user-name>
<password>redacted</password>
</security>
</datasource>
<drivers>
<driver name="jnetdirect" module="com.jnetdirect">
<driver-class>com.jnetdirect.jsql.JSQLDriver</driver-class>
</driver>
</drivers>
</datasources>
</subsystem>
当我这样做时,我在启动时看到以下条目:
13:38:09,720 WARN [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 27) JBAS010402: Unable to instantiate driver class "com.jnetdirect.jsql.JSQLDriver": java.lang.ClassNotFoundException: com.jnetdirect.jsql.JSQLDriver from [Module "com.jnetdirect:main" from local module loader @34985fc6 (roots: /usr/local/src/jboss-as-7.1.1.Final/modules)]
13:38:09,748 INFO [org.jboss.as.security] (ServerService Thread Pool -- 44) JBAS013101: Activating Security Subsystem
13:38:09,755 INFO [org.jboss.as.security] (MSC service thread 1-3) JBAS013100: Current PicketBox version=4.0.7.Final
13:38:09,769 INFO [org.jboss.as.naming] (ServerService Thread Pool -- 38) JBAS011800: Activating Naming Subsystem
13:38:09,771 INFO [org.jboss.as.webservices] (ServerService Thread Pool -- 48) JBAS015537: Activating WebServices Extension
13:38:09,786 ERROR [org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 27) Operation ("add") failed - address: ([
("subsystem" => "datasources"),
("jdbc-driver" => "jnetdirect")
]) - failure description: "JBAS010434: Unable to instantiate driver class \"com.jnetdirect.jsql.JSQLDriver\". See log (WARN) for more details"
但是和以前一样的 ClassNotFoundException。
有趣的是,当我关闭服务器时,我看到以下内容:
13:38:17,424 INFO [org.jboss.as.server.deployment] JBAS015877: Stopped deployment common.war in 40ms
13:38:17,426 INFO [org.jboss.as.controller] JBAS014774: Service status report
JBAS014776: Newly corrected services:
service jboss.jdbc-driver.jnetdirect (new available)
13:38:17,430 INFO [org.jboss.as] JBAS015950: JBoss AS 7.1.1.Final "Brontes" stopped in 39ms
我正在删除standalone/log 和standalone/tmp 目录,以及每次运行之间的common.war.deployed 文件。
我想既然这是一个休眠问题,我应该添加com.jnetdirect
到休眠模块的依赖项中,但这并没有帮助。
我已经查看了jboss 7 AS 的 sqlserver 数据源、 JBoss 7 上的 JDBC Postgresql 驱动程序、如何将 Jboss-as-7.1.1 与 Postgresql和https://community.jboss.org/thread/202025连接,尽管没有这些是特定于 JNETDirect 的。
(由于高层的订单,我们正在使用 JNETDirect,所以我无法切换到另一个 JDBC 驱动程序)
想法?