1

現在、既存のソリューションを置き換える REST サービスを開発しています。プレーンな Payara/JEE7/JAX-RS を使用しています。私はSpringを使用しておらず、使用するつもりもありません。

私が直面している問題は、元の構成をできるだけ再利用したいということです (構成ファイルを制御するパペットを使用して、クラスター内の複数のノードに展開します)。通常、Glassfish/Payara では、次のようなコンテンツを含む domain.xml ファイルがあります。

<jdbc-connection-pool driver-classname="" pool-resize-quantity="10" datasource-classname="org.postgresql.ds.PGSimpleDataSource" max-pool-size="20" res-type="javax.sql.DataSource" steady-pool-size="10" description="" name="pgsqlPool">
  <property name="User" value="some_user"/>
  <property name="DatabaseName" value="myDatabase"/>
  <property name="LogLevel" value="0"/>
  <property name="Password" value="some_password"/>
 <!-- bla --->
</jdbc-connection-pool>
<jdbc-resource pool-name="pgsqlPool" description="" jndi-name="jdbc/pgsql"/>

さらに、アーカイブに次のような persistence.xml ファイルがあります。

<persistence-unit name="myDatabase">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/pgsql</jta-data-source>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
        <!-- bla -->
    </properties>
</persistence-unit>

これらの構成ファイルの両方をプログラムによる解決策に置き換える必要があるため、既存のレガシー構成ファイルから読み取り、(必要に応じて) サーバーの起動時に接続プールと永続化ユニットを作成できます。

それを達成する方法はありますか?

4

2 に答える 2

0

目標は、単一のアプリケーションを実行する Docker 化されたサーバーを用意することなので、組み込みサーバーをうまく使用できます。組み込みサーバーを使用すると、私の問題の解決策はおおよそ次のようになります。

サーバー プロジェクトの場合、Maven 依存関係を作成します。

<dependencies>
    <dependency>
        <groupId>fish.payara.extras</groupId>
        <artifactId>payara-embedded-all</artifactId>
        <version>4.1.1.163.0.1</version>
    </dependency>
</dependencies>

次のようにサーバーを起動します。

final BootstrapProperties bootstrapProperties = new BootstrapProperties();
final GlassFishRuntime runtime = GlassFishRuntime.bootstrap();
final GlassFishProperties glassfishProperties = new GlassFishProperties();
final GlassFish glassfish = runtime.newGlassFish(glassfishProperties);
glassfish.start();

起動したインスタンスに接続プールを追加します。

final CommandResult createPoolCommandResult = commandRunner.run("create-jdbc-connection-pool",
    "--datasourceclassname=org.postgresql.ds.PGConnectionPoolDataSource", "--restype=javax.sql.ConnectionPoolDataSource", //
    "--property=DatabaseName=mydb"//
        + ":ServerName=127.0.0.1"//
        + ":PortNumber=5432"//
        + ":User=myUser"//
        + ":Password=myPassword"//
        //other properties
    , "Mydb"); //the pool name

対応する jdbc リソースを追加します。

final CommandResult createResourceCommandResult = commandRunner.run("create-jdbc-resource", "--connectionpoolid=Mydb", "jdbc__Mydb");

(実際には、外部構成ファイルからデータを取得します)

アプリケーションをデプロイします。

glassfish.getDeployer().deploy(new File(pathToWarFile));

(通常、いくつかの展開ディレクトリからアプリケーションを読み取ります)

アプリケーション自体では、次のように構成されたプールを参照できます。

@PersistenceContext(unitName = "mydb")
EntityManager mydbEm;

終わり。

glassfish-resources.xml も可能でしたが、問題がありました。構成ファイルは外部にあり、一部のアプリケーションで共有されており (ファイル形式は私のものではありません)、展開時に外部ツールによって作成されます。ファイルをglassfish-resources.xmlファイルにXSLTし、「asadmin」呼び出しを行うスクリプトを実行する必要があります。

組み込みサーバーの実行は、CI サーバー上で簡単に構築できるすべての Java ソリューションであり、アプリケーションのテスト スイートは同じ組み込みサーバー ビルドをスピンアップしていくつかの統合テストを実行できます。

于 2016-11-15T16:54:47.627 に答える