JavaEE项目中bug总结
[b]一.[/b]
java.lang.NullPointerException at org.apache.jsp.index_jsp._jspInit....[/b]
这个bug是我在转myeclipse项目到eclipse-jee / springSource中遇到的错误
原因是拷贝了一个jsp-api.jar的包到WEB-INF/lib目录下,删除这个文件即可,估计是拷贝的这个文件跟tomcat有冲突。
这里还有一点要提的是.classpath中
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v6.0">
<attributes>
<attribute name="owner.project.facets" value="jst.web"/>
</attributes>
</classpathentry>
如果没有则要加上。一般都是自动生成的。
[b]二.
java.lang.OutOfMemoryError: GC overhead limit exceeded[/b]
这个是JDK6新添的错误类型。是发生在GC占用大量时间为释放很小空间的时候发生的,是一种保护机制。解决方案是,关闭该功能,使用—— -XX:-UseGCOverheadLimit
解释:
JDK6新增错误类型。当GC为释放很小空间占用大量时间时抛出。
一般是因为堆太小。导致异常的原因:没有足够的内存。
解决方案:
1、查看系统是否有使用大内存的代码或死循环。
2、可以添加JVM的启动参数来限制使用内存:-XX:-UseGCOverheadLimit
在linux服务器中,重启tomcat时在其.sh文件中某行加入-XX:-UseGCOverheadLimit参数即可
[b]三.[/b]
在web网络开发时,注意发布后,在网络上总有网络爬虫去爬你的网站,所以要对“必须登录”才能看到的东西要加过滤器处理,否则你的网站会因为请求太多,而挂掉,cpu飙到100%
例如我们我们网站,里面有导出功能和后台管理功能,都是类似下面的url
http://localhost:8080/abgent/export/exportByCategory?name=Stem%20Cell 导出
http://localhost:8080/abgent/admin/product/list 后台管理
我们在后台过滤其中加如下代码
[b]四。
设置多对多的关系时,必须设置fetch = FetchType.EAGER,LAZY不可以,总报下面的错误
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:
com.founder.core.model.Permission.roles, no session or session was closed[/b]
这个bug是我在webservice中对对象进行更改操作时遇见的
才在web.xml里面加了下面的filter,强制他们关联起来,这时就可以设置fetch = FetchType.LAZY了
因为加了上面的filter,才出现了下面的错误
Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in
read-only mode (FlushMode.MANUAL): Turn your
Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
这是就得必须加
[b]五
A cycle is detected in the object graph. This will cause infinitely deep XML[/b]
[b]错误解决方式:在另一个po里面有与之关联的主键po对象用@XmlTransient 把它注释掉 [/b]
转载[url]http://taiwei-peng.iteye.com/category/114295?show_full=true[/url]
这就好比一个入口一样把每个po都映射了一下 我是这样解决的
这里还涉及到一对多的关系
解决方法如下:
在另一个po里面有与之关联的主键po对象用@XmlTransient 把它注释掉
这样就可以了
如果不注释会包这样的一个错
org.apache.cxf.interceptor.Fault: Marshalling Error: A cycle is detected in the object graph. This will cause
infinitely deep XML: com.tjsoft.model.sys.TBusiActivity@60310f ->
com.tjsoft.model.sys.TBusiQuestionnaire@12e18d7 -> com.tjsoft.model.sys.TBusiActivity@60310f
at org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:159)
还有一个错误也是经常见到
org.apache.cxf.interceptor.Fault: Marshalling Error: com.tjsoft.module.activity.schem.LabelCount is not known
to this context
这个好像就是没有与之匹配的类
解决这个方法就是上面自定义一个类型用
@XmlElements({
@XmlElement(name="LabelCount",type=com.tjsoft.module.activity.schem.LabelCount.class)
})
这个就可以解决,但是你必须把它暴露出去,也就是写一个方法返回一个自定义类型实现类可以什么都不用写
这就是我搞Webservice 遇到的难题。
[b]一.[/b]
java.lang.NullPointerException at org.apache.jsp.index_jsp._jspInit....[/b]
这个bug是我在转myeclipse项目到eclipse-jee / springSource中遇到的错误
原因是拷贝了一个jsp-api.jar的包到WEB-INF/lib目录下,删除这个文件即可,估计是拷贝的这个文件跟tomcat有冲突。
这里还有一点要提的是.classpath中
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v6.0">
<attributes>
<attribute name="owner.project.facets" value="jst.web"/>
</attributes>
</classpathentry>
如果没有则要加上。一般都是自动生成的。
[b]二.
java.lang.OutOfMemoryError: GC overhead limit exceeded[/b]
这个是JDK6新添的错误类型。是发生在GC占用大量时间为释放很小空间的时候发生的,是一种保护机制。解决方案是,关闭该功能,使用—— -XX:-UseGCOverheadLimit
解释:
JDK6新增错误类型。当GC为释放很小空间占用大量时间时抛出。
一般是因为堆太小。导致异常的原因:没有足够的内存。
解决方案:
1、查看系统是否有使用大内存的代码或死循环。
2、可以添加JVM的启动参数来限制使用内存:-XX:-UseGCOverheadLimit
在linux服务器中,重启tomcat时在其.sh文件中某行加入-XX:-UseGCOverheadLimit参数即可
[b]三.[/b]
在web网络开发时,注意发布后,在网络上总有网络爬虫去爬你的网站,所以要对“必须登录”才能看到的东西要加过滤器处理,否则你的网站会因为请求太多,而挂掉,cpu飙到100%
例如我们我们网站,里面有导出功能和后台管理功能,都是类似下面的url
http://localhost:8080/abgent/export/exportByCategory?name=Stem%20Cell 导出
http://localhost:8080/abgent/admin/product/list 后台管理
我们在后台过滤其中加如下代码
User user = (User)request.getSession().getAttribute("user");
if (((url.indexOf("/admin/") != -1) || (url.indexOf("/export/") != -1))
&& ((user != null && !StringUtils.equals(user.getType().toString(), "Manager"))
|| user == null)) {
request.getRequestDispatcher("/user/toLogin").forward(request, response);
return;
}
[b]四。
设置多对多的关系时,必须设置fetch = FetchType.EAGER,LAZY不可以,总报下面的错误
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:
com.founder.core.model.Permission.roles, no session or session was closed[/b]
这个bug是我在webservice中对对象进行更改操作时遇见的
才在web.xml里面加了下面的filter,强制他们关联起来,这时就可以设置fetch = FetchType.LAZY了
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/services/*</url-pattern>
</filter-mapping>
因为加了上面的filter,才出现了下面的错误
Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in
read-only mode (FlushMode.MANUAL): Turn your
Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
这是就得必须加
<init-param>
<param-name>singleSession</param-name>
<param-value>false</param-value>
</init-param>
[b]五
A cycle is detected in the object graph. This will cause infinitely deep XML[/b]
[b]错误解决方式:在另一个po里面有与之关联的主键po对象用@XmlTransient 把它注释掉 [/b]
转载[url]http://taiwei-peng.iteye.com/category/114295?show_full=true[/url]
这就好比一个入口一样把每个po都映射了一下 我是这样解决的
这里还涉及到一对多的关系
解决方法如下:
在另一个po里面有与之关联的主键po对象用@XmlTransient 把它注释掉
这样就可以了
如果不注释会包这样的一个错
org.apache.cxf.interceptor.Fault: Marshalling Error: A cycle is detected in the object graph. This will cause
infinitely deep XML: com.tjsoft.model.sys.TBusiActivity@60310f ->
com.tjsoft.model.sys.TBusiQuestionnaire@12e18d7 -> com.tjsoft.model.sys.TBusiActivity@60310f
at org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:159)
还有一个错误也是经常见到
org.apache.cxf.interceptor.Fault: Marshalling Error: com.tjsoft.module.activity.schem.LabelCount is not known
to this context
这个好像就是没有与之匹配的类
解决这个方法就是上面自定义一个类型用
@XmlElements({
@XmlElement(name="LabelCount",type=com.tjsoft.module.activity.schem.LabelCount.class)
})
这个就可以解决,但是你必须把它暴露出去,也就是写一个方法返回一个自定义类型实现类可以什么都不用写
这就是我搞Webservice 遇到的难题。