Java 无法保存到JBoss 5.1中的commons配置
我正在编写一个web应用程序,它使用Apache Commons config来读/写system.properties文件。文件本身位于Java 无法保存到JBoss 5.1中的commons配置,java,tomcat,jboss5.x,apache-commons-config,Java,Tomcat,Jboss5.x,Apache Commons Config,我正在编写一个web应用程序,它使用Apache Commons config来读/写system.properties文件。文件本身位于WEB-INF/classes/config中。阅读没有问题,当我使用ApacheTomcat部署时,我可以对其进行写入。但是,当我使用JBoss部署应用程序时,我无法写入(使用cofig.setProperty(…)。我得到以下错误(仅限JBoss): 2012-01-06 12:53:48879错误[org.apache.catalina.core.Con
WEB-INF/classes/config
中。阅读没有问题,当我使用ApacheTomcat部署时,我可以对其进行写入。但是,当我使用JBoss部署应用程序时,我无法写入(使用cofig.setProperty(…)
。我得到以下错误(仅限JBoss):
2012-01-06 12:53:48879错误[org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[flint].[flint].(http-0.0.0-8080-1)Servlet flint的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.SetSystemColor(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配置)。问题与在JBoss上使用vfsFileChangedLoadingStrategy有关
有一个问题让我有点沮丧:在JBoss5下使用Apache Commons配置时,我在试图保存到配置文件(这是deployed/classes路径下的一个资源)时一直遇到以下错误:
Servlet flint的错误[org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[xxxx].[xxxx].(http-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)
怎么回事?每次我试图保存到配置文件时都会发生这个错误。在Tomcat 6.x中它工作得很好,但每次我在JBoss上测试时,虽然我可以读取配置文件,但每次尝试写入配置文件时都会抛出上面的错误
JBoss 5.x VFS(虚拟文件抽象)用于它部署的文件,这会导致Commons Config的默认FileChangedLoadingStrategy出现问题。因此,修复方法是执行以下操作:
vfsFileChangedLoadingStrategy f=vfsFileChangedLoadingStrategy();
((FileConfiguration)config.setReloadingStrategy(f)
事实证明,我们确实希望使用VFSFileChangedReloadingStrategy(这意味着使用Apache Commons Config 1.7)。这还要求Apache Commons VFS API位于类路径上。好消息是VFSFileChangedReloadingStrategy即使在非VFS部署(即普通的旧Tomcat和Jetty)下也能很好地工作.问题解决了!还有一件事值得注意,我正在使用CombinedConfiguration:CombinedConfiguration combined; 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)