HomeDocumentation > 9. サンプル・アプリケーション > 9.6. Geronimo 2.0 でのJNDIの利用方法

イントロダクション

Java Naming and Directory Interface (JNDI) はApache Geronimoサーバーのコネクション・プールとのインターフェースです。開発者はこのインターフェースを通してEnterprise Java Beans (EJBs)を含むすべてのJavaオブジェクトにアクセスできます。

Apache Geronimo JNDI naming and Java resource connection pools, Part 1: Data source connections. URL: http://www-128.ibm.com/developerworks/opensource/library/os-ag-jndi1の記事は、JNDIを使ってデータソースのコネクション・プールやJava Messaging Services (JMS)、メール・セッションやURLコネクションへアクセスするための豊富なドキュメンテーションを提供してくれます。

Geronimo 2.0でのJNDIの利用方法

上記は良い記事なのですが、Geronimo 1.x向けに書かれたものでありGeronimo 2.0向けとはいえません。

サンプルのJ2EEエンタープライズ・アプリケーションを動かすためには、記事の中では言及されていない、いくつかの追加の構成作業が必要でした。
注記:この情報の確認環境はWindows XP Professional, Version 5.1.2600 Service Pack 2 Build 2600です。

Customer Service J2EEエンタープライズ・アプリケーションを成功裡にデプロイするには、以下の手順に従ってください。アプリケーションは以下からダウンロードできます。
http://www.ibm.com/developerworks/views/download.jsp?contentid=175237&filename=CustomerService-part1.zip&method=http&locale=worldwide

1) j2ee.jarのclasspathへの追加

WebSphere やWebLogicといったアプリケーション・サーバーのlibディレクトリーに存在するj2ee.jar ファイルをclasspathに追加する必要があります。さもないと、antビルド・スクリプトを実行しようとした際に下記のエラーが発生することでしょう。

compile:
[javac] Compiling 9 source files to E:\DOWNLOADS\GERONIMO\CustomerService\build\class
[javac] E:\DOWNLOADS\GERONIMO\CustomerService\src\com\service\customer\ejb\Customer.java:6: package javax.ejb does not exist
[javac] import javax.ejb.EJBObject;
[javac] ^

2) Geronimo/Tomcatディストリビューションの利用

Tomcatディストリビューションを使用してください。というのも、現在のJettyディストリビューション(geronimo-jetty6-jee5-2.0-M1)ではGeronimo Server Console | Services | Database Pools | Database ウイザードで "Database Types" ドロップダウン・リスト中にアイテムが何も表示されないからです。

3) データベース・プール (CustomerServicePool)の作成
Tomcatディストリビューションであっても、新しいデータベース・プールを作成する際に問題が起きます。例えば新しいデータベース・プールを作成しようとする際に、データベースのタイプで"Derby embedded"を選択してテストしてみます。この操作は動くのですが、実際は新しいデータベース・プールは作成されません。<GERONIMO_HOME>\var\log\geronimo.logファイルには以下のようなエントリーが出力します。

14:20:19,687 ERROR [DatabasePoolPortlet] Unable to save connection pool
javax.enterprise.deploy.spi.exceptions.InvalidModuleException: Not supported
at org.apache.geronimo.deployment.plugin.jmx.JMXDeploymentManager.createConfiguration(JMXDeploymentManager.java:297)
at org.apache.geronimo.console.databasemanager.wizard.DatabasePoolPortlet.save(DatabasePoolPortlet.java:880)
at org.apache.geronimo.console.databasemanager.wizard.DatabasePoolPortlet.processAction(DatabasePoolPortlet.java:341)
at org.apache.pluto.core.PortletServlet.dispatch(PortletServlet.java:229)
at org.apache.pluto.core.PortletServlet.doPost(PortletServlet.java:163)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.apache.pluto.core.PortletServlet.service(PortletServlet.java:153)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:683)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:585)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:505)
at org.apache.pluto.invoker.impl.PortletInvokerImpl.invoke(PortletInvokerImpl.java:120)
at org.apache.pluto.invoker.impl.PortletInvokerImpl.action(PortletInvokerImpl.java:68)
at org.apache.pluto.PortletContainerImpl.processPortletAction(PortletContainerImpl.java:164)
at org.apache.pluto.portalImpl.core.PortletContainerWrapperImpl.processPortletAction(PortletContainerWrapperImpl.java:82)
at org.apache.pluto.portalImpl.Servlet.doGet(Servlet.java:227)
at org.apache.pluto.portalImpl.Servlet.doPost(Servlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:325)
at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:542)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:212)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:818)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:624)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:595)

3.a) デプロイメント・テスト・プランの手動での作成とデプロイ

Geronimoは"Derby embedded"コネクション・プール用のデプロイメント・プランを作成してくれていません。そのため、以下のように自分の手でデプロイメント・プランを作成してデプロイする必要があります。

以下のデプロイメント・プラン・ファイル(CustomerServicePool_test_plan.xml)を作成してください。

<?xml version="1.0" encoding="UTF-8"?>
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2">
    <dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2">
        <dep:moduleId>
            <dep:groupId>console.dbpool</dep:groupId>
            <dep:artifactId>CustomerServicePool</dep:artifactId>
            <dep:version>2.0</dep:version>
            <dep:type>rar</dep:type>
        </dep:moduleId>
        <dep:dependencies>
            <dep:dependency>
                <dep:groupId>org.apache.derby</dep:groupId>
                <dep:artifactId>derby</dep:artifactId>
                <dep:version>10.1.3.1</dep:version>
                <dep:type>jar</dep:type>
            </dep:dependency>
        </dep:dependencies>
    </dep:environment>
    <resourceadapter>
        <outbound-resourceadapter>
            <connection-definition>
                <connectionfactory-interface>javax.sql.DataSource</connectionfactory-interface>
                <connectiondefinition-instance>
                    <name>CustomerServicePool</name>
                    <config-property-setting name="Driver">org.apache.derby.jdbc.EmbeddedDriver</config-property-setting>
                    <config-property-setting name="ConnectionURL">jdbc:derby:CustomerServiceDatabase</config-property-setting>
                    <connectionmanager>
                        <local-transaction/>
                        <single-pool>
                            <max-size>10</max-size>
                            <min-size>0</min-size>
                            <match-one/>
                        </single-pool>
                    </connectionmanager>
                </connectiondefinition-instance>
            </connection-definition>
        </outbound-resourceadapter>
    </resourceadapter>
</connector>

<GERONIMO_HOME>\bin ディレクトリーで以下のコマンドを実行します。

deploy --verbose --user system --password manager deploy D:\appsData\GERONIMO\JNDIApp\CustomerService.ear

3.b) CustomerServicePool用のデプロイメント・バージョンの更新

前述のdeployコマンドを実行したら、さらに別の構成作業を行わなくてはなりません。

Using GERONIMO_BASE:   C:\GERONIMO
Using GERONIMO_HOME:   C:\GERONIMO
Using GERONIMO_TMPDIR: C:\GERONIMO\var\temp
Using JRE_HOME:        C:\Java\Java150_10\jre
    Error: Unable to distribute CustomerService.ear: Unable to create
    configuration for deployment

    org.apache.geronimo.common.DeploymentException: Unable to create
    configuration for deployment

        at
    org.apache.geronimo.deployment.DeploymentContext.createTempConfiguration(DeploymentContext.java:121)

        at
    org.apache.geronimo.deployment.DeploymentContext.<init>(DeploymentContext.java:101)

        at
    org.apache.geronimo.deployment.DeploymentContext.<init>(DeploymentContext.java:81)

        at
    org.apache.geronimo.j2ee.deployment.EARContext.<init>(EARContext.java:65)

        at
    org.apache.geronimo.j2ee.deployment.EARConfigBuilder.buildConfiguration(EARConfigBuilder.java:475)

        at
    org.apache.geronimo.j2ee.deployment.EARConfigBuilder$$FastClassByCGLIB$$38e56ec6.invoke(<generated>)

        at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)

        at
    org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38)

        at
    org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:124)

        at
    org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:820)

        at
    org.apache.geronimo.gbean.runtime.RawInvoker.invoke(RawInvoker.java:57)

        at
    org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke(RawOperationInvoker.java:35)

        at
    org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept(ProxyMethodInterceptor.java:96)

        at
    org.apache.geronimo.j2ee.deployment.CorbaGBeanNameSource$$EnhancerByCGLIB$$44342279.buildConfiguration(<generated>)

        at
    org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:302)

        at
    org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:124)

        at
    org.apache.geronimo.deployment.Deployer$$FastClassByCGLIB$$734a235d.invoke(<generated>)

        at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)

        at
    org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38)

        at
    org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:124)

        at
    org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:855)

        at
    org.apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.java:239)

        at
    org.apache.geronimo.kernel.KernelGBean.invoke(KernelGBean.java:338)

        at
    org.apache.geronimo.kernel.KernelGBean$$FastClassByCGLIB$$1cccefc9.invoke(<generated>)

        at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)

        at
    org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38)

        at
    org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:124)

        at
    org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:855)

        at
    org.apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.java:239)

        at
    org.apache.geronimo.system.jmx.MBeanGBeanBridge.invoke(MBeanGBeanBridge.java:168)

        at
    com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(DynamicMetaDataImpl.java:213)

        at
    com.sun.jmx.mbeanserver.MetaDataImpl.invoke(MetaDataImpl.java:220)

        at
    com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:815)

        at
    com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:784)

        at
    javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1408)

        at
    javax.management.remote.rmi.RMIConnectionImpl.access$100(RMIConnectionImpl.java:81)

        at
    javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1245)

        at java.security.AccessController.doPrivileged(Native Method)

        at
    javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1348)

        at
    javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:782)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

        at
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

        at java.lang.reflect.Method.invoke(Method.java:585)

        at
    sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)

        at sun.rmi.transport.Transport$1.run(Transport.java:153)

        at java.security.AccessController.doPrivileged(Native Method)

        at sun.rmi.transport.Transport.serviceCall(Transport.java:149)

        at
    sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)

        at
    sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)

        at java.lang.Thread.run(Thread.java:595)

    Caused by: org.apache.geronimo.kernel.config.LifecycleException:
    load of default/CustomerService/1.0/ear failed

        at
    org.apache.geronimo.kernel.config.SimpleConfigurationManager.loadConfiguration(SimpleConfigurationManager.java:322)

        at
    org.apache.geronimo.deployment.DeploymentConfigurationManager.loadConfiguration(DeploymentConfigurationManager.java:115)

        at
    org.apache.geronimo.kernel.config.SimpleConfigurationManager.loadConfiguration(SimpleConfigurationManager.java:281)

        at
    org.apache.geronimo.deployment.DeploymentConfigurationManager.loadConfiguration(DeploymentConfigurationManager.java:111)

        at
    org.apache.geronimo.deployment.DeploymentContext.createTempConfiguration(DeploymentContext.java:118)

        ... 50 more

    Caused by: org.apache.geronimo.kernel.config.InvalidConfigException:
    Error starting configuration gbean default/CustomerService/1.0/ear

        at
    org.apache.geronimo.kernel.config.SimpleConfigurationManager.load(SimpleConfigurationManager.java:347)

        at
    org.apache.geronimo.deployment.DeploymentConfigurationManager.load(DeploymentConfigurationManager.java:119)

        at
    org.apache.geronimo.kernel.config.SimpleConfigurationManager.loadConfiguration(SimpleConfigurationManager.java:307)

        ... 54 more

    Caused by:
    org.apache.geronimo.kernel.repository.MissingDependencyException:
    Unable to resolve dependency
    console.dbpool/CustomerServicePool/1.0/rar

        at
    org.apache.geronimo.kernel.config.ConfigurationResolver.resolve(ConfigurationResolver.java:112)

        at
    org.apache.geronimo.kernel.config.Configuration.buildClassPath(Configuration.java:402)

        at
    org.apache.geronimo.kernel.config.Configuration.createConfigurationClasssLoader(Configuration.java:324)

        at
    org.apache.geronimo.kernel.config.Configuration.<init>(Configuration.java:268)

        at
    org.apache.geronimo.kernel.config.SimpleConfigurationManager.load(SimpleConfigurationManager.java:343)

        ... 56 more

ここに注目してください。

Caused by:
    org.apache.geronimo.kernel.repository.MissingDependencyException:
    Unable to resolve dependency
    console.dbpool/CustomerServicePool/1.0/rar

このメッセージにより、記事の中のファイルが以前の(1.0の)the CustomerServicePool (a Derby embedded database pool)向けに作成されていることがわかります。

3.c) Dependencyのバージョン番号の更新

この事象は、以下のようにCustomerEJB-openejb.xmlファイルのdependenciesセクションの"dep:version"タグを"1.0" から"2.0"へ変更すれば解消できます。

<?xml version="1.0" encoding="UTF-8"?>

<openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1"
             xmlns:naming="http://geronimo.apache.org/xml/ns/naming-1.1">

   <dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.1">
      <dep:moduleId>
         <dep:groupId>default</dep:groupId>
         <dep:artifactId>CustomerEJB</dep:artifactId>
         <dep:version>1.0</dep:version>
         <dep:type>jar</dep:type>
      </dep:moduleId>

      <dep:dependencies>
         <dep:dependency>
            <dep:groupId>console.dbpool</dep:groupId>
            <dep:artifactId>CustomerServicePool</dep:artifactId>
            <dep:version>2.0</dep:version>
            <dep:type>rar</dep:type>
         </dep:dependency>
      </dep:dependencies>         . . .

(訳者注)

さらに、Apache Derby への接続記述を以下のとおり書き換えてください。

・変更前

<?xml version="1.0" encoding="UTF-8"?>
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2">
    <dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2">
        <dep:dependencies>
            <dep:dependency>
                <dep:groupId>org.apache.derby</dep:groupId>
                <dep:artifactId>derby</dep:artifactId>
                <dep:version>10.1.3.1</dep:version>
                <dep:type>jar</dep:type>
            </dep:dependency>
        </dep:dependencies>
    </dep:environment>
... 以下、省略 ...
</connector>

・変更後

<?xml version="1.0" encoding="UTF-8"?>
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2">
    <dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2">
        <dep:dependencies>
            <dep:dependency>
                <dep:groupId>org.apache.geronimo.configs</dep:groupId>
                <dep:artifactId>system-database</dep:artifactId>
                <dep:type>car</dep:type>
            </dep:dependency>
        </dep:dependencies>
    </dep:environment>
... 以下、省略 ...
</connector>

もう一度、<GERONIMO_HOME>\binディレクトリーでコマンド・プロンプトから以下を実行してください。

deploy --verbose --user system --password manager deploy D:\appsData\GERONIMO\JNDIApp\CustomerService.ear

3.d) デプロイメント記述子の更新

application.xmlのデプロイメント記述子をGeronimo 2.0の要件と互換性を保つように変更します。

前述の delpoy コマンドを実行しても、まだ geronimo.log 中に別のエラーが見つかることでしょう。

Deployer operation failed: Could not parse application.xml
org.apache.geronimo.common.DeploymentException: Could not parse application.xml
        at org.apache.geronimo.j2ee.deployment.EARConfigBuilder.getEarPlan(EARConfigBuilder.java:314)
        at org.apache.geronimo.j2ee.deployment.EARConfigBuilder.getDeploymentPlan(EARConfigBuilder.java:261)
        at org.apache.geronimo.j2ee.deployment.EARConfigBuilder$$FastClassByCGLIB$$38e56ec6.invoke(<generated>)
        at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
        at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38)
        at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:124)
        at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:820)
        at org.apache.geronimo.gbean.runtime.RawInvoker.invoke(RawInvoker.java:57)
        at org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke(RawOperationInvoker.java:35)
        at org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept(ProxyMethodInterceptor.java:96)
        at org.apache.geronimo.j2ee.deployment.CorbaGBeanNameSource$$EnhancerByCGLIB$$44342279.getDeploymentPlan(<generated>)
        at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:232)
        at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:124)
        at org.apache.geronimo.deployment.Deployer$$FastClassByCGLIB$$734a235d.invoke(<generated>)
        at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
        at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38)
        at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:124)
        at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:855)
        at org.apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.java:239)
        at org.apache.geronimo.deployment.plugin.local.AbstractDeployCommand.doDeploy(AbstractDeployCommand.java:114)
        at org.apache.geronimo.deployment.plugin.local.DistributeCommand.run(DistributeCommand.java:60)
        at java.lang.Thread.run(Thread.java:595)
Caused by: org.apache.xmlbeans.XmlException: Invalid deployment descriptor: [error: cvc-complex-type.2.4a: Expected element 'module@http://java.sun.co
m/xml/ns/j2ee' instead of 'description@http://java.sun.com/xml/ns/j2ee' here in element application@http://java.sun.com/xml/ns/j2ee]
Descriptor: <application xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd" version="1.4" xmlns=
"http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <display-name>Customer Service utility</display-name>
  <description>Customer Service utility</description>
  <module>
    <web>
      <web-uri>CustomerService-web.war</web-uri>
      <context-root>/service</context-root>
    </web>
  </module>
  <module>
    <ejb>CustomerEJB.jar</ejb>
  </module>
  <module>
    <ejb>ProcessCustomerEJB.jar</ejb>
  </module>
</application>
        at org.apache.geronimo.deployment.xmlbeans.XmlBeansUtil.validateDD(XmlBeansUtil.java:213)
        at org.apache.geronimo.j2ee.deployment.EARConfigBuilder.convertToApplicationSchema(EARConfigBuilder.java:420)
        at org.apache.geronimo.j2ee.deployment.EARConfigBuilder.getEarPlan(EARConfigBuilder.java:312)
        ... 21 more

application.xmlファイルから"description"と"display-name"タグを除去し、CustomerService.ear 中のapplication.xmlファイルに再度保管してください。

<?xml version="1.0" ?>
<application xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd"
             version="1.4">
   <display-name>Customer Service utility</display-name>

   <module>
      <web>
         <web-uri>CustomerService-web.war</web-uri>
         <context-root>/service</context-root>
      </web>
   </module>

   <module>
      <ejb>CustomerEJB.jar</ejb>
   </module>

   <module>
      <ejb>ProcessCustomerEJB.jar</ejb>
   </module>
</application>

今度はCustomerService.ear ファイルはうまくデプロイできることでしょう。

deploy --verbose --user system --password manager deploy D:\appsData\GERONIMO\JNDIApp\CustomerService.ear

4) アプリケーションのデプロイとテスト

  • Geronimo Server Console | Applications | Deploy Newウインドウを開きます。
  • <Browse>ボタンをクリックしてCustomerService.ear ファイルを選択します。
  • <Install>をクリックします。
  • http://localhost:8080/service/customers/で、デプロイされたアプリケーションをテストしてください。

サマリー

以下の手順に従い、動いているGeronimo 2.0インスタンスへJ2EEエンタープライズ・アプリケーションを正常にデプロイできました。

1) j2ee.jarのclasspathへの追加
2) Geronimo/Tomcatディストリビューションの利用
3) データベース・プール (CustomerServicePool)の作成
a. デプロイメント・テスト・プランの手動での作成とデプロイ
b. CustomerServicePool用のデプロイメント・バージョンの更新
c. Dependencyのバージョン番号の更新
d. デプロイメント記述子の更新
4) アプリケーションのデプロイとテスト