引用https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html
名前空間のルートコンテキストには、「comp」という名前のバインディングがあり、コンポーネント関連のバインディング用に予約されているサブツリーにバインドされています。「comp」という名前はコンポーネントの略です。ルートコンテキストには他のバインディングはありません。ただし、ルートコンテキストは、ポリシーの将来の拡張、特にコンポーネント自体ではなく、ユーザーや部門などの他のタイプのエンティティに関連付けられているリソースに名前を付けるために予約されています。たとえば、将来のポリシーでは、「java:user / alice」や「java:org / engineering」などの名前を使用して、ユーザーおよび組織/部門に名前を付けることができるようになる可能性があります。
「comp」コンテキストには、「env」と「UserTransaction」の2つのバインディングがあります。「env」という名前は、コンポーネントの環境関連バインディング用に予約されているサブツリーにバインドされており、そのデプロイメント記述子によって定義されています。「env」は環境の略です。J2EEは、「env」名前空間に次の構造を推奨します(ただし必須ではありません)。
したがって、Springから、またはたとえばTomcatコンテキスト記述子から行ったバインディングは、デフォルトでjava:comp / env /の下に移動します
たとえば、構成が次の場合:
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="foo"/>
</bean>
次に、以下を使用して直接アクセスできます。
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/foo");
または、中間ステップを作成して、取得するすべてのリソースに「java:comp / env」を指定する必要がないようにすることもできます。
Context ctx = new InitialContext();
Context envCtx = (Context)ctx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("foo");
jdbc/loc
したがってjava:comp/env/jdbc/loc
正しい)ことを意味しますが、cherouvimの回答は、最初の例を誤って使用している(java:comp/env/jdbc/loc
したがってjdbc/loc
、正しい)ことを意味します。とにかく、本当の答えは:それは現在の状況に依存します。