1

クエストは、単体テストが実行される前の展開時に、グラスフィッシュが埋め込まれたjavaee6と、データソースのダービーjndiルックアップが埋め込まれたものです....

ここでpersistence.xmlを見つけてください...

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence     
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">
    <persistence-unit name="mymodulePU" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
        <jta-data-source>jdbc/__default</jta-data-source>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:derby:C:/myappDB;create=true" />
            <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
            <property name="eclipselink.ddl-generation.output-mode"
                value="database" />
            <property name="eclipselink.logging.level" value="ALL" />
            <property name="eclipselink.logging.file" value="./target/eclipselink.logs" />
        </properties>
    </persistence-unit>
</persistence>

単体テストが実行されたら、サーバー コンソール ログをここで見つけてください。

Jan 24, 2011 5:12:44 PM com.sun.enterprise.resource.allocator.LocalTxConnectorAllocator createResource
WARNING: poolmgr.create_resource_error
Jan 24, 2011 5:12:44 PM com.sun.enterprise.connectors.ConnectionManagerImpl internalGetConnection
WARNING: poolmgr.get_connection_failure
Jan 24, 2011 5:12:44 PM com.sun.gjc.spi.base.DataSource getConnection
WARNING: jdbc.exc_get_conn
Jan 24, 2011 5:12:44 PM org.eclipse.persistence.session.file:/C:/DD/WORKSPACES/lean-soa-arch/entities/target/classes/_mymodulePU.ejb
SEVERE: 
Local Exception Stack: 
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.0.v20091127-r5931): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: java.net.ConnectException : Error connecting to server localhost on port 1527 with message Connection refused: connect.
Error Code: 0
    at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:309)
......
.......
......
Caused by: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: java.net.ConnectException : Error connecting to server localhost on port 1527 with message Connection refused: connect.
    at com.sun.gjc.spi.base.DataSource.getConnection(DataSource.java:112)
    at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:126)
    ... 44 more
Jan 24, 2011 5:12:44 PM org.eclipse.persistence.session.file:/C:/DD/WORKSPACES/lean-soa-arch/entities/target/classes/_mymodulePU.properties
FINEST: End deploying Persistence Unit mymodulePU; session file:/C:/DD/WORKSPACES/lean-soa-arch/entities/target/classes/_mymodulePU; state Deployed; factoryCount 1
4

2 に答える 2

4

@Bryan彼はDerbyをネットワークサーバーモードで実行しようとはしていません。彼はそれを組み込みモードで実行したいので、あなたの提案がその場合に役立つとは思いません。

彼が見ている問題は、彼のpersistence.xmlでjdbc /_defaultと呼ばれるJTAデータソースが定義されているためです。埋め込まれたGlassfishがこれを検出すると、JNDIコンテキストで検索を試み、検索すると、使用しているdomain.xmlで定義されているjdbc/_defaultリソースを検出します。これはデフォルトで、domain.xmlで定義されているネットワークベースのDerbyリソースです。

Digambarが行う必要があるのは、GFを起動し、組み込みderbyを使用する新しい接続プールを作成し、ドメインにそのプールを使用する新しいjdbcリソースを作成することです。

Glassfish Web管理コンソールを使用しましたが、さまざまなパラメーターのすべてのコマンドラインスイッチがわかっている場合は、asadminコマンドを使用することもできます。どちらの方法でも、domain.xmlに新しいリソースが含まれます。これを行ったら、persistence.xmlを変更して、jta-datasourceがこの新しいjdbcリソースを参照するようにします。これで、すべての設定が完了します。2つのjavax.persistenceプロパティは、現時点では必要ないため、persistence.xmlから削除することもできます(これらの設定は、新しい接続プールリソースを構成するときに設定されます)。

組み込み接続プールを構成するときは、必ず; create=trueをConnectionAttributesプロパティに設定してください。

接続プールとjdbcリソースを作成した後、私のdomain.xmlには次のようになりました。特定のアプリケーションに必要な設定に基づいて、外観が若干異なる場合があります。

<jdbc-connection-pool connection-validation-method="auto-commit" validation-table-name="SYS.SYSALIASES" allow-non-component-callers="true" connection-leak-reclaim="true" lazy-connection-association="true" connection-creation-retry-attempts="90" lazy-connection-enlistment="true" validate-atmost-once-period-in-seconds="120" driver-classname="" datasource-classname="org.apache.derby.jdbc.EmbeddedDataSource40" res-type="javax.sql.DataSource" connection-leak-timeout-in-seconds="60" description="" name="GFEmbeddedPool" is-connection-validation-required="true">

      <property name="DatabaseName" value="C:\tmp\db\unit-test"></property>
      <property name="ConnectionAttributes" value=";create=true"></property>
      <property name="AttributesAsPassword" value="false"></property>
      <property name="LoginTimeout" value="0"></property>

    </jdbc-connection-pool>
    <jdbc-resource pool-name="GFEmbeddedPool" description="" jndi-name="jdbc/__embeddedGF"></jdbc-resource>
于 2011-03-22T01:38:26.220 に答える
1

「java.net.ConnectException : ポート 1527 でサーバー localhost に接続中にエラーが発生しました」というメッセージは、Derby ネットワーク サーバーが稼働していないことを意味します。接続するには、Derby ネットワーク サーバーを開始する必要があります。サーバーの起動方法は次のとおりです: http://db.apache.org/derby/docs/10.6/adminguide/tadmincbdjhhfd.html

于 2011-01-24T14:37:22.177 に答える