ClassNotFoundException HikariCP с плагином gretty с использованием Jetty 9

Я создал демонстрационное веб-приложение Spring в качестве доказательства концепции. Он отлично работает, когда я запускаю класс JettyWrapper (встроенный Jetty). Однако, когда я пытаюсь запустить запуск Jetty 9 с помощью плагина gretty, я получаю ClassNotFoundException HikariCP, даже добавляя HikariCP в путь к классам плагина.

    jetty.xml config file

    ...
    <New class="com.zaxxer.hikari.HikariDataSource">
        <Arg>
            <New id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
                <Set name="poolName"><SystemProperty name="hikaricp.poolName" default="HikariCP"/></Set>
                <Set name="driverClassName"><SystemProperty name="hikaricp.driverClassName" default="org.hsqldb.jdbc.JDBCDriver"/></Set>
                <Set name="idleTimeout"><SystemProperty name="hikaricp.idleTimeout" default="10000"/></Set>
                <Set name="maximumPoolSize"><SystemProperty name="hikaricp.maximumPoolSize" default="5"/></Set>
                <Set name="username"><SystemProperty name="hikaricp.username" default="SA"/></Set>
                <Set name="password"><SystemProperty name="hikaricp.password" default=""/></Set>
                <Set name="jdbcUrl"><SystemProperty name="hikaricp.jdbcUrl" default="jdbc:hsqldb:hsql://localhost/demodb"/></Set>
                <Set name="connectionTestQuery"><SystemProperty name="hikaricp.connectionTestQuery" default="SET DATABASE SQL SYNTAX MYS TRUE"/></Set>
                <Set name="connectionInitSql"><SystemProperty name="hikaricp.connectionInitSql" default="SET DATABASE SQL SYNTAX MYS TRUE"/>
                </Set>
            </New>
        </Arg>
    </New>
    ...


Exception in thread "main" java.lang.ClassNotFoundException: com.zaxxer.hikari.HikariDataSource
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.eclipse.jetty.util.Loader.loadClass(Loader.java:86)
    at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.nodeClass(XmlConfiguration.java:364)
    at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:754)
    at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.itemValue(XmlConfiguration.java:1125)
    at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.value(XmlConfiguration.java:1030)
    at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:775)
    at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:423)
    at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:298)
    at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:248)
    at org.eclipse.jetty.xml.XmlConfiguration$configure.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
    at org.akhikhl.gretty.JettyConfigurerImpl.applyJettyXml(JettyConfigurerImpl.groovy:64)
    at org.akhikhl.gretty.JettyConfigurer$applyJettyXml$0.call(Unknown Source)

Если кто-то может помочь советами и/или указаниями, будем очень благодарны.

ОТРЕДАКТИРОВАНО: После того, как я решил эту проблему, я обнаружил новую проблему, связанную с тем, что заставило меня другой пост. В этом случае у меня были дополнительные ресурсы, которые нужно было добавить в путь к классам (каталог конфигурации), и я потратил пару часов, пока не нашел недокументированную функцию. Теперь все работает нормально.


person Wellington Souza    schedule 25.08.2016    source источник


Ответы (1)


Как вы добавляете библиотеку в путь к классам Gretty?

Я сделал что-то подобное с этой строкой в ​​моем gradle.build:

dependencies { ///... gretty 'my:library:version' }

И это сработало отлично

http://akhikhl.github.io/gretty-doc/Servlet-container-classpath.html

Кстати, я также использую HikariCP в веб-приложении, запущенном Gretty, но в моем случае я создаю экземпляр пула программно, а библиотека Hikari находится в пути к классам веб-приложения, а не в контейнере.

person Juan Calero    schedule 26.08.2016
comment
Большое спасибо, я попробую. - person Wellington Souza; 26.08.2016
comment
зависимость gretty у меня отлично работает, спасибо за помощь - person Wellington Souza; 27.08.2016
comment
Хорошо использовать пул соединений в контейнере, так как его можно использовать в веб-приложениях через JNDI, что оптимизирует соединения с базой данных. У меня есть несколько веб-приложений, использующих одну и ту же базу данных, и в моем случае это кажется более подходящим. - person Wellington Souza; 29.08.2016