绑定默认 hsql 数据源时启动 Jboss 4.3 时出错
Posted
技术标签:
【中文标题】绑定默认 hsql 数据源时启动 Jboss 4.3 时出错【英文标题】:Error during starting Jboss 4.3 while binding default hsql datasource 【发布时间】:2018-02-12 13:56:17 【问题描述】:我在 JBoss 启动期间遇到以下错误。
[ServiceController] Problem starting service jboss:service=Hypersonic,database=localDB
java.lang.NoSuchMethodError: org.hsqldb.DatabaseURL.parseURL(Ljava/lang/String;ZZ)Lorg/hsqldb/persist/HsqlProperties;
at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source)
at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at org.jboss.jdbc.HypersonicDatabase.getConnection(HypersonicDatabase.java:768)
at org.jboss.jdbc.HypersonicDatabase.startStandaloneDatabase(HypersonicDatabase.java:618)
at org.jboss.jdbc.HypersonicDatabase.startService(HypersonicDatabase.java:564)
at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
at com.sun.proxy.$Proxy0.start(Unknown Source)
at org.jboss.system.ServiceController.start(ServiceController.java:417)
背景:我添加了一个新的 MS Access DB 数据源。为此,我正在使用 ucanaccess 库。现在,为了捆绑我的代码,我创建了一个可执行的 uber jar,其中包含我的主要测试程序以及依赖项。依赖包括以下jar:
ucanaccess-4.0.1.jar
commons-lang-2.6.jar
commons-logging-1.1.3.jar
hsqldb-2.3.1.jar
jackcess-2.1.6.jar
此外,我已经在 MSAccess-ds.xml 中配置了我的数据源并部署在部署文件夹中。我将名为“Service-MSAccessDB.jar”的 uber jar 保存在服务器 lib 文件夹以及 Ear/lib 中。现在,在服务器启动时出现上述错误。
现在,如果我将我的 jar 重命名为“EService-MSAccessDB.jar”,错误就会消失。
我觉得问题是 JBoss 服务器库已经包含 hsqldb.jar。当我放置我的超级罐子时,它会引起一些冲突。在启动时,它会尝试找到一个方法,即 DatabaseURL.parseURL(Ljava/lang/String;ZZ)Lorg/hsqldb/persist/HsqlProperties;它存在于我的 uber jar 中,但不在 hsqldb.jar 中。当我重命名我的 uber jar 使其相对于 hsqldb.jar 按字母顺序排列时,问题就消失了。
现在,我的问题是,为什么要在配置 DefaultDS 时寻找这样的方法,这是 JBoss 的默认配置。如何在不将我的 Uber jar 重命名为在我的 Jar 名称前附加“E”的情况下解决此问题是没有意义的。
【问题讨论】:
附带说明 JBoss EAP 4.3 已经有 7 年没有更新了,您可能需要更新到 EAP 的更新版本(如果您不再有支持,您可能需要更新到 Wildfly)来修复您的服务器必须存在的长达一公里的安全漏洞列表... @Aaron 我没有升级 jboss 的选项。我有一个大团队,他们所有人都有这个服务器设置和应用程序。无论如何,这不是生产服务器。它仅用于培训目的。而且我的代码也适用于所有培训服务器。谢谢。 好吧,可能(希望如此?)没有安全问题。我仍然觉得免许可的 Wildfly 10 会比 EAP 4.3 更接近您的产品服务器(假设 EAP 6.2+),因此是更好的培训工具。在此版本中,您缺少许多现代功能,无论是 JavaEE7 还是诸如 Web 控制台或 CLI 工具之类的开发工具。当然只有你知道更新的可行性。请放心,这不是对您的问题的批评,我不会仅仅因为我没有所需的知识而回答它。 感谢亚伦的关心。我们的生产服务器在 WAS 8 上。我真的没有任何权力做出改变服务器的决定。此 jboss 版本仅用于培训和演示目的,以向客户展示应用程序。谢谢。 【参考方案1】:此 JBoss 服务器包含 hsqldb.jar 版本 1.8.0.x 的副本,供其内部使用。您可以将其替换为 hsqldb-2.3.1.jar 的副本(重命名为原始 jar 的名称)以避免冲突。
【讨论】:
这不会导致内部使用问题吗?正如我所看到的,两个 jar 版本有很大的不同。另外,关于为什么它指的是我的罐子而不是现有罐子的功能有什么想法吗?感谢您的回复。 HSQLDB 2.3.0 版已通过 JBoss 3.2.7 成功测试。 AFAIK 在下一个版本中没有重大变化。该用法适用于不应出现在测试服务器中的 JBoss MQ。您可能需要删除 JBoss 数据目录中的 localDB.xxx 文件。以上是关于绑定默认 hsql 数据源时启动 Jboss 4.3 时出错的主要内容,如果未能解决你的问题,请参考以下文章