`
sslaowan
  • 浏览: 380417 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring整合问题(RCP+Spring HTTPInvoker+jBPM+SSH)

阅读更多

      终于要崩溃了,整合这件事不好玩。请有经验的人指导一下~

      目前我们使用如下技术:

      1、RCP和Web浏览器(Extjs+HTML)两种客户端

      2、采用Spring HTTP Invoker为RCP提供远程服务

      3、使用Struts Action做控制层(解析HTTP请求,调用Facade,拼接XML,返回Response响应)

      4、使用Spring做声明式事务处理,IoC容器,和Template封装操作,以及整合其他框架

      5、使用Hibernate做O/R Mapping

      6、使用jBPM做工作流引擎。

     目前整合方案:

     1、Spring和Struts整合,使用Spring提供的Struts插件,配置action-servlet,在其中写入由Spring管理的action。

            在web.xml中配置org.springframework.web.context.ContextLoaderListener,来加载applicationContext.xml,这样我们使用Web浏览器方式访问Struts Action时,直接就可以在Action中引入Facade,而不需要使用ctx.getBean这样的代码了。(也就是Spring自带的例子中JPetStore的架构,我们的分层架构和那个基本上一样)

     2、Spring和jBPM整合,使用Spring-Module-JBPM,按照其自带的文档中的做法进行整合。

            应用程序和jBPM共用一个SessionFactory。

            

xml 代码
  1. <beans>  
  2.   
  3. <!---->  
  4. <bean id="hibernateSessionFactory"  
  5. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  6.      <value></value>/WEB-INF/classes/hibernate.cfg.xml 
  7. bean>  
  8. <!---->  
  9. <bean id="simpleWorkflow"  
  10. class="org.springmodules.workflow.jbpm31.definition.ProcessDefinitionFactoryBean">  
  11. <property name="definitionLocation"  
  12. value="classpath:org/springmodules/workflow/jbpm31/simpleWorkflow.xml"/>  
  13. bean>  
  14. <!---->  
  15. <bean id="jbpmConfiguration"  
  16. class="org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean">  
  17. <property name="sessionFactory" ref="hibernateSessionFactory"/>  
  18. <property name="configuration" value="classpath:jbpm.cfg.xml"/>  
  19. <property name="processDefinitions">  
  20. <list>  
  21. <ref local="simpleWorkflow"/>  
  22. list>  
  23. property>  
  24. <property name="createSchema" value="true"/>  
  25. <property name="processDefinitionsResources">  
  26. <list>  
  27. <value>classpath:/org/springmodules/workflow/jbpm31/someOtherWorkflow.xmlvalue>  
  28. list>  
  29. property>  
  30. bean>  
  31. <!---->  
  32. <bean id="jbpmTemplate" class="org.springmodules.workflow.jbpm31.JbpmTemplate">  
  33. <constructor-arg index="0" ref="jbpmConfiguration"/>  
  34. <constructor-arg index="1" ref="simpleWorkflow"/>  
  35. bean>  
  36.   
  37. beans>  

     3、Spring和Spring HTTPInvoker,也使用典型的做法,在web.xml中配置org.springframework.web.servlet.DispathcerServlet

     目前存在的问题:

     1、使用HTTPInvoker提供服务,不能像通过Struts Action一样直接使用Facade(因为获取不到),而需要写ctx.getBean,因为不是很理解Web容器(使用Tomcat测试,WAS发布)的机理,不过觉得org.springframework.web.context.ContextLoaderListener和org.springframework.web.servlet.DispathcerServlet这两个东西ms不能共享同一个上下文。而applicationContext.xml只载入到了org.springframework.web.context.ContextLoaderListener的上下文中,而没有载入到org.springframework.web.servlet.DispathcerServlet的上下文。如果两个都载入,意味着需要加载两遍applicationContext.xml,连接两遍数据库,创建两个SessionFactory。

            目前我们是使用ctx.getBean的方法来获得Facade。将这个方法放到service类的构造器中,Tomcat启动时,自动创建service实例,这时会加载相应的所有配置文件,还会建立数据库连接。

    2、我们将HTTP Invoker的service放在Struts Action中(也就是说Action充当Service类),然后在TaskBean中(和jBPM示例websale的做法一样)调用jBPM流程API,在这里我们使用了Spring提供的JbpmTemplate,只是利用其获得JbpmConfiguration,之后就跟使用native JBPM一样了(某些场景我们也会使用JbpmTemplate.execute方法,在回调函数中写,这样context的生命周期就由Template控制了)。我们将TaskBean配置在applicationContext.xml中,它的property值设为jbpmTemplate,ctx.getBean("taskBean");可是报错,加载不到jbpmTemplate。

         3、如何将jBPM事务和自制Java代码中的事务一起控制,jBPM的事务是随jbpmContext的创建和销毁而开始和结束的。主要处理的事务是:

         1)业务事务失败,jbpm事务必须回退。

         2)jbpm事务失败,业务事务也必须回退。

          一个基本思路是:将调用业务Facade放入到jbpmTemplate的execute中,由它来负责context生命周期,抛出异常,则context关闭,事务回滚;而使用Spring生命式事务处理,来拦截TaskBean中的方法,这样当业务层抛出异常, jbpmTemplate.execute也不能正常执行结束,业务层也会回滚(还没试过,不知道大家的做法是什么,je上有很多讨论,不过都太虚了,根本不实用)。

 

           关于RCP通过HTTPInvoker远程调用Server端的service,我想如果这个整合不来就只好使用Struts Action返回XML,而通过URLConnection类来进行port和get处理了。

分享到:
评论
1 楼 sslaowan 2007-11-22  
就算是解决了吧,使service继承AbstractController,然后用this.getWebApplicationContext.getBean获得taskBean,然后用RCP调用就成了~

相关推荐

    RCP+Plug-in开发自学教程_RCP+Plug-in开发自学教程_源码

    **RCP+Plug-in开发自学教程** 在软件开发领域,Eclipse RCP(Rich Client Platform)和Plug-in机制是构建可扩展、模块化桌面应用程序的重要工具。本教程将引导你深入理解并掌握这两种技术,帮助你成为一名熟练的RCP...

    Eclipse RCP+Spring建胖客户端Web程序

    ### Eclipse RCP+Spring构建富客户端Web程序 #### 摘要 随着技术的发展和用户需求的变化,构建高效、响应迅速且用户体验良好的客户端应用变得尤为重要。传统的Web 2.0和丰富的互联网应用(RIA)虽然流行,但在某些...

    超级好的鸿蒙网络方面(包含udp+tcp+http+web+wifi+tls+rcp+websocket+其它)项目源代码100%好用.7z

    超级好的鸿蒙网络方面(包含udp+tcp+http+web+wifi+tls+rcp+websocket+其它)项目源代码100%好用.7z

    Eclipse+RCP+Spring+OSGi

    比较好的OSGi学习教程,分享给大家,简单易学...。。。

    Hibernate +  RCP + MySQL+ Jfreechart 开发实例 

    《Hibernate + RCP + MySQL + JFreeChart 开发实例详解》 在当今的软件开发领域,集成多种技术来创建高效、功能丰富的应用已经成为常态。本实例将深入探讨如何结合Hibernate对象关系映射框架、RCP(Rich Client ...

    Eclipse RCP Plug-in开发自学教程(Eclipse3.6)

    【Eclipse RCP 插件开发自学教程 (Eclipse3.6)】 Eclipse RCP (Rich Client Platform) 是一个框架,允许开发者构建高度可定制和可扩展的桌面应用程序。本教程是针对Eclipse 3.6版本的,提供了一个详细的学习路径,...

    Eclipse+RCP+打印表格

    ### Eclipse+RCP+打印表格 #### 背景与挑战 在开发基于Eclipse RCP的应用程序时,经常会遇到需要实现打印功能的需求,尤其是在处理表格数据时。由于Eclipse RCP采用的是SWT(Standard Widget Toolkit)作为其图形...

    用Http Invoker实现RCP客户端与后台的交互

    本文将深入探讨如何使用Http Invoker实现RCP客户端与后台的交互,以及相关知识点。 1. **Http Invoker的基本概念**: - Http Invoker是Spring框架的一个组件,它利用HTTP协议来传输Java对象,实现了客户端与服务器...

    rcp与spring集成的一个简单例子

    在IT行业中,RCP(Rich Client Platform)是Eclipse提供的一种构建桌面应用程序的框架,而Spring则是一个广泛应用的Java企业级应用框架,主要用于处理依赖注入、面向切面编程以及服务管理。将RCP与Spring集成可以...

    spring rcp 经典教程

    - **开发者邮件列表**:springframework-rcp-dev@lists.sourceforge.net,用于开发者之间的交流和问题解答。 - **问题跟踪系统**:http://opensource2.atlassian.com/projects/spring,用于提交和追踪项目的bug和新...

    Eclipse RCP与Spring OSGi技术详解与最佳实践

    《Eclipse RCP与Spring OSGi:技术详解与最佳实践》由资源的Eclipse专家亲自...实战篇(第13-15章)详细讲解了Eclipse RCP与Spring OSGi框架、Hibernate ORM框架、JPA规范、Maven工具的整合,以及它与Java的模块化设计

    在Eclipse RCP中应用Spring OSGI 管理bean(一)

    标题中的“在Eclipse RCP中应用Spring OSGI 管理bean(一)”表明这是一篇关于如何在Eclipse Rich Client Platform (RCP)应用程序中集成Spring框架,并利用OSGi服务来管理Bean的教程。Eclipse RCP是一个用于构建桌面...

    spring rcp

    标题 "spring rcp" 暗示我们要讨论的是Spring Rich Client(Spring RCP)平台,这是一个基于Spring框架的桌面应用程序开发平台。Spring RCP提供了一种利用Spring的强大功能来构建可扩展、模块化的桌面应用的方法。 ...

    rcp+JfreeChart

    该资源包含源码和详细的说明文档,是自己在eclipse rcp技术中使用JfreeChart进行的总结,供大家参考

    Spring RCP RichClient 开发参考手册

    通过本手册的深入学习,开发者不仅能够掌握Spring RCP的关键技术点,还能够灵活运用这些知识解决实际项目中的问题,提升应用的用户体验和性能表现。无论是初学者还是有经验的开发者,都能从中获得宝贵的指导和灵感。

    基于Eclipse的Equinox框架开发OSGi Bundle应用

    【标题】基于Eclipse的Equinox框架开发OSGi Bundle应用 在Java世界中,OSGi(Open Services Gateway Initiative)是一种模块化系统,它允许开发者创建可独立更新和依赖管理的模块,即Bundle。Eclipse的Equinox是...

    java组态工具+RCP开发+GEF开发

    在Java中,我们常常借助于Eclipse平台的两个重要框架来实现这一目标:Rich Client Platform(RCP)和Graphical Editing Framework(GEF)。这两个框架为开发者提供了强大的工具,帮助他们构建出复杂且用户友好的应用...

    eclipse-rcp-2022-06-R-macosx-cocoa-x86_64.dmg

    A complete set of tools for developers who want to create Eclipse plug-ins, Rich Client Applications or Remote Application Platform (RCP+RAP), plus Maven and Gradle tooling, and an XML editor....

Global site tag (gtag.js) - Google Analytics