jfinal ext 自动路由功能问题

泡泡队长 发布于 2014/10/29 11:27
阅读 2K+
收藏 1

@绝望的八皮 你好,想跟你请教个问题:

你好,本人在使用你写的jfinal ext 扩展,使用过程中发现了一个问题,不知道是我写的问题,还是程序才问题。

我将ext编译后,打成jar包放入lib目录下,FrameConfig使用了自动路由功能(我将其改名为AutoBindRoute)。

@Override
	public void configRoute(Routes routes) {
		AutoBindRoute route = new AutoBindRoute();
		routes.add(route);
	}



而后写了一个模块,该模块中有一个Action,继承成了Controller类,并且添加了注释。

@ControllerBind(controllerKey="/probe")
public class ProbeAction extends BaseController {

	public void index(){
		TPProbe probe = TPProbe.dao.findById("1");
		System.out.println(probe.getStr("probe_name"));
		renderNull(); 
	}
}



此类也打成jar包放在lib中。

在web.xml中配置了jfinal必要配置

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
	<filter>
		<filter-name>jfinal</filter-name>
		<filter-class>com.jfinal.core.JFinalFilter</filter-class>
		<init-param>
			<param-name>configClass</param-name>
			<param-value>cn.com.acsno.FrameConfig</param-value>
		</init-param>
	</filter>
	
	<filter-mapping>
		<filter-name>jfinal</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>



因为你的文档中有些,此自动路由,会自动扫描lib中所有继承了Controller的类。

但是启动tomcat后报出异常

[QiConsoleDaemon] main 2014-10-29 11:27:03,792 INFO  net.sf.ehcache.pool.sizeof.JvmInformation  - Detected JVM data model settings of: 64-Bit HotSpot JVM with Compressed OOPs
[QiConsoleDaemon] main 2014-10-29 11:27:03,914 INFO  net.sf.ehcache.pool.sizeof.AgentLoader  - Extracted agent jar to temporary file D:\Tools\apache-tomcat-6.0.9\temp\ehcache-sizeof-agent5392921998374837044.jar
[QiConsoleDaemon] main 2014-10-29 11:27:03,914 INFO  net.sf.ehcache.pool.sizeof.AgentLoader  - Trying to load agent @ D:\Tools\apache-tomcat-6.0.9\temp\ehcache-sizeof-agent5392921998374837044.jar
2014-10-29 11:27:04 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter jfinal
java.lang.NoClassDefFoundError: org/hibernate/cache/CacheException
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:169)
	at cn.com.acsno.core.kit.Reflect.forName(Reflect.java:691)
	at cn.com.acsno.core.kit.Reflect.on(Reflect.java:85)
	at cn.com.acsno.core.kit.ClassSearcher.extraction(ClassSearcher.java:38)
	at cn.com.acsno.core.kit.ClassSearcher.search(ClassSearcher.java:169)
	at cn.com.acsno.core.route.AutoBindRoute.config(AutoBindRoute.java:80)
	at com.jfinal.config.Routes.add(Routes.java:40)
	at cn.com.acsno.FrameConfig.configRoute(FrameConfig.java:62)
	at com.jfinal.core.Config.configJFinal(Config.java:47)
	at com.jfinal.core.JFinal.init(JFinal.java:67)
	at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)



敢问你是否这样用过。

加载中
0
绝望的八皮
绝望的八皮

java.lang.NoClassDefFoundError: org/hibernate/cache/CacheException

你缺少这个类

泡泡队长
泡泡队长
我跟踪了一下,ClassSearch类,感觉这个类有点问题!
泡泡队长
泡泡队长
你好,看看我给你的回复评论
0
泡泡队长
泡泡队长

引用来自“绝望的八皮”的评论

java.lang.NoClassDefFoundError: org/hibernate/cache/CacheException

你缺少这个类

不是少这个类,是因为jfinal ext 打成jar包(jfinal-ext.jar)后放入到lib目录下。
然后设置了
AutoBindRoute route = new AutoBindRoute();
route.includeAllJarsInLib(true);
routes.add(route);
如果说,我使用
AutoBindRoute route = new AutoBindRoute();
route.addJars("jfinal-ext.jar");
route.addJars("probe.jar");
routes.add(route);
这样就可以了!

0
绝望的八皮
绝望的八皮

includeAllJarsInLib(true) 就是扫描所有的jar里面的类。

我觉得问题是这样的。java.lang.NoClassDefFoundError 意思是 class a 引用了class b,在初始化a的时候b找不到。

如果你不是用依赖管理比如mvn,gradle,你可能存在少引入依赖jar包的问题。

所有可能是你某个类中引用了org/hibernate/cache/CacheException,但是没有引入相关jar包。

另外jfinal-ext需要在错误提示上再做一点改善,更友好利于排查。下个版本想办法改进。


返回顶部
顶部