WebStart アプリケーションでは、次のコードを使用してプログラムで JNLP コードベースを取得しています。
package web.start.test;
import java.net.URL;
import javax.jnlp.BasicService;
import javax.jnlp.ServiceManager;
import javax.jnlp.UnavailableServiceException;
import javax.swing.JOptionPane;
public class WebStartTest
{
public static void main(String[] args)
{
try
{
BasicService basicService = (BasicService) ServiceManager.lookup("javax.jnlp.BasicService");
URL codeBase = basicService.getCodeBase();
JOptionPane.showMessageDialog(null, "Code base is: [" + codeBase + "]");
}
catch (UnavailableServiceException exception)
{
throw new RuntimeException(exception);
}
}
}
この JNLP 記述子を使用して、アプリケーションを開始しています。
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="file:/d:/playground/eclipse/WebStartTest" href="WebStartTest.jnlp">
<information>
<title>WebStartTest</title>
<vendor>Web Start Tester</vendor>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.7+" />
<jar href="target/WebStartTest-0.0.1-SNAPSHOT.jar" />
</resources>
<application-desc main-class="web.start.test.WebStartTest" />
</jnlp>
jar ファイルをパッケージ化して署名した後、JNLP ファイルで Enter キーを押すと、アプリケーションが正常に起動しますが、ポップアップ メッセージには「Code base is: [null]」と表示されます。
同じコードを Web サーバーにデプロイし、コードベース プロトコルとして「file://」ではなく「http://」を使用する JNLP ファイルを介して起動すると、コードベースが適切に取得されます。
「file://」コードベースの JNLP 記述子を使用して、ローカル (または共有ネットワーク) ドライブにデプロイされた WebStart アプリケーションのコードベースを取得する方法はありますか?
そうでない場合、(jar ファイル内にパッケージ化されていない) リソース ファイルにアクセスするために、アプリケーション ディレクトリへの URL をプログラムで見つけるにはどうすればよいでしょうか?
さらに、ベスト プラクティスの観点から: WebStart アプリケーションを Web サーバーではなく共有ネットワーク ドライブに展開することは (単純化のために) 合理的なアプローチですか、それとも避けるべきハックですか?
ありがとうございました。