17

Jettyでwebappを実行しています。アプリの構成は、Jettyが実行されているのと同じサーバー上にあるファイルから取得されます。アプリ内では、システムプロパティを使用してファイルへのパスを取得し、ファイルを解析できるようにします。例えば

final String loc = System.getProperty(FACTORY);

これで、コマンドラインで提供するDスイッチを使用してjettyを開始できます$FACTORYが、可能であれば、jetty.xmlに配置します。タグがあることは知っていますが、それは<SystemProperty />タグにすでに存在するシステム値を提供しているようです<Set/>。誰かがこれをどのように達成できるか例を教えてもらえますか?(達成できれば)

4

4 に答える 4

23

ちなみに、システムプロパティを介してこれを行う必要がある場合は(私が行いました)、たとえば-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>

...そしてそうですあなたはおそらくこれを通してあなたのアプリケーションをプログラムすることができます;-)

于 2011-01-19T12:36:18.963 に答える
7

テストまたは「埋め込み」アプリケーション用にJavaAPIを介してJettyを起動する場合、次の例は、WebAppContextの起動前に実際にJavaシステムプロパティを設定する方法を示しています。

    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またはあなたが質問しなかった他のテクノロジーと比較して「適切」であるかどうかについては説明しません。

于 2014-08-19T18:00:26.057 に答える
3

正しい方向に考えさせられたので、@vanjeの答えを受け入れるつもりです。これが私が使用することになったものです:

  1. WARディストリビューションの外部にjetty-web.xmlを作成します(アプリを「外部」から構成する場合は、WARと一緒にパッケージ化する必要はありません)。
  2. jetty-web.xmlの横に配置jetty.xml
  3. 必要なパラメーターは1つだけだったので、最終的に次のようになりました。

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();

myStringここでの最大の落とし穴は、JNDIがローカルコンテキストを使用していることに気付くまで機能しなかったデフォルトの環境から取得しようとしていたことです。これは私にとっては問題ありませんが、TomcatなどでWARを移動しようとすると、移植性が損なわれます。誰かが例を投稿できる場合、これをデフォルトのコンテキストに保存する方法はgreatOwnParamになります

于 2010-10-11T21:04:24.643 に答える
2

Webアプリケーションを構成するには、システムプロパティを避け、代わりにJNDIを使用することをお勧めします。

最近、Jettyでそれを実現する方法の例を投稿しました。

于 2010-10-09T06:55:31.230 に答える