2011-06-03 21 views
4

我試圖按照this的方法來創建嵌入式glassfish的數據源。教程和我的代碼之間唯一重要的區別是我使用官方maven插件和embedded-glassfish:run目標運行服務器。Maven嵌入式Glassfish插件 - 數據源和JDBC驅動

有在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服務器運行正常。但是,沒有幸運地嵌入的實例:

03/06/2011 19點26分31秒 com.sun.enterprise.v3.server.ApplicationLifecycle 部署墳墓無效的資源: JDBC/myDatasource_ 下午 了java.lang.RuntimeException:無效 資源:JDBC/myDatasource在 com.sun.enterprise.connectors.ConnectorRuntime.lookupDataSourceInDAS(ConnectorRuntime.java:539) _PM在 com.sun.enterprise.connectors.ConnectorRuntime.lookupPMResource( ConnectorRuntime.java:468) at org.glass fish.persistence.common.PersistenceHelper.lookupPMResource(PersistenceHelper.java:63) 在 org.glassfish.persistence.jpa.ProviderContainerContractInfoBase.lookupDataSource(ProviderContainerContractInfoBase.java:71) 在

我無言以對。 ..任何人都可以點亮它嗎?

回答

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),一個全球性的資源。但是去標準似乎是最好的方法。

This話題非常有幫助。

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" 
) 

我創造了另一個用戶,因爲如果密碼是空的一些討厭拋出異常。 (Bug?)