Java 使用OSGI将H2数据库添加到Jetty-无法解析驱动程序

Java 使用OSGI将H2数据库添加到Jetty-无法解析驱动程序,java,jetty,osgi,driver,datasource,Java,Jetty,Osgi,Driver,Datasource,我将独立Jetty与org.eclipse.Jetty.osgi.boot捆绑包一起用于我的webapp。 到目前为止,一切都很令人满意。但现在我尝试使用身份验证并添加一个JDBS数据源来存储我的用户凭据 为此,我在jetty.xml中添加了以下代码(根据jetty文档): Jetty boot使用其包的类加载器来解析配置中的任何类。为了让Jetty看到H2的包装,我可以想到一个选项: 创建一个bundle,它是jetty引导的片段,并导入必要的H2包。您的捆绑包将只有一个MANIFEST.MF

我将独立Jetty与org.eclipse.Jetty.osgi.boot捆绑包一起用于我的webapp。 到目前为止,一切都很令人满意。但现在我尝试使用身份验证并添加一个JDBS数据源来存储我的用户凭据

为此,我在jetty.xml中添加了以下代码(根据jetty文档):


Jetty boot使用其包的类加载器来解析配置中的任何类。为了让Jetty看到H2的包装,我可以想到一个选项:

创建一个bundle,它是jetty引导的片段,并导入必要的H2包。您的捆绑包将只有一个MANIFEST.MF文件,其内容如下:

Bundle-SymbolicName: jettyboot.mix.with.h2
Bundle-Version: 1.0.0
Fragment-Host: org.eclipse.jetty.osgi.boot
Import-Package: org.h2,org.h2.jdbcx
编辑

基于stacktrace,您可以使用JDBCLoginService。我刚刚快速浏览了一下,它在代码中使用了Class.forName(className)。我很抱歉,但我确信这对你不起作用


我不熟悉Jetty的这一部分,但正如我所看到的,有一个DataSourceLoginService。它可以使用预实例化的数据源,因此类加载不应该是一个问题。这可能对你有用。

不幸的是,这也不起作用。我还试图摆弄主机包的类路径。。。但是没有成功。你看到另一个选项了吗?附加信息:我用一个连接h2数据库的小豆扩展了jetty引导包-这很有效。因此,jetty引导包本身似乎看到了h2包。然而,jetty本身(代表jetty.security)没有看到h2.driver类。您能添加stacktrace吗?我已经在上面添加了stacktrace
12:12:57.462 WARN  JDBCLoginService UserRealm jdbcrealm could not connect to database; will try later
java.lang.ClassNotFoundException: org.h2.Driver not found by org.eclipse.jetty.security [41]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1550) ~[na:na]
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:77) ~[na:na]
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1988) ~[na:na]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_45]
at java.lang.Class.forName0(Native Method) ~[na:1.8.0_45]
at java.lang.Class.forName(Unknown Source) ~[na:1.8.0_45]
at org.eclipse.jetty.security.JDBCLoginService.connectDatabase(JDBCLoginService.java:198) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.security.JDBCLoginService.loadUser(JDBCLoginService.java:239) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.security.MappedLoginService.login(MappedLoginService.java:221) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.security.JDBCLoginService.login(JDBCLoginService.java:223) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.security.authentication.LoginAuthenticator.login(LoginAuthenticator.java:52) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.security.authentication.FormAuthenticator.login(FormAuthenticator.java:192) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.security.authentication.FormAuthenticator.validateRequest(FormAuthenticator.java:229) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:499) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:213) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:138) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:92) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1099) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:446) ~[org.eclipse.jetty.servlet_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:175) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1031) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:200) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.Server.handle(Server.java:445) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:269) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:229) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358) ~[org.eclipse.jetty.io_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:601) ~[org.eclipse.jetty.util_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:532) ~[org.eclipse.jetty.util_9.0.6.v20130930.jar:9.0.6.v20130930]
at java.lang.Thread.run(Unknown Source) ~[na:1.8.0_45]
12:12:57.464 WARN  JDBCLoginService UserRealm jdbcrealm could not load user information from database
java.sql.SQLException: Can't connect to database
at org.eclipse.jetty.security.JDBCLoginService.loadUser(JDBCLoginService.java:242) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.security.MappedLoginService.login(MappedLoginService.java:221) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.security.JDBCLoginService.login(JDBCLoginService.java:223) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.security.authentication.LoginAuthenticator.login(LoginAuthenticator.java:52) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.security.authentication.FormAuthenticator.login(FormAuthenticator.java:192) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.security.authentication.FormAuthenticator.validateRequest(FormAuthenticator.java:229) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:499) ~[org.eclipse.jetty.security_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:213) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:138) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:92) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1099) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:446) ~[org.eclipse.jetty.servlet_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:175) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1031) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:200) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.Server.handle(Server.java:445) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:269) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:229) ~[org.eclipse.jetty.server_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358) ~[org.eclipse.jetty.io_9.0.6.v20130930.jar:9.0.6.v20130930]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:601) ~[org.eclipse.jetty.util_9.0.6.v20130930.jar:9.0.6.v20130930]
at  org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:532) ~[org.eclipse.jetty.util_9.0.6.v20130930.jar:9.0.6.v20130930]
at java.lang.Thread.run(Unknown Source) ~[na:1.8.0_45]
Bundle-SymbolicName: jettyboot.mix.with.h2
Bundle-Version: 1.0.0
Fragment-Host: org.eclipse.jetty.osgi.boot
Import-Package: org.h2,org.h2.jdbcx