2012-01-06 3 views
2

Apache Commons 구성을 사용하여 system.properties 파일을 읽고 쓰는 웹 응용 프로그램을 작성하고 있습니다. 파일 자체는 WEB-INF/classes/config에 있습니다. 읽기는 문제가되지 않으며 Apache Tomcat을 사용하여 배포 할 때 읽을 수 있습니다. 내가 보스를 사용하여 응용 프로그램을 배포 할 때, 그러나, 나는 cofig.setProperty(...)를 사용 (쓸 수 없습니다 나는 다음과 같은 오류 (보스 만) 얻을 :..JBoss 5.1의 commons config에 저장할 수 없습니다.

 
2012-01-06 12:53:48,879 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/flint].[flint]] (http-0.0.0.0-8080-1) Servlet.service() for servlet flint threw exception 
java.net.UnknownServiceException: protocol doesn't support output 
     at java.net.URLConnection.getOutputStream(URLConnection.java:792) 
     at org.apache.commons.configuration.AbstractFileConfiguration.save(AbstractFileConfiguration.java:449) 
     at org.apache.commons.configuration.AbstractFileConfiguration.save(AbstractFileConfiguration.java:377) 
     at org.apache.commons.configuration.AbstractFileConfiguration.possiblySave(AbstractFileConfiguration.java:750) 
     at org.apache.commons.configuration.AbstractFileConfiguration.clearProperty(AbstractFileConfiguration.java:789) 
     at org.apache.commons.configuration.AbstractConfiguration.setProperty(AbstractConfiguration.java:481) 
     at org.apache.commons.configuration.AbstractFileConfiguration.setProperty(AbstractFileConfiguration.java:782) 
     at com.talecris.flint.server.config.SystemConfiguration.setResultInvalidColor(SystemConfiguration.java:571) 
     at com.talecris.flint.controller.SystemAdminController.setSystemColors(SystemAdminController.java:496) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) 

내가 말했듯이, 모든 톰캣에서 잘 작동을 system.properties 권한을 잘 봐 (owner=Jboss). 테스트 할 수있는 모든 사람을 위해 rw에 대한 사용 권한을 열었지만 동일한 오류가 발생합니다. 내 응용 프로그램이 배포 된 경로에 쓰기를 방해하는 일부 JBoss 설정이 있습니까?

배포 디렉토리에 파일 및 하위 폴더를 쓸 수 있지만, system.properties (아파치 공유 설정을 통해) 변경 내용을 쓸 수 없습니다.

+0

주목할 가치가있는 또 하나의 것, 나는 CombinedConfiguration : CombinedConfiguration 결합; – MTR

답변

1

JBoss에서 VFSFileChangedReloadingStrategy를 사용할 때 문제가있었습니다.

JBoss 5에서 Apache Commons Configuration을 사용할 때 배포 파일/클래스 경로 아래의 리소스 인 구성 파일에 저장하려고 할 때 다음 오류로 계속 실행되었습니다. :

ERROR [org.apache.catalina.core.ContainerBase. [jboss.web]. [localhost]. [/ xxxx]. [xxxx]] (http-0.0.0.0-8080-1) Servlet.service 서블릿 플린트에 대한 예외()가 예외를 던졌습니다 java.net.UnknownServiceException : 프로토콜이 java.net.URLConnection.getOutputStream (URLConnection.java:792)에서 의 출력을 지원하지 않음 at org.apache.commons.configuration.AbstractFileConfiguration.save AbstractFileConfiguration.java:449)

도대체? 이 오류는 구성 파일에 저장하려고 할 때마다 발생했습니다. 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)에서도 잘 작동한다는 것입니다. 문제 해결됨!

+0

http://matthewrupert.net/2012/01/10/apache-commons-configuration-with-jboss-5/ – MTR