4

CloudBees の JavaEE Web プロファイル スタックにデプロイされた非常に単純な Web アプリケーションを取得しようとしています。使用するデータベースを作成しました。

WAR ファイルを作成し、Glassfish3 プロファイルにデプロイしましたが、エラーが発生します。JBoss も試しましたが、これも失敗しますが、別のエラーが発生します。SDKを使用してデータベースをアプリケーションにバインドしました(CloudBees XMLファイルではありません(非推奨のように聞こえるため)。しかし、アプリケーションが(再起動後でも)このエラーでデプロイに失敗し続けるにもかかわらず:

[#|2013-02-25T11:03:57.584+0000|SEVERE|glassfish3.1.2|javax.enterprise.system.tools.admin.org.glassfish.deployment.admin|_ThreadID=12;_ThreadName=AutoDeployer;|Exception while preparing the app : Invalid resource : jdbc/resmandb__pm
com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Invalid resource : jdbc/resmandb__pm
    at com.sun.enterprise.connectors.service.ConnectorResourceAdminServiceImpl$MyDataSource.validateResource(ConnectorResourceAdminServiceImpl.java:274)
    at com.sun.enterprise.connectors.service.ConnectorResourceAdminServiceImpl$MyDataSource.setResourceInfo(ConnectorResourceAdminServiceImpl.java:255)
    at com.sun.enterprise.connectors.service.ConnectorResourceAdminServiceImpl.lookupDataSourceInDAS(ConnectorResourceAdminServiceImpl.java:245)
    at com.sun.enterprise.connectors.ConnectorRuntime.lookupDataSourceInDAS(ConnectorRuntime.java:538)
    at com.sun.enterprise.connectors.ConnectorRuntime.lookupPMResource(ConnectorRuntime.java:469)
    at org.glassfish.persistence.common.PersistenceHelper.lookupPMResource(PersistenceHelper.java:63)
    at org.glassfish.persistence.jpa.ProviderContainerContractInfoBase.lookupDataSource(ProviderContainerContractInfoBase.java:71)
    at org.glassfish.persistence.jpa.PersistenceUnitInfoImpl.<init>(PersistenceUnitInfoImpl.java:108)
    at org.glassfish.persistence.jpa.PersistenceUnitLoader.loadPU(PersistenceUnitLoader.java:155)
    at org.glassfish.persistence.jpa.PersistenceUnitLoader.<init>(PersistenceUnitLoader.java:120)
    at org.glassfish.persistence.jpa.JPADeployer$1.visitPUD(JPADeployer.java:224)
    at org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:495)
    at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:233)
    at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:168)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:871)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:410)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:389)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:353)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:363)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1085)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:95)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1291)
    at org.glassfish.deployment.autodeploy.AutoOperation.run(AutoOperation.java:145)
    at org.glassfish.deployment.autodeploy.AutoDeployer.deploy(AutoDeployer.java:575)
    at org.glassfish.deployment.autodeploy.AutoDeployer.deployAll(AutoDeployer.java:461)
    at org.glassfish.deployment.autodeploy.AutoDeployer.run(AutoDeployer.java:389)
    at org.glassfish.deployment.autodeploy.AutoDeployer.run(AutoDeployer.java:380)
    at org.glassfish.deployment.autodeploy.AutoDeployService$1.run(AutoDeployService.java:220)
    at java.util.TimerThread.mainLoop(Timer.java:512)
    at java.util.TimerThread.run(Timer.java:462)
|#]

私が理解していないのは、なぜそれがリソースを探しているのかということですjdbc/resmandb__pm。バインド先の名前 (この場合はresman) を取り、それに a を追加_pmします。

私は何を間違っていますか?このアプリケーションには大したことはなく、Glassfish 3 サーバーでそのまま実行されます。

編集:スタンドアロンのグラスフィッシュ環境で遊んでいます。また、glassfish-web.xml に jdbc リソースのエントリがない場合、JPA プロバイダー (この場合は EclipseLink) が jdbc/_ pm と jdbc/ _nontxの 2 つの jdbc リソースを探しているようです。は、web.xml で宣言されたリソースの名前です。

そのため、まだ試していませんが、これを bees-web.xml で定義する必要があるようです。CloudBees 自身のドキュメントでは、これを使用しないようにしようとしています。残念ながら、リソース バインディングは GlassFish 3 環境ではうまく機能しません。それが私がこれまでに見つけたものです。

4

1 に答える 1

0

リソースをアプリケーションにバインドするときは、 --alias パラメータを使用して、アプリケーションで使用する論理名を構成する必要があります。データソースの場合、次のように wen.xml に resource-ref がある場合:

   <resource-ref>
        <res-ref-name>jdbc/myDB</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

次に、データソースを次のようにバインドします。

bees app:bind --database  myDatabase --alias myDB
于 2013-02-27T06:11:02.583 に答える