5

GlassFishでいくつかのJDBCリソースとカスタムリソースを作成しました。JDBCリソースjdbc/mydbとカスタムリソースに名前を付けましたservice/test

JDBC接続は、呼び出しでルックアップされますic.lookup("java:comp/env/jdbc/mydb")。また、いくつかの欠点があるで見つけることができic.lookup("jdbc/mydb")ます。以下のロビンの回答を参照してください。

ただし、カスタムリソースはで検索する必要がありic.lookup("service/test")ます。回線ic.lookup("java:comp/env/service/test")が機能​​しません。それは可能ですか、もしそうなら:どのように?

4

4 に答える 4

3

プレフィックスは、JNDI ルックアップの作成元である Java EE エンティティに対して定義されたリソース参照の使用法を示します。同じ方法で検索するには、カスタム リソースに対してもそのような参照を定義する必要があります。

代わりに完全な jndi 名を使用できるため、JDBC ルックアップにもプレフィックスは必要ありません。このアプローチの問題点は、ローカルの初期コンテキストに配置されないようにリソースを移動した場合、コード内のルックアップ名を変更して場所情報を含めないと見つからないことです。参照を使用すると、コードがこの問題から保護されるため、参照内のマッピングのみが変更されます。

使用に関する情報はこちら

于 2009-03-11T14:26:05.993 に答える
3

domain.xml でカスタム リソースを作成した場合、domain.xml の servers/server タグの下に resource-ref として追加するのを忘れている可能性があります。

    <resources>
        <!-- JDBC RESOURCE -->
        ...
        <custom-resource res-type="java.lang.String" jndi-name="MyCustomStringResource"
                         factory-class="org.glassfish.resources.custom.factory.PrimitivesAndStringFactory">
            <property name="value" value="hello, this is a string resource"></property>
        </custom-resource>
        ...
    </resources>
    <servers>
        <server name="server" config-ref="server-config">
            <application-ref ref="__admingui" virtual-servers="__asadmin"></application-ref>
            ...
            <resource-ref ref="MyCustomStringResource"></resource-ref>
            ...
        </server>
    </servers>
于 2011-09-27T11:16:05.137 に答える
0

Glassfish の「カスタム リソース」が何を意味するのかわかりません。Java EE 仕様によると、'java:comp/env' 名前空間は、その特定のアプリケーションのみにバインドされたリソース ルックアップ用に予約されています。そう

ic.lookup("java:comp/env/jdbc/mydb")

実際には、jdbc/mydb は、検索元のアプリケーション (EJB/サーブレットなど) の名前バインディングであることを意味します。java:comp/env プレフィックスを使用せずに直接ルックアップを実行すると、アプリケーションがデプロイ先のサーバー環境に結び付けられます。

于 2009-03-11T14:27:45.490 に答える