我想在Java / Spring / Hibernate中开发一个Web应用程序,作为我可以连接插件的业务平台(即CRM插件,ware插件,销售插件)。这些插件可能以树的方式依赖于其他插件。父项目将打包为 war ,具有所有基本配置和外观(Spring配置,CSS,脚本),随时可用的用户和组管理,安全设置等。
总而言之,我希望它的行为和看起来有点像Joomla,但是可以使用不同的工具为不同的目的构建。我对该项目有几个问题:
最后但并非最不重要的是,这是正确的方法,还是死路一条?为这些业务需求创建单独的Web应用程序会更好吗?
答案 0 :(得分:1)
有很多方法可以构建插件模块。 一些想法:
您可以将每个插件模块打包为jar,并在此jar的classpath根目录中,将spring配置文件与beans配置放在一起,这样如果您使用的是特定的插件。只需将此文件添加到web.xml中的contextConfigLocation参数,即可在Web应用程序上“打开”此包的bean:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:module1.xml
classpath:module2.xml
classpath:module3.xml
classpath:module4.xml
</param-value>
</context-param>
因此,您可以在Web应用程序中使用这些bean。另一种方法是使用更注释驱动的方法。或者你可以混合方法。
前段时间,我构建了一种方法,通过检测类路径中特定抽象类(契约)的所有实现,自动热检测(在执行时,无需重新启动应用程序)桌面应用程序中的插件。所以,我必须要做的就是建立一个新的插件,就是实现这个“契约”。我已经使用了一些“类加载器”的好东西来做到这一点。
在谈论“模块”时,您可能希望看到有关OSGi
的内容嗯......这些都是一些想法。我希望它有任何帮助。 ; - )
答案 1 :(得分:0)
我认为这是设计Web应用程序的好方法,具体取决于要求。我使用插件,因为我有几个客户端使用相同的代码库,具有不同的要求。如果你正在开发一个装置,我会说不要浪费你的时间。
现在为了方法。 “插件”是一个非常模糊的概念。我用过插件
现在的问题是,这是如何运作的。方法拦截器使用org.aopalliance.intercept.MethodInterceptor工作。后台处理器使用TimerTask。 Web应用程序中的其他视图使用Spring MVC路由。
我的插件打包为JAR,并在应用程序启动时作为Spring应用程序上下文发现。
这一切都很一般,但可能会给你一些想法。
答案 2 :(得分:0)
你知道任何开源的吗? 提供这样一个平台的项目 准备好了吗?
如果不是maven适用 管理那些插件?
是的,确实如此。看看AppFuse如何使用它。
打包的最佳方式是什么? 部署那些插件? 再次,检查一下Spring ROO或AppFuse是如何做到的。
希望有所帮助。
答案 3 :(得分:0)
*
最后但并非最不重要的是,这是正确的方式,还是死了 结束?为这些创建单独的Web应用程序会更好吗? 业务需求?
*
我在使用JPA进行区域模块化方面有负面经验。例如,@ Entity Customer包含在CRM模块中,但是从其他模块中大量使用。第一个自然想法一个模块=自己的持久性单元很难实现,JPA应该跨模块,模块化思想走向死胡同,模块不分离。
我使用了“在过程中和JAR中”的模块化,构建了一种结构,一些菜单/实体等属于较轻的“模块”