私は興味深いセットアップを持っています。私はWebサービスを登録するWebアプリケーションを持っています。 Webサービスは、基本的に以下のないクラスのブーフのフロントエンドである:RMIサーバーが は、いくつかの仕事をするために、指定されたクラスとのJVMを使用してサブプロセスを開始war webアプリケーションからjvmサブプロセスを開始
- セットアップ
通常、クラスパスを解決するために、私はSystem.getProperty( "java.class.path")を読みました。私はこれを-cpパラメータに設定しました。しかし、warファイルでは、これは役に立たない。どのように私はこの機能を動作させるが、WARファイルにすることができます
public static Process launchClassProcess(@SuppressWarnings("rawtypes") Class c, String[] javaArgs, String[] programArgs) throws Exception {
String separator = System.getProperty("file.separator");
String classpath = System.getProperty("java.class.path");
String home = System.getProperty("java.home");
String path = home + separator + "bin" + separator + "java";
String[] jvmArgs = new String[] { path, "-cp", classpath };
String[] classArgs = new String[] { c.getName() };
String[] processBuilderArgs = new String[jvmArgs.length + javaArgs.length + classArgs.length + programArgs.length];
int i = 0;
for (String arg:jvmArgs) {
processBuilderArgs[i++] = arg;
}
for (String arg:javaArgs) {
processBuilderArgs[i++] = arg;
}
for (String arg:classArgs) {
processBuilderArgs[i++] = arg;
}
for (String arg:programArgs) {
processBuilderArgs[i++] = arg;
}
ProcessBuilder processBuilder = new ProcessBuilder(processBuilderArgs);
StringBuilder command = new StringBuilder();
int j = 0;
for (String part:processBuilder.command()) {
if (j++ != 0) {
command.append(" ");
}
command.append(part);
}
LogUtils.recordMessage("executing: " + command.toString());
processBuilder.redirectErrorStream(true);
return (new ProcessBuilder(processBuilderArgs)).start();
}
:
これはクラスパスから特定のクラスを起動し、私の機能がどのように見えるかですか?私はwarファイルがファイルシステム上で解凍された場所を何とか見つけて、完全なクラスパスを構築できるlibsフォルダを見つけなければならないと思います。
とその下にあるアプリの世話をする:
私たちは、次のサーブレットを必要とする、のは、それを呼ぶことにしましょう。そして、私たちは魔法を行うにはweb.xmlにサーブレットを登録する必要があり
をInitServletサーバークラスローディングポリシーニース質問、これをいくつかのenlightmentを楽しみにして! – BigMike
リソースを介してどのクラスにもファイルURLを見つけることができます。そこから、クラスのルートを先頭に戻って、jarがどこにあるのかを調べ、その下のすべてをクラスパスとして登録することができます。しかし、これは想像できるように少し不安です。 Webアプリケーション内で現在実行中であれば、何らかの形で検出することができれば、リスクを大幅に最小限に抑えることができます。 – Pass