Использование Maven для развертывания на встроенном Tomcat с источником данных - PullRequest
7 голосов
/ 20 июля 2010

У меня есть многомодульное веб-приложение maven, которое использует hibernate.

Я использую цель tomcat: run, чтобы запустить ее на встроенном сервере tomcat maven.Пока все работает нормально.

Но теперь мне нужно переключиться с явной конфигурации jdbc в hibernate.properties на источник данных.Я сделал следующее:

  • изменил hibernate.properties

с

hibernate.connection.driver_class=oracle.jdbc.OracleDriver
hibernate.connection.url=jdbc:somejdbcurl
hibernate.connection.username=aUser
hibernate.connection.password=aPassword

на

hibernate.connection.datasource=java:comp/env/jdbc/datasourcename
  • в web.xml я добавил
<resource-ref>
    <res-ref-name>jdbc/datasourcename</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
  • и добавил context.xml рядом с web.xml со следующим содержимым:
<Context>
  <Resource name="jdbc/datasourcename"
         auth="Container"
         type="javax.sql.DataSource"
         username="aUser" password="aPassword"
         driverClassName="oracle.jdbc.OracleDriver"
         url="jdbc:somejdbcurl"
         maxActive="2" maxIdle="2"/>
</Context>

Это не сработает, что и ожидается, поскольку я не нашел способа предоставить файл jar, содержащий драйвер Oracle jdbc.Я ожидал исключения ClassNotFound или чего-то подобного, но вместо этого я получил

org.hibernate.exception.GenericJDBCException: Cannot open connection

с коренной причиной в стеке:

Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

Оооочень вопросы:

  • Почему tomcat не знает, что я хочу, чтобы он использовал драйвер Oracle?
  • Как мне сообщить tomcat о файле jar, который содержит драйвер?

1 Ответ

11 голосов
/ 20 июля 2010

Вам необходимо добавить драйвер JDBC в объявлении плагина:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>tomcat-maven-plugin</artifactId>
  <version>1.0</version>
  <configuration>
    ...
  </configuration>
  <dependencies>
    <dependency>
      <groupId>...</groupId>
      <artifactId>...</artifactId>
      <version>...</version>
    </dependency>
  </dependencies>
</plugin>

Кстати, значение по умолчанию для contextFile равно src/main/webapp/META-INF/context.xml.

...