2016-03-29 15 views
0

Tomcat 7の作業ディレクトリはデフォルトでは$ CATALINA_BASE/binです。webappごとにTomcat 7作業ディレクトリを設定しますか?

外部プロパティファイルを読み込まないコードで実行されるjar(デプロイされたWebアプリケーション内で実行されます)が推奨されていますこのコードは当初はWeblogicを対象としていましたが、まだそこで使用されています。

それは、この方法でファイルを開きます。

FileInputStream fis = new FileInputStream("AXFLogger.properties"); 

私はTomcatのための推奨方法は、のようなものになるだろう知っている:

InputStream is = getClass().getClassLoader().getResourceAsStream("AXFLogger.properties"); 

とにかく問題は問題、コードがどうあるべきかではありませんそれは古いので、私はそれを書き直すためにオフショアチームが必要になるかもしれないので、コードは本当に問題になる可能性があります。

私はworkDir Tomcat属性に精通していますが、これは問題であるグローバルTomcat設定のようです。私はそれを個々のwebappにのみ適用したい。明らかにTomcatのbinディレクトリにwebappのプロパティファイルを格納するのは悪い考えです。

誰かがこれに対処するためのアイデアを持っているのだろうか?コードを変更することが実現できない可能性があるというリスクを軽減するために、私はこれが必要です。ありがとう

答えて

1

ウェブアプリケーションごとにworking directoryを変更することはできません。プロセスには "作業ディレクトリ"があり、使用しているサーバーソフトウェアによっては問題がある可能性があります(Tomcat自体は気にしませんが、Weblogicなどの他のアプリケーションサーバーでも問題ありません)。

各アプリケーションには、Tomcatで実行しているときに独自の「仕事」ディレクトリがあります。コンテキスト属性javax.servlet.context.tempdirの値を取得すると、コンテキスト固有の作業ディレクトリを指すjava.io.Fileインスタンスが見つかります。

は残念ながら、単純にこのようなファイル開くとき:上記の二つの概念の

FileInputStream in = new FileInputStream("myfile"); 

をのみ、最初は遊びである:ファイルには、プロセスの現在の作業ディレクトリからロードされます。

Tomcatを起動するときに作業ディレクトリを設定することはできますが、単一のアプリケーションに対してのみ機能します(上記のように複数のアプリケーションが動作している場合)。あなたがそれをする方法は次のとおりです:

これは、path/to/web/applicationに作業ディレクトリを設定します。 Tomcatはその作業ディレクトリを変更するために何もしません。

このように動作するアプリケーションが複数ある場合は、それぞれのWebアプリケーションごとに1つずつ、複数のTomcatプロセスを起動するだけです。もちろん、URLパターン(またはそれに関係なく)に基づいて適切なTomcatバックエンドにプロキシクライアント要求をプロビジョニングする必要がありますが、安定性とフォールトトレランスのためにはおそらくリバースプロキシが必要ですとにかく。

ソースコードにアクセスできる場合は、元の投稿に示唆したとおりに修正することが最善の方法です(具体的には先頭の/を使用していますが)。さらに、おそらくサーブレットやコンテキスト<init-param>を使用してファイルの場所を指定してください。そのファイルを別の場所に移動したい場合に備えてください。この目的のためにソースコードを変更しても、オフショア会社と長期間契約する必要はありません。ファイルを編集して30秒以内に修正してください。

+0

私はちょうどオフショアチームから戻ってきたと言いました、彼らはコードを変更することは実現可能ではないと言いました。私はソースコードにアクセスすることができないので、私はその点で何もできません。私は上司から聞いたことがあり、彼はWeblogicのインスタンスをセットアップできると言っています。これは、私のケースではコードを変更するための最良の代替ソリューションのように思えます。 – Wes

+0

コードを変更することができないということはあまりにも悪いです:(また、なぜソースにアクセスできなかったのですか?必死なら、 'jad'を使って問題のクラスを逆コンパイルし、 -compile。それから、JAR/WARの.classファイルを上書きします。 –

+0

ソースファイルは実際には大量のソフトウェアパッケージの一部です。おそらく最も簡単なことは、それらのソースをチェックアウトさせることですコンパイルの指示に沿ってブランチを作成していましたが、これを行う意思が最も少なかったことはありませんでした。 – Wes

関連する問題