2

system.properties ファイルの読み取り/書き込みに Apache Commons 構成を使用する Web アプリケーションを作成しています。ファイル自体はWEB-INF/classes/config. 読み取りは問題なく、Apache Tomcat を使用してデプロイすると書き込みが可能です。ただし、JBoss を使用してアプリケーションをデプロイすると、(を使用して) を書き込むことができませんcofig.setProperty(...)。次のエラーが表示されます (JBoss のみ):

2012-01-06 12:53:48,879 エラー [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/flint].[flint]] (http-0.0.0.0-8080- 1) サーブレット フリントの Servlet.service() が例外をスローした
java.net.UnknownServiceException: プロトコルは出力をサポートしていません
        java.net.URLConnection.getOutputStream(URLConnection.java:792) で
        org.apache.commons.configuration.AbstractFileConfiguration.save (AbstractFileConfiguration.java:449) で
        org.apache.commons.configuration.AbstractFileConfiguration.save (AbstractFileConfiguration.java:377) で
        org.apache.commons.configuration.AbstractFileConfiguration.possiblySave(AbstractFileConfiguration.java:750) で
        org.apache.commons.configuration.AbstractFileConfiguration.clearProperty (AbstractFileConfiguration.java:789) で
        org.apache.commons.configuration.AbstractConfiguration.setProperty (AbstractConfiguration.java:481) で
        org.apache.commons.configuration.AbstractFileConfiguration.setProperty (AbstractFileConfiguration.java:782) で
        com.talecris.flint.server.config.SystemConfiguration.setResultInvalidColor (SystemConfiguration.java:571) で
        com.talecris.flint.controller.SystemAdminController.setSystemColors (SystemAdminController.java:496) で
        sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) で
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で
        java.lang.reflect.Method.invoke(Method.java:597) で
        org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) で
        org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) で

前述したように、Tomcat ではすべて正常に動作します。system.propertiesパーミッションは問題ないようです ( ) owner=Jboss。テストのためだけに権限を rw まで開いたのですが、それでも同じエラーが発生します。アプリケーションがデプロイされているパスへの書き込みを妨げている JBoss 設定はありますか?

ファイルとサブフォルダーを配置ディレクトリに書き込むことはできますが、変更をsystem.properties(apache commons config 経由で) 書き込むことはできません。

4

1 に答える 1

1

この問題は、JBoss での VFSFileChangedReloadingStrategy の使用に関係していました。

少しイライラした問題があります。JBoss 5 で Apache Commons Configuration を使用しているときに、構成ファイル (デプロイされた /classes パスの下のリソース) に保存しようとすると、次のエラーが発生し続けました。

ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/xxxx].[xxxx]] (http-0.0.0.0-8080-1) Servlet.service() for servlet flint例外 java.net.UnknownServiceException をスローしました: プロトコルは、org.apache.commons.configuration.AbstractFileConfiguration.save(AbstractFileConfiguration.java:449) の java.net.URLConnection.getOutputStream(URLConnection.java:792) で出力をサポートしていません

一体何?このエラーは、構成ファイルに保存しようとするたびに発生しました。Tomcat 6.x では正常に動作しましたが、JBoss でテストしたときはいつでも、構成ファイルから読み取ることができましたが、書き込みを試みるたびに上記のエラーがスローされました。

デプロイするファイルの JBoss 5.x VFS (仮想ファイル抽象化)。これにより、Commons Config のデフォルトの FileChangedReloadingStrategy で問題が発生します。したがって、修正は代わりに次のようにすることです。

VFSFileChangedReloadingStrategy f = VFSFileChangedReloadingStrategy(); ((FileConfiguration) config).setReloadingStrategy(f);

本当に VFSFileChangedReloadingStrategy を使用したいことがわかりました (つまり、Apache Commons Config 1.7 を使用することを意味します)。これには、Apache Commons VFS API がクラスパスにあることも必要です。良いニュースとして、VFSFileChangedReloadingStrategy は、VFS 以外のデプロイメント (単純な古い Tomcat と Jetty) でもうまく機能します。問題が解決しました!

于 2012-01-09T18:00:36.967 に答える