4

我正在尝试按照这种方法为嵌入式 glassfish 创建数据源。本教程和我的代码之间唯一的显着区别是我使用官方 maven 插件和embedded-glassfish:run目标运行服务器。

pom文件中有对JDBC驱动的依赖:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.3.155</version>
</dependency> 

和我的glassfish-resources.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
  <jdbc-resource enabled="true" jndi-name="jdbc/myDatasource" object-type="user" pool-name="connectionPool">
    <description/>
  </jdbc-resource>
  <jdbc-connection-pool datasource-classname="org.h2.jdbcx.JdbcDataSource"  name="connectionPool" res-type="javax.sql.DataSource">
    <property name="URL" value="jdbc:h2:~/Documents/Projetos/DBs/h2/glassfish/glassfish;AUTO_SERVER=TRUE;MVCC=TRUE"/>
    <property name="User" value="sa"/>
    <property name="Password" value=""/>
    <property name="driverClass" value="org.h2.Driver"/>
  </jdbc-connection-pool>
</resources> 

它使用本地 glassfish 服务器运行良好。但是嵌入式实例并不幸运:

2011 年 3 月 6 日 19:26:31 com.sun.enterprise.v3.server.ApplicationLifecycle deploy GRAVE:资源无效:jdbc/myDatasource_ pm java.lang.RuntimeException:资源无效: com.sun.enterprise 的 jdbc/myDatasource _pm .connectors.ConnectorRuntime.lookupDataSourceInDAS(ConnectorRuntime.java:539) 在 com.sun.enterprise.connectors.ConnectorRuntime.lookupPMResource(ConnectorRuntime.java:468) 在 org.glassfish.persistence.common.PersistenceHelper.lookupPMResource(PersistenceHelper.java:63 ) 在 org.glassfish.persistence.jpa.ProviderContainerContractInfoBase.lookupDataSource(ProviderContainerContractInfoBase.java:71) 在

我一无所知...有人可以对此有所了解吗?

4

2 回答 2

6

弄清楚了。glassfish-resources.xml毕竟这无关。jdbc 资源已正确创建并绑定到java:app/jdbc/myDatasource.

我的持久性单元(由 Netbeans 生成)正在寻找jdbc/myDatasource但没有找到任何东西。我最终将我的持久性单元更改为指向应用程序命名空间:

<jta-data-source>java:app/jdbc/myDatasource</jta-data-source>

另一种选择是使用embedded-glassfish:admin目标来部署具有非标准名称的全局资源(以便我可以使用jdbc/myDatasource)。但走向标准似乎是最好的方法。

这个话题很有帮助。

于 2011-06-05T03:37:28.233 回答
0

我仍然无法开始glassfish-resources.xml工作。但是这里的这颗宝石似乎可以解决问题:

@DataSourceDefinition(name = "java:app/jdbc/myDatasource", 
 className = "org.h2.jdbcx.JdbcDataSource", 
 url = "jdbc:h2:~/Documents/Projetos/DBs/h2/glassfish/glassfish;AUTO_SERVER=TRUE;MVCC=TRUE", 
 user = "glassfish",
 password="emb"
) 

我创建了另一个用户,因为如果密码为空,则会引发一些讨厌的异常。(漏洞?)

于 2011-06-03T23:35:40.273 回答