Что я хочу, так это то, что когда Jetty запускается, он создает базу данных, которую могут использовать мои веб-приложения. Моя цель — иметь возможность развертывать мои веб-приложения на каждом компьютере для отображения моего приложения.
Мне нужен способ объявить мою базу данных HSQLDB (у меня есть SQL-файлы для всех моих баз данных, чтобы настроить структуру и заполнить ее данными) в конфигурации Jetty. Эти параметры должны быть установлены только один раз и не будут меняться в будущем.
Я чувствую, что искал его везде и пробовал все, но ничего не работает :( Между прочим, я использую Jetty 9.
Это один из вариантов, которые я пробовал, и который кажется мне близким к моему решению. Я добавил этот код в jetty/etc/jetty.xml
<New id="toto" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg></Arg>
<Arg>jdbc/toto</Arg>
<Arg>
<New class="org.apache.commons.dbcp.BasicDataSource">
<Set name="DriverClassName">org.hsqldb.jdbc.jdbcDataSource</Set>
<Set name="Url">jdbc:hsqldb:hsql://localhost:9015/toto</Set>
<Set name="Username">toto</Set>
<Set name="Password">toto</Set>
</New>
</Arg>
</New>
а этот в jett/etc/webdefault.xml
<resource-ref>
<res-ref-name>jdbc/toto</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
С Рождеством всех, кто может мне помочь :)
Редактировать 26/12/2013: Еще один вариант, который я пробовал, — настроить базу данных через Spring в Eclipse. Каждое веб-приложение соответствует проекту (архитектура maven) и использует собственную базу данных. Таким образом, для одного проекта я сделал это:
*conf/common/resources/applicationContext.xml (проект)
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:mem:toto"/>
<property name="username" value="toto"/>
<property name="password" value="toto"/>
</bean>
*conf/dev/WEB-INF/web.xml (проект)
<resource-ref>
<res-ref-name>jdbc/toto</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
*conf/dev/WEB-INF/jetty-web.xml (проект)
<Configure id='wac' class="org.eclipse.jetty.webapp.WebAppContext">
<New id="square" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg><Ref id="wac" /></Arg>
<Arg>jdbc/square</Arg>
<Arg>
<New class="org.hsqldb.jdbc.jdbcDataSource">
<Set name="Database">file:square</Set>
<Set name="User">${database.connection.username}</Set>
<Set name="Password">${database.connection.password}</Set>
</New>
</Arg>
</New>
</Configure>
*jetty/start.ini (Jetty): раскомментируйте эти строки.
OPTIONS=jndi
OPTIONS=plus
etc/jetty-plus.xml
При всем этом я получаю это исключение:
java.lang.ExceptionInInitializerError
at org.apache.jasper.servlet.JspServlet.init(JspServlet.java:159)
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:540)
at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:349)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:812)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:288)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1322)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:732)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:490)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:118)
at org.eclipse.jetty.util.component.ContainerLifeCycle.addBean(ContainerLifeCycle.java:282)
at org.eclipse.jetty.util.component.ContainerLifeCycle.addBean(ContainerLifeCycle.java:214)
at org.eclipse.jetty.util.component.ContainerLifeCycle.updateBeans(ContainerLifeCycle.java:764)
at org.eclipse.jetty.server.handler.HandlerCollection.setHandlers(HandlerCollection.java:89)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.setHandlers(ContextHandlerCollection.java:145)
at org.eclipse.jetty.server.handler.HandlerCollection.addHandler(HandlerCollection.java:155)
at org.eclipse.jetty.deploy.bindings.StandardDeployer.processBinding(StandardDeployer.java:41)
at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186)
at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:495)
at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:146)
at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:175)
at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64)
at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:605)
at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:528)
at org.eclipse.jetty.util.Scanner.scan(Scanner.java:391)
at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:329)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
ИЗМЕНИТЬ 01.07.2014
Я отказался от этого пути, но мне удалось сделать то, что я хочу здесь: Подключить базы данных к серверу HSQLDB< /а>