2015-04-22 41 views
2

我将我的网络应用程序部署到WildFly 8.02 Final服务器。我用默认的开箱即用的数据源,内设有带JNDI名称空间的服务器:H2中我的桌子在哪里?

java:jboss/datasources/ExampleDS 

和我使用默认网址:

jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE 

从IntelliJ IDEA的数据库客户端工具或其他客户端访问H2应用程序(我使用url连接,因为通过默认端口的tcp连接不起作用)。

该应用程序基本上是一个空的WAR,只有实体bean和persistence.xml文件。我打算根据我的注释纯粹测试将在底层数据源中创建哪些表。

这里的事:当我在persistence.xml中设置:

<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/> 

战争成功地部署了,但是当我通过任意客户端工具将H2数据源连接我只能看到预先定义的表之后:

SELECT * FROM INFORMATION_SCHEMA.TABLES 

我可以通过客户端工具创建表,并且能够通过以前的SQL查询来跟踪它们的存在。所以看起来表格并不是由JPA框架创建的。

但是,当我改变的persistence.xml到不同的模式创建模式:

<property name="javax.persistence.schema-generation.database.action" value="create"/> 

部署将失败,JDBC例外,告诉JPA尝试创建已经存在的表,但在同一时间客户端工具还是做不显示任何用户创建的表格。

Thx。

回答

2

http://www.h2database.com/html/features.html#in_memory_databases看看:

To access an in-memory database from another process or from another computer, 
you need to start a TCP server in the same process as the in-memory database 
was created. The other processes then need to access the database over TCP/IP 
or TLS, using a database URL such as: jdbc:h2:tcp://localhost/mem:db1. 

看看这里的一个例子:

H2 database in memory mode cannot be accessed by Console

+0

大,THX了很多。现在至少我明白发生了什么,希望我能配置wildfly的默认数据库作为TCP服务器运行。 – Ivan