【问题标题】:Business web application platform structure业务网络应用平台结构
【发布时间】:2011-03-05 09:11:47
【问题描述】:

我想用 Java/Spring/Hibernate 开发一个 Web 应用程序,作为我可以连接插件的业务平台(即 CRM 插件、ware 插件、销售插件)。这些插件可以以树的方式依赖于其他插件。父项目将被打包为 war,具有所有基本配置和外观(Spring 配置、CSS、脚本)、随时可用的用户和组管理、安全设置等。

总而言之,我希望它的行为和外观有点像 Joomla,但使用不同的工具构建用于不同的目的。我对那个项目有几个问题:

  1. 您知道有哪些开源项目可以提供这样的平台吗?
  2. 如果不是,Maven 是否适用于管理这些插件?
  3. 打包和部署这些插件的最佳方式是什么?

最后但并非最不重要的一点是,这是正确的方法,还是死路一条?为这些业务需求创建一个单独的网络应用程序会更好吗?

【问题讨论】:

    标签: java spring maven


    【解决方案1】:

    有很多方法可以构建插件模块。 一些想法:

    您可以将每个插件模块打包为一个 jar,并在该 jar 的类路径根目录中,放置一个带有 beans 配置的 spring 配置文件,这样当您使用特定插件时。您可以通过简单地将这个文件添加到 web.xml 中的 contextConfigLocation 参数来“打开”这个包的 bean 在 Web 应用程序上:

    <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

    嗯...这些是一些想法。我希望它以任何方式有所帮助。 ;-)

    【讨论】:

    • 是的,我想,我会采用这种方法。谢谢大家的回答
    【解决方案2】:

    我认为这是设计 Web 应用程序的好方法,具体取决于需求。我使用插件是因为我有几个客户使用具有不同要求的相同代码库。如果您正在开发一个安装,我会说不要浪费您的时间。

    现在是操作方法。 “插件”是一个非常模糊的概念。我用过插件

    • 拦截方法调用
    • 运行后台进程
    • 在我的 Web 应用程序中添加其他视图

    现在的问题是,这是如何工作的。方法拦截器使用 org.aopalliance.intercept.MethodInterceptor 工作。后台处理器使用 TimerTask。 Web 应用程序中的附加视图使用 Spring MVC 路由。

    我的插件被打包为 JAR,并在应用程序启动时作为 Spring 应用程序上下文被发现。

    这都是非常笼统的,但可能会给你一些想法。

    【讨论】:

      【解决方案3】:

      你知道任何开源的吗 提供这样一个平台的项目 准备好了吗?

      看看Spring Roo

      如果不是 maven 适用于 管理那些插件?

      是的,是的。看看AppFuse 是如何使用它的。

      最好的打包方式是什么? 部署那些插件? 再次检查 Spring ROO 或 AppFuse 是如何做到的。

      希望对您有所帮助。

      【讨论】:

        【解决方案4】:

        *

        最后但并非最不重要的一点是,这是正确的方法,还是死路一条 结尾?为这些人创建一个单独的网络应用程序会更好吗 业务需求?

        *

        我在使用 JPA 进行区域模块化方面有负面经验。例如@Entity Customer 包含在 CRM 模块中,但被其他模块集中使用。第一个自然idea one module = own persistence unit很难实现,JPA应该是跨模块的,模块化的想法已经走到了尽头,模块没有分离。

        我使用“in process & in JAR”的模块化,构建了某种结构,一些菜单/实体等属于较轻意义上的“模块”

        【讨论】:

          猜你喜欢
          • 2014-04-12
          • 1970-01-01
          • 1970-01-01
          • 2014-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多