日期:2014-05-18  浏览次数:20867 次

高端大气上档次BUG-->Action 里 Service 偶现空指针错误
java.lang.NullPointerException
    at com.sunwave.action.privilege.UserAction.findUserPageInfo(UserAction.java:78)

省略N字
框架:SSH,service在Action中注入,配置文件如下:
<!--用户管理-->
<bean id="userAction" class="com.sunwave.action.privilege.UserAction" scope="prototype">
<property name="userService" ref="userService"/>
<property name="systemParameterService" ref="systemParameterService"></property>
</bean>
<bean id="userService" class="com.sunwave.service.impl.privilege.UserServiceImpl"
parent="baseService">
<property name="roleService" ref="roleService"/>
<property name="empService" ref="empService"/>
<property name="systemParameterService" ref="systemParameterService"/>
<property name="userDao"><ref bean="userDao"/></property>
</bean>    
<bean id="userDao" class="com.sunwave.dao.impl.privilege.UserDaoHibImpl" 
  parent="baseDAO">
</bean>

一般情况下,不会出现该错误,系统发布到公网后偶现,初步怀疑是高访问量的并发性错误,怀疑是否和service的单例模式有关,求解~~
java ssh 并发

------解决方案--------------------
应该把代码和信息贴全吧,
比如at?com.sunwave.action.privilege.UserAction.findUserPageInfo(UserAction.java:78) 这一块的代码
------解决方案--------------------
第一,或许是某个参数你测试的时候没有用过到,上线之后才用到所以出现这问题
第二,或许真的是高并发访问的问题,那个没办法,靠自己解决吧。
------解决方案--------------------
scope="prototype"你配置这个了,就打破单例模式了。这每次请求都创建一个新的action了。
------解决方案--------------------
方法参数问题?
------解决方案--------------------
也许是timing problem
------解决方案--------------------
UserAction.java:78 就是 infoMap=userService.findUserByCon(start,limit,user);  这一行?
------解决方案--------------------
在这个方法前加上日志记录将参数记录到日志文件方便以后查看
------解决方案--------------------
能否通过压力测试重现问题? 
------解决方案--------------------
Map session = ActionContext.getContext().getSession();     
......   
infoMap=userService.findUserByCon(start,limit,user);

你这个action我至少看到了两个存在安全隐患。

1. Struts已经不建议在action里通过ActionContext.getContext()获取session了。官方已经说,可能会出现为空现象,可以到官网看康。
2.使用userService前应该判断下是否为空,这是良好的编程习惯。
------解决方案--------------------
缺少jar包  你仔细看一下 可能是缺spring和struts相联系的包