雄猫启动时可能导致"javax.naming.OperationNotSupportedException"的原因是什么



我的tomcat(7.0.34)显示错误

命名上下文创建失败:javax.naming.OperationNotSupportedException: Context is read only

当它启动时。但我不知道为什么?如何解决这个问题?

更新日志:


Info: Starting Servlet Engine: Apache Tomcat/7.0.34
Mar 11, 2013 9:43:18 PM org.apache.catalina.core.NamingContextListener lifecycleEvent
Critical: Creation of the naming context failed: javax.naming.OperationNotSupportedException: Context is read only
Mar 11, 2013 9:43:18 PM org.apache.coyote.AbstractProtocol start
Info: Starting ProtocolHandler ["ajp-bio-8081"]
Mar 11, 2013 9:43:18 PM org.apache.catalina.core.StandardService startInternal
Info: Starting service ChongWuXingQiu
Mar 11, 2013 9:43:18 PM org.apache.catalina.core.StandardEngine startInternal
Info: Starting Servlet Engine: Apache Tomcat/7.0.34
Mar 11, 2013 9:43:18 PM org.apache.catalina.core.NamingContextListener lifecycleEvent
Critical: Creation of the naming context failed: javax.naming.OperationNotSupportedException: Context is read only
Mar 11, 2013 9:43:18 PM org.apache.coyote.AbstractProtocol start
Info: Starting ProtocolHandler ["ajp-bio-8082"]
Mar 11, 2013 9:43:18 PM org.apache.catalina.startup.Catalina start
Info: Server startup in 1753 ms

Java EE规范在第5.3.4节中声明命名上下文必须是只读的,并且必须在更改请求时抛出operationnotsupportedexception。不幸的是,这并不能直接回答你的问题,但可能是一个提示

引用自规范:

容器必须确保应用程序组件实例对其命名上下文只有读访问权限。容器必须从修改环境命名上下文及其子上下文的javax.naming.Context接口的所有方法抛出javax.naming.OperationNotSupportedException。

我们最近将tomcat实例从tomcat 5升级到tomcat 7。现有的代码看起来像这样:​

Context initCtx;
initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
strSMTPFrom = (String) envCtx.lookup("env/SMTP_From");
envCtx.close();
envCtx = null;

最后两行显然是为了释放资源,但这对于Tomcat来说是不可接受的(参见https://bz.apache.org/bugzilla/show_bug.cgi?id=51744)。如果你不能改变你的代码,那么变通的方法是应用jndiExceptionOnFailedWrite到上下文(https://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Standard_Implementation),例如

<Context jndiExceptionOnFailedWrite="false">

我最近得到了同样的错误。这是由于配置错误,我的JNDI服务器url缺少斜杠。

所以我有

java.naming.provider.url=tcp:/10.211.55.3:7222
不是

java.naming.provider.url=tcp://10.211.55.3:7222

相关内容

  • 没有找到相关文章

最新更新