InitialContextは、デフォルトのホスト (localhost) とデフォルトのポート番号を選択するだけではありません。この情報は、Java Webstart テクノロジを使用して行われる、glassfish 自体によって明示的に設定されます。
自分でテストできます: アプリケーションクライアントがコンテキストにデプロイされていると仮定しますlocalhost:8080/YourClient
。リンクにアクセスすると、JNLP ファイルがダウンロードされ、Webstart によって開始されます。ファイルを自動的に開く代わりに、手動でファイルを保存できます (wget localhost:8080/YourClient
たとえば、Linux の場合)。Glassfish が、JNDI 関連のプロパティを含む多くのパラメーターを使用してクライアント アプリケーションを初期化することがわかります。
<property name="java.naming.factory.initial" value="com.sun.enterprise.naming.SerialInitContextFactory"/>
<property name="java.naming.factory.url.pkgs" value="com.sun.enterprise.naming"/>
<property name="java.naming.factory.state" value="com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"/>
<property name="appclient.iiop.defaultHost" value="localhost"/>
<property name="appclient.iiop.defaultPort" value="${request.appclient.iiop.defaultPort}"/>
<property name="${appclient.download.host.propertyName}" value="localhost"/>
<property name="${appclient.user.code.is.signed.propertyName}" value="${appclient.user.code.is.signed}"/>
これらのプロパティは便宜上指定されているだけではなく、必須です。クライアント アプリケーションをスタンドアロン アプリケーションとして起動してみてください (お気に入りの IDE でメイン クラスを実行するだけです)。このような状況では、初期パラメータは設定されません。これらのプロパティがないと、InitialContext がうまく機能しないことに気付くでしょう。
あなたの質問に対する簡単な答え: InitialContext は、Glassfish と EJB を検索します。これは、アプリケーションが、InitialContext の場所、必要なクラスの初期化方法などを伝える特別なパラメーターで開始されたためです。