Jettyでwebappを実行しています。アプリの構成は、Jettyが実行されているのと同じサーバー上にあるファイルから取得されます。アプリ内では、システムプロパティを使用してファイルへのパスを取得し、ファイルを解析できるようにします。例えば。
final String loc = System.getProperty(FACTORY);
これで、Dスイッチを使用してjettyを起動し、コマンドラインで$FACTORY
を指定できますが、可能であれば、jetty.xmlに配置します。 <SystemProperty />
タグがあることは知っていますが、それは<Set/>
タグにすでに存在するシステム値を提供しているようです。誰かがこれをどのように達成できるか例を教えてもらえますか? (達成できる場合)
Webアプリケーションを構成するには、システムプロパティを避け、代わりにJNDIを使用することをお勧めします。
最近、Jettyでそれを実現する方法について 例 を投稿しました。
ちなみに、システムプロパティを介してこれを行う必要がある場合は(私が行いました)、これを行って、たとえばシステムプロパティに-Drun.mode = stagingを追加できます。
<Call class="Java.lang.System" name="setProperties">
<Arg>
<New class="Java.util.Properties">
<Call name="putAll">
<Arg><Call class="Java.lang.System" name="getProperties"/></Arg>
</Call>
<Call name="setProperty">
<Arg>run.mode</Arg>
<Arg>staging</Arg>
</Call>
</New>
</Arg>
</Call>
...そしてそうですあなたはおそらくこれを通してあなたのアプリケーションをプログラムすることができます;-)
JettyをJava API for test or'embedded 'アプリケーションで起動する場合、次の例は、起動前にJavaシステムプロパティを実際に設定する方法を示しています。 WebAppContextの。
private void startJetty() {
try {
long startTime = System.currentTimeMillis();
server = new Server();
setUpSystemProperties(server);
Connector connector = new SelectChannelConnector();
connector.setPort(port);
server.addConnector(connector);
WebAppContext webAppContext = new WebAppContext();
webAppContext.setWar("src/main/webapp");
server.setHandler(webAppContext);
server.start();
}
catch (Exception e) {
throw new RuntimeException("Failed to set-up web server fixture", e);
}
}
private void setUpSystemProperties(Server jettyServer) {
final Properties systemProperties = new Properties();
// set your system properties...
systemProperties.setProperty("yourProperty", "yourValue");
jettyServer.addLifeCycleListener(new SystemPropertiesLifeCycleListener(systemProperties));
}
private class SystemPropertiesLifeCycleListener extends AbstractLifeCycleListener {
private Properties toSet;
public SystemPropertiesLifeCycleListener(Properties toSet) {
this.toSet = toSet;
}
@Override
public void lifeCycleStarting(LifeCycle anyLifeCycle) {
// add to (don't replace) System.getProperties()
System.getProperties().putAll(toSet);
}
}
これらの回答のほとんどとは異なり、これがJNDIまたはあなたが質問しなかった他のテクノロジーと比較して「適切」であるかどうかについては説明しません。
正しい方向に考えさせられたので、@ vanjeの回答を受け入れます。これが私が使用することになったものです:
jetty-web.xml
と一緒にjetty.xml
jetty-web.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
"http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
<New class="org.mortbay.jetty.plus.naming.EnvEntry">
<Arg>myOwnParam</Arg>
<Arg type="Java.lang.String">//some/path/to/the/file</Arg>
</New>
</Configure>
Javaスニペット
InitialContext c = new InitialContext();
EnvEntry env = (EnvEntry)
c.lookup("org.mortbay.jetty.plus.naming.EnvEntry/myOwnParam");
final String myString = (String) env.getObjectToBind();
ここでの最大の落とし穴は、JNDIがローカルコンテキストを使用していることに気付くまで機能しなかったデフォルト環境からmyString
を取得しようとしていたことでした。これは私にとっては問題ありませんが、TomcatなどでWARを移動しようとすると移植性が損なわれます。誰かが例を投稿できれば、これをデフォルトのコンテキストに保存する方法はgreatOwnParamになります