我的tomcat(7.0.34)显示错误为
创建命名上下文失败: javax.naming.OperationNotSupportedException:上下文是只读的
启动时。但我不知道为什么?以及如何解决它?
日志:
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
答案 0 :(得分:3)
Java EE规范在第5.3.4节中指出,命名上下文必须是只读的,并且必须在更改请求上抛出OperationNotSupportedExceptions。不幸的是,这并没有直接回答你的问题,但可能是一个暗示
来自spec:
的引用容器必须确保应用程序组件实例仅具有对其命名上下文的读访问权。容器必须从javax.naming.Context接口的所有方法抛出javax.naming.OperationNotSupportedException,它修改环境命名上下文及其子上下文。
答案 1 :(得分:1)
我们最近将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">
答案 2 :(得分:-1)
我最近得到了同样的错误。这是由于配置错误导致我的JNDI服务器URL缺少斜杠。
所以我有
java.naming.provider.url=tcp:/10.211.55.3:7222
而不是
java.naming.provider.url=tcp://10.211.55.3:7222