1

私は本当に JPA でコンテナー管理トランザクションを使用したいので、server.xml 内でデータ ソースを作成し、コード内で @PersistenceContext を使用する簡単な方法を使用します。

私が現在直面している問題 (おそらく私は複雑すぎると考えています) は、VCAP_SERVICES システム環境変数として Cloud Foundry 環境で実行時に資格情報を取得するという事実です。

この VCAP_SERVICES 変数には、必要な資格情報を含む大きな JSON が含まれています。そのため、まずこの中で対応する JSON を抽出し、それをプロパティとして渡す必要があります。

私の最初のアイデアは、この場合に JSON から値を返すコンバーターを使用して、それらを使用できるようにすることでした。しかし、これは定義済みの構成 xml ファイル内では不可能のようです。

私が確実に防止したいのは、Cloud Foundry環境がすでに私のために仕事をしているので、プロパティファイルを持っていて、そこにあるさまざまな環境DEV、TEST、PRODから値をコピーするなど、自分で何かをすることの「注入」です。 .

問題は、VCAP_SERVICES システム環境変数から server.xml 構成にクレデンシャルを取得するにはどうすればよいかということです。覚えておいてください: これは JSON であるため、VCAP_SERVICES 変数を解析して値を抽出する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<server description="Config example">

    <featureManager>
        <feature>javaee-8.0</feature>
        <feature>mpMetrics-1.1</feature>
        <feature>monitor-1.0</feature>
    </featureManager>

    <!-- Postgres config-example-db definition -->
    <dataSource id="DefaultDataSource" jndiName="jdbc/config-example" jdbcDriverRef="postgresql-driver"
                type="javax.sql.ConnectionPoolDataSource" transactional="true">

        <properties serverName="config-example-db" portNumber="5432"
                    databaseName="postgres"
                    user="${config-example.db.username}"
                    password="${config-example.db.password}"/>

    </dataSource>

    <basicRegistry id="basic" realm="MicroProfileMetrics">
        <user name="admin" password="adminadmin"/>
        <user name="nonadmin" password="guest"/>
    </basicRegistry>

    <administrator-role>
        <user>admin</user>
    </administrator-role>

</server>
4

1 に答える 1