Основная проблема, которую я вижу, это определение <datasource>
в server.xml, вы использовали элемент <properties.db2.jcc>
, который соответствует драйверу JDBC IBM JCC JCC. Поскольку у Liberty нет специальной <properties.h2>
конфигурации, вы должны использовать общий конфигурационный элемент <properties>
, а также определять имена классов DataSource на вашем элементе <jdbcDriver>
.
Конфигурация должна выглядеть примерно так:
<dataSource id="h2test" jndiName="jdbc/h2test">
<!-- Define the DataSource class names on the <jdbcDriver> element -->
<jdbcDriver
javax.sql.XADataSource="org.h2.jdbcx.JdbcDataSource"
javax.sql.ConnectionPoolDataSource="org.h2.jdbcx.JdbcDataSource"
javax.sql.DataSource="org.h2.jdbcx.JdbcDataSource"
libraryRef="H2JDBCLib"/>
<!-- set the connection URL on the <properties> element.
this corresponds to the setURL() method on H2's JdbcDataSource class.
you may also list any properties here that have a corresponding setXXX method on H2's JdbcDataSource class -->
<properties URL="jdbc:h2:mem:testdb"/>
</dataSource>
Кроме того, было бы лучше, если бы вы поставили свой драйвер H2 JDBC где-то под ${server.config.dir}
или ${shared.resource.dir}
, так как ${wlp.install.dir}/lib
, где барабаны времени исполнения Liberty. Вы не хотите смешивать свои банки приложений с ними!
<library id="H2JDBCLib">
<fileset dir="${server.config.dir}" includes="h2-1.4.197.jar"/>
</library>
Наконец, убедитесь, что ваш файл persistence.xml находится в правильном месте в вашем приложении WAR. Он должен быть в WEB-INF/classes/META-INF/persistence.xml
. В качестве промежуточного этапа отладки вы можете проверить, чтобы DataSource был разрешен из вашего приложения следующим образом:
@Resource(lookup = "jdbc/h2test")
DataSource ds;
// ...
ds.getConnection().close();
Once вы получаете эту часть работы, переходите к инъекции вашего EntityManager
. Кроме того, не забудьте проверить ${server.config.dir}/logs/messages.log
на более подробные сообщения об ошибках, если все идет не так.