问题描述

由于业务的需要,需要把平台自带的tomcat版本升级到tomcat 7, 按“不用平台默认带的tomcat如何部署”操作后,在Studio中启动tomcat时,出现以下错误信息

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
	at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:49)
Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 1 more

问题原因
Studio启动Tomcat时,默认没有加载%TOMCAT_HOME%\bin\tomcat-juli.jar

解决方案

在Studio中,执行以下操作:

  1. 在右上角选择“Java”,切换到Java视图;
  2. 选择“运行 –> 调试配置…”,弹出调试配置对话框
  3. 在“调试配置”对话框中选择“Java应用程序 –> Tomat 5.x”, 选择“类路径”选项卡中,将%TOMCAT_HOME%\bin\tomcat-juli.jar添加至“用户条目”中,之后点“应用”。

tomcat7

 

4. 之后运行Tomcat不能通过Tomcat图标快捷方式启动, 必须在Java视图中,使用下图中的“Tomcat 5.x”启动Tomcat

tomcat7-1

 

5. 启动tomcat后, 会出现以下错误

[JPivot] 13 六月 2016 17:29:26,072 ERROR [Session ] com.tonbeller.tbutils.res.JNDIResourceProvider#close: error closing context
javax.naming.OperationNotSupportedException: Context is read only
	at org.apache.naming.NamingContext.checkWritable(NamingContext.java:961)
	at org.apache.naming.NamingContext.close(NamingContext.java:761)
	at com.tonbeller.tbutils.res.JNDIResourceProvider.close(JNDIResourceProvider.java:68)
	at com.tonbeller.tbutils.res.CompositeResourceProvider.close(CompositeResourceProvider.java:56)
	at com.tonbeller.tbutils.res.ResourcesFactory.initialize(ResourcesFactory.java:163)
	at com.tonbeller.tbutils.res.ResourcesFactory.<init>(ResourcesFactory.java:92)
	at com.tonbeller.tbutils.res.ResourcesFactory.<clinit>(ResourcesFactory.java:89)
	at com.tonbeller.tbutils.res.ResourcesFactoryContextListener.contextInitialized(ResourcesFactoryContextListener.java:23)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5068)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5584)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
	at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:679)
	at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1966)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

处理方式:在%JUSTEP_HOME%\runtime\ReportServer\WEB-INF\classes目录下添加一个resfactory.properties文件,文件内容为

tbeller.usejndi=false