Встроенные базы данных в Jetty

Что я хочу, так это то, что когда 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< /а>


person Soma    schedule 23.12.2013    source источник
comment
Можете ли вы показать, как именно ничего не должно работать? Получаете ли вы исключение при выполнении вызовов JDBC? Ваша база данных не заполнена данными?   -  person Olaf    schedule 23.12.2013
comment
Я пытаюсь увидеть базу данных с помощью Execute Query, но она не подключается. Мне удалось подключиться к некоторой тестовой базе данных через Eclipse, но не к базе данных, которую я объявил в конфигурации Jetty. Jetty запускается правильно с этим кодом, но Execute Query не находит базу данных, говоря, что псевдоним (также известный как toto) не существует   -  person Soma    schedule 23.12.2013
comment
Я забыл уточнить, что использую hslqdb-1.8. Также мои веб-приложения разработаны с конфигурацией spring-maven, но не с последней версией Spring, в которой есть новый инструмент для встроенной базы данных.   -  person Soma    schedule 23.12.2013


Ответы (1)


Похоже, вы используете HSQLDB как встроенную базу данных, но пытаетесь подключиться к ней в режиме сервера. Пожалуйста, ознакомьтесь со следующей документацией для правильной строки подключения JDBC при запуске HSQLDB во встроенном режиме: http://hsqldb.org/doc/guide/running-chapt.html#rgc_inprocess

person Olaf    schedule 23.12.2013
comment
Невозможно заставить его работать только с XML-файлами в конфигурации Jetty? Мое приложение состоит из дюжины веб-приложений и клиента, который использует их все. Каждое веб-приложение имеет свою собственную базу данных. Я также пытался использовать файл jett-web.xml в каталоге WEB-INF проекта, но это не сработало. - person Soma; 26.12.2013