
快速构建Spring+hibernate WEB应用(三)
|
Spring+hibernate Spring几乎对hibernate提供了完美的支持。 要在刚创建的Spring工程中加入Hibernate得支持,索要做的工作仅仅是声明一个SessionFactory.用它代替了原来的 ..代码胜千言!
察看上述的配置文件,可以看出,hibernate的使用被Spring 基本完全接管,我们所使用的SessionFactory只需按需注入即可J 接上上述的配置不完全的地方 可以看到,引用的bean配置如下:
Oracle的Clob,Blob字段的处理类,使其可以与普通字段一样进行处理。
数据源的配置。 当然:我们不能忘记MyEclipse的hibernate生成工具,将其生成并与SessionFactory的配置匹配,就万事OK拉! 通过以上步骤: 我们发现,现在我们的应用已经拥有了Spring框架和Hibernate工具的支持! 通过SessionFactory的注入,我们就可以利用Hibernate完成业务功能了,通过前面提到的Controllor对业务功能类的引用,一个完整的WEB应用就搭建成功了!! Spring+hibernate 事务 有了Spring,hibernate的事务就有了最优美的解决方案,利用AOP将hibernate 事务处理自动包装到方法上,从而使方法里再也不要为事务伤神了。 当然,当事务为一长串的方法连接起来的,怎么办呢? 解决方案:business层,专门完成真正业务逻辑,在一个方法里将刚才的情况封装成一个函数,利用AOP进行事务管理。(本人愚见) 说到方便,当然还是免除所有代码来的最实际了,看事务配置文件如下:
声明事务管理器
设置一个事物管理的通用父接口,让其他的需要事务管理又形式一样的声明直接继承,好处是减少了各个节点的事务声明。
业务逻辑DAO直接继承事务。 写在最后的话,我的这篇文章都是讲的片段,可能没有形成一个工程完整的全貌,却包含了一个起步工程几乎所有的细节(当然除了安全控制),里面当然还是有一些小细节的问题,不过我想大方向正确,成功就不会远了吧! |
一共有 12 条评论
看你的情况应该是Ehcache的配置路径有点问题
最好还是用粗classpath 路径。
比如就在WEB-INF/classes 下的XML
路径为classpath*:***.xml
[ERROR,[/myacegiTest],http-8080-1] Exception sending context initialized event to listener instance of class org.acegisecurity.ui.session.HttpSessionEventPublisher
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cacheManager' defined in ServletContext resource [/WEB-INF/applicationContext-security-acegi.xml]: Initialization of bean failed; nested exception is net.sf.ehcache.CacheException: Cannot parseConfiguration CacheManager. Attempt to create a new instance of CacheManager using the diskStorePath "E:\Program Files\Apache Software Foundation\Tomcat 5.5\temp" which is already used by an existing CacheManager. The source of the configuration was URL of file:/E:/Program%20Files/Apache%20Software%20Foundation/Tomcat%205.5/webapps/myacegiTest/WEB-INF/classes/ehcache.xml.
net.sf.ehcache.CacheException: Cannot parseConfiguration CacheManager. Attempt to create a new instance of CacheManager using the diskStorePath "E:\Program Files\Apache Software Foundation\Tomcat 5.5\temp" which is already used by an existing CacheManager. The source of the configuration was URL of file:/E:/Program%20Files/Apache%20Software%20Foundation/Tomcat%205.5/webapps/myacegiTest/WEB-INF/classes/ehcache.xml.
at net.sf.ehcache.CacheManager.configure(CacheManager.java:248)
at net.sf.ehcache.CacheManager.init(CacheManager.java:193)
at net.sf.ehcache.CacheManager.<init>(CacheManager.java:155)
at net.sf.ehcache.CacheManager.create(CacheManager.java:356)
at org.springframework.cache.ehcache.EhCacheManagerFactoryBean.afterPropertiesSet(EhCacheManagerFactoryBean.java:71)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1091)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:396)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:252)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:190)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3729)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4187)
at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1175)
at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:527)
at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:104)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:833)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:639)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1285)
at java.lang.Thread.run(Unknown Source)
期待中...
gqg@soueast-motor.com
因为给我们工程组作过一些培训,但是却很难说针对Spring MVC的完整例子,Spring MVC里的控制器也算种类不少,不过简单的例子也还有,不过那真是有点简陋了。
Spring是很强大的,它的MVC只是它众多功能的一小部分,我觉得要掌握Spring还是要从Web框架学起,因为这个是可以马上学以至用的,我们公司现在有一个项目打算用Spring的RMI实现,掌握Spring是当务之急啊
话说回来,J2ee的范围太宽泛了,时刻都在诱惑着你,现在只希望Spring的MVC能象Struts一样实用,非常需要象你这样的高人指点一下
希望能得到一个完整的Spring的例子,如果LZ有,就发到我邮箱吧.
还是邮件联系好吧
liushl2001@163.com
ps:我觉得Struts框架现在看来有众多不足,但是却是一个流行最广的WEB层框架,用rod的话说,它是一个事实标准,他的简单易用恐怕没有人不会有那么一点点动心。
至于Spring实现的MVC,众说纷纭,我想用什么没有定论,可能你的公司都是Struts,也可能都要求换用Spring MVC。
我想这也是架构师与管理者讨论的一个问题。
Appfuse不是一个比较标准的Struts+Sring的整合框架吗?
感激不尽!
也希望能与你交朋友
Email: gqg@soueast-motor.com
QQ: 52415710