2017-04-10 15:46
多数是由自己的程序中出现内存泄漏造成的,少数情况是第三方依赖有内存泄漏,在线上使用 jmap 与 jstack 这些命令去定位一下内存占用的异常情况,再修改那些内存泄漏的地方
除了内存泄漏以外,还有一种情况是内存回收的速度跟不上内存被吃掉的速度,例如:在有一定访问量的情况下,某个地方在不停的创建对象,好比 Db.find("select * from bigTable") 这种 select * 并且不带 where 条件的查询会生成很多对象
还有更专业的工具在 eclipse 中就可以查看,例如 jprofile 之类的
一般不需要复杂工具,用用 jmap 与 jstack 就好,参考这里:http://hillside.iteye.com/blog/706129
2017-04-10 15:19
根据异常定位到 InterceptorManager.java 文件的第 83 行代码如下:
method.getAnnotation(Before.class)
很显然这行代码是一个极其正确的代码,问题必然是出现在代码之外的地方,从下面几个方法去尝试解决:
1:确定 jdk 的版本,以及是否是 oracle 的 jdk,而非 openjdk
2:如果使用 JFinal.start(...) 启动,确定启动参数在 IDEA 开发环境之下,是否去掉了最后一个参数,也即最后一个 int 参数在 IDEA 之下一定要去掉
3:尝试将 @Before({LoginValidator.class}) 改为 @Before(LoginValidator.class)
无论如何,这个问题必然与 jfinal 无关,因为 method.getAnnotation(Before.class) 这行代码已经使用了五年以上了,从未出过问题
2017-04-10 13:47
显然我是在说需要如下的信息量,才有可能存在回答的空间:
1:abstract class BaseValidator 不是引发错误的原因,而是你的具体的某个 Validator 直接引发,但你没贴出这部分代码
2:具体的那个 Validator 怎么用的,里面的代码是什么,无从得知
3:异常信中的信息与 Validator, 甚至与你的 BaseValidator 完全无关,你可以搜索一下这个异常信息,完全不存在 Validator 字样,甚至存在的 jfinal 字样也只有与 aop 相关的两个类
4:异常信中完全没有 cause 信息
提出问题,要换位思考,站在回答者的角度去思考到底提供什么信息量才让对方能理解在问什么,如何回答
因此,本贴中的问题完全没有可回答的空间
2017-04-09 16:15
@EATI001 前端有 nginx 的话,麻烦会更多,nginx 会接管静态请求,请求根本到不了 tomcat、jetty,如果将 nginx 的 root 配置指向 WEB-INF,那么其下的 jar 包与配置文件也暴露了,还需要额外配置对这些文件的禁用
jfinal 目前只专注处理动态请求,静态资源尽可能不去处理,生产环境下 nginx 接管静态资源已然成了标配
2017-04-09 15:46
css js png jpg 这类资源文件,由浏览器发起请求,由 tomcat、jetty、nginx 这类进程直接接管,类似于 jfinal、Struts、spring mvc 框架都不会去干预
而 WEB-INF 目录下面由于有 jar 包、配置文件等需要被保护的文件,所以 tomcat、jetty 这类 java web 容器天然禁止对 WEB-INF 之下一切资源的访问
因此, css、js 这类文件生来就不应该被放在 WEB-INF 之下,这个是由很久以前的 java web 规范决定的
如果一定要放在 WEB-INF 之下,需要添加 Filter 接管这类资源的请求,然后象 tomcat、jetty 一样将这类资源的内容自行加载并响应给客户端,相当于是自找麻烦
2017-04-09 10:42
@eskylele jfinal 手册有详细说明,在首页下载一份
2017-04-09 10:42
@netwild 搞了半天你是希望得到 "表名" 的 remark,这个或许默认获取不到,需要参数