我在MyEclipse下调试了Hibernate程序,程序正确运行通过。然后我把这个程序有关的xml配置文件和Java类移植到了struts2下。
把原来Hibernate程序里的事务处理代码放到了action的execute()里,但是测试的时候出现了异常:
org.hibernate.HibernateException: Unable to get the default Bean Validation factory
按照网上的方法,往配置文件里加:
<property name="javax.persistence.validation.mode">none</property>
在Action类里添加public static void main()里测试execute()方法,问题解决通过。
但是如果在web端运行,却又抛出一个异常:
org.hibernate.exception.JDBCConnectionException: Could not open connection。
问题好多,
1.为什么在普通工程里不需要设置javax.persistence.validation.mode为none就能运行,而放在struts2工程里就必须要加none了呢?
2.为什么static void main()来直接调用里的execute()方法时能运行成功,而通过web浏览器访问Action调用execute()方法时就报错了呢?是不是和拦截器有关什么的?
谢谢各位解答了.
普通工程和main方法下可以测试通过,那与hibernate相关的xml应该是没什么问题了。这里就贴2个struts的配置吧:
struts.xml:
- XML code
<struts> <constant name="struts.convention.default.parent.package" value="struts-default"/></struts>
web.xml:
- XML code
<web-app><filter> <filter-name>StrutsPrepareFilter</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class></filter><filter> <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class></filter><filter> <filter-name>StrutsExecuteFilter</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class></filter><filter-mapping> <filter-name>StrutsPrepareFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping><filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>*.jsp</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher></filter-mapping><filter-mapping> <filter-name>StrutsExecuteFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping> </web-app>
这是不是和什么过滤器和拦截器机制有关系才导致隔了一层action后就无法正常访问hibernate了呢?
------解决方案--------------------
很多方面都有可能,不介意的话加Q,我帮你弄!
3848294