我使用了spring和hibernate,但没有使用struts,而是直接使用了servlet,可是出现了事务阻塞问题,那位帮我看看。服务类是:
public dataService{
dataDAO dao; public void login(){
user u=dao.find("111");
dao.save(u);
}
}
再sevlet中
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
wac= WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
service=(dataService)wac.getBean("data");
service.login();
}
然后再application-jta.xml中配置
<tx:advice id="dataAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="Login*" propagation="REQUIRED"/>
<tx:method name="Logout*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="TTransparentDataDown*" propagation="REQUIRED"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice><aop:config>
<aop:pointcut id="dataService" expression="execution(* test.dataService.*(..))"/>
<aop:advisor advice-ref="dataAdvice" pointcut-ref="dataService"/>
</aop:config>使用HTTPClient建立了一个客户端,用它来调用这个servlet,public class dataServiceTest {
public static void main(String[] args){
dataOperation opt=new dataOperation("127.0.0.1","8080","/IPDProj/dataService");
int result=opt.Login("123123", "11111", "123", "456");
dataOperation opt1=new dataOperation("127.0.0.1","8080","/IPDProj/dataService");
result=opt.Login("123123", "11111", "123", "456");
}
}
现在的现象是,第一个调用总是正确
第二次总是拥塞在user u=dao.find("111");就不执行下去了,
有人知道为什么吗?
public dataService{
dataDAO dao; public void login(){
user u=dao.find("111");
dao.save(u);
}
}
再sevlet中
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
wac= WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
service=(dataService)wac.getBean("data");
service.login();
}
然后再application-jta.xml中配置
<tx:advice id="dataAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="Login*" propagation="REQUIRED"/>
<tx:method name="Logout*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="TTransparentDataDown*" propagation="REQUIRED"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice><aop:config>
<aop:pointcut id="dataService" expression="execution(* test.dataService.*(..))"/>
<aop:advisor advice-ref="dataAdvice" pointcut-ref="dataService"/>
</aop:config>使用HTTPClient建立了一个客户端,用它来调用这个servlet,public class dataServiceTest {
public static void main(String[] args){
dataOperation opt=new dataOperation("127.0.0.1","8080","/IPDProj/dataService");
int result=opt.Login("123123", "11111", "123", "456");
dataOperation opt1=new dataOperation("127.0.0.1","8080","/IPDProj/dataService");
result=opt.Login("123123", "11111", "123", "456");
}
}
现在的现象是,第一个调用总是正确
第二次总是拥塞在user u=dao.find("111");就不执行下去了,
有人知道为什么吗?
你先把事务配置的那一段去掉,再执行一下看看有没有问题?如果依然有问题就不是事务问题了。
还要看看你连接池大小?一般事务很少阻塞的,尤其是只有你一个客户端访问,根本不可能阻塞,除非你故意写了一个阻塞。