gpt4 book ai didi

java - 无法保存到 JBoss 5.1 中的公共(public)配置

转载 作者:行者123 更新时间:2023-11-30 11:48:31 25 4
gpt4 key购买 nike

我正在编写一个 Web 应用程序,它使用 Apache Commons 配置来读/写 system.properties 文件。该文件本身位于 WEB-INF/classes/config 中。读取没问题,我用Apache Tomcat部署的时候可以写入。但是,当我使用 JBoss 部署应用程序时,我无法编写(使用 cofig.setProperty(...)。我收到以下错误(仅限 JBoss):

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 exceptionjava.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)

正如我所说,在 Tomcat 中一切正常。 system.properties 权限看起来不错 (owner=Jboss)。我什至为每个人打开了 rw 的权限只是为了测试,但我仍然得到同样的错误。是否有一些 JBoss 设置阻止我的应用程序写入它部署的路径?

我可以将文件和子文件夹写入部署目录,但无法将更改写入 system.properties(通过 apache commons 配置)。

最佳答案

问题与在 JBoss 上使用 VFSFileChangedReloadingStrategy 有关。

这里有一个问题让我有点沮丧:在 JBoss 5 下使用 Apache Commons Configuration 时,我在尝试保存到我的配置文件(这是已部署的/classes 路径下的资源)时一直遇到以下错误:

错误 [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/xxxx].[xxxx]] (http-0.0.0.0-8080-1) Servlet.service()对于 servlet flint 抛出异常java.net.UnknownServiceException: 协议(protocol)不支持输出在 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 的默认 FileChangedReloadingStrategy 出现问题。所以解决办法是改为做这样的事情:

VFSFileChangedReloadingStrategy f = VFSFileChangedReloadingStrategy();((FileConfiguration) 配置).setReloadingStrategy(f);

事实证明,我们确实要使用 VFSFileChangedReloadingStrategy(即使用 Apache Commons Config 1.7)。这还要求 Apache Commons VFS API 位于您的类路径中。好消息是 VFSFileChangedReloadingStrategy 即使在非 VFS 部署(即普通的旧 Tomcat 和 Jetty)中也能很好地工作。问题解决了!

关于java - 无法保存到 JBoss 5.1 中的公共(public)配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8762309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com