【发布时间】:2011-12-08 13:10:39
【问题描述】:
我在部署到 JBoss 时遇到了访问 Oracle 数据库的问题。部署到 Tomcat 工作正常——没问题。我怀疑这个问题与 JBoss 附带的一个冲突库有关。当我尝试查询数据库(使用 Hibernate)时,我得到以下信息:
2011-12-08 08:02:53,640 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/xxxx].[xxxx]] (http-0.0.0.0-8080-9) Servlet.service() for servlet xxxx threw exception
java.lang.IllegalStateException: BaseClassLoader@50d81341{vfszip:/opt/jboss/jboss-eap-5.1/jboss-as/server/web/deploy/xxxxx.war/} classLoader is not connected to a domain (probably undeployed?) for class oracle.sql.DATE
at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:857)
at org.jboss.classloader.spi.base.BaseClassLoader.doLoadClass(BaseClassLoader.java:502)
at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:447)
同样,在 Tomcat 中运行时没有这样的问题。我在我的 webroot 中设置了一个 jboss-classloading 文件,其中包含:
<classloading xmlns="urn:jboss:classloading:1.0"
parent-first="false" domain="DefaultDomain" top-level-classloader="true"
parent-domain="Ignored" export-all="NON_EMPTY" import-all="true" />
但这似乎没有帮助。奇怪的是,我用两种不同的休眠配置连接到两个不同的数据库,一个是 Oracle 11i,一个是 Oracle 8i。 Oracle 11 连接永远不会引发问题......它只是导致此问题的 8i 连接。 11 连接工作正常。
我不知道为什么会这样,但也许 JBoss 包含 Oracle 8 Hibernate 方言库而不是 Oracle 11 方言库?无论如何,我如何告诉 JBoss 使用我的打包库而不是在其类路径中找到的库(假设这是我的问题)?
【问题讨论】:
-
我需要 jboss-web.xml(在 WEB-INF 中):
com.talecris:archive=flint.战争 java2ParentDelegation=false -
这是我们在 jboss 部署中所做的,我们从 JBOSS 服务器中删除了所有的休眠 jars。在我们的例子中,我们应用程序上的休眠版本与 jboss 版本不匹配。
-
最简单的方法是从 jboss 服务器中删除 hibernate jars 并将 jars 放在你的类路径中。否则你需要配置一个 jboss-web