【问题标题】:Integrating Java SE application as a service with Java EE application best practices将 Java SE 应用程序即服务与 Java EE 应用程序最佳实践集成
【发布时间】:2015-01-02 09:40:17
【问题描述】:

我刚刚开始从 Java SE 过渡到 EE,我想知道以下问题的最佳实践。

我有一个想要在线发布的 Java SE 应用程序。 web/EE 部分已经设置了 Windows7/Apache Tomcat 和标准 servlet/JSP。对于 Java 应用程序来说,它实际上是一个相互依赖的源文件的集合。

我的计划是创建一个可执行的 .jar 文件,该文件将由 servlet 调用,输出流和过滤后的错误流将移交给在线用户。

我想到的因素是(按优先顺序):

  • .jar 调用的开销
  • 因此,虽然它是一种学术工具,但流量处理量很大
  • 调用的安全性是结构化的用户输入,即 作为命令行参数传递给.jar(我说的是脚本 注入类型漏洞作为输入)
  • Java 应用程序的模块化可能会经历多次修订,因此如果应用程序和 Web 应用程序之间存在更简单的耦合,我会采用它而不需要太多上述开销

所以我的问题是上述计划是否正确?还有其他人可以想到我应该关注的其他任何因素吗?

任何输入或指针将不胜感激!

编辑:: 所以以前我用 WIn7/Apache HTTP/PHP 完成了这个项目,其中 PHP 将使用用户输入生成一个唯一的文件名,并将其发送到 jar 程序,并使用 exec 函数调用和文件名作为命令行参数。该程序将生成一个类似命名的输出文件,PHP 将获取该输出文件的内容并将其返回给用户。问题是每个 exec 调用都会实例化一个新的 JVM 实例,如果这个站点有很多用户,服务器就会抓取/崩溃处理这些请求。这就是我迁移到本地 Java 服务器的原因。我在这里也有同样的想法,只是我希望将程序作为一个单元(jar),以便任何新的修订版都更容易部署。现在这是一个暂定计划。这就是为什么我的问题要求在这种情况下如何进行的最佳实践。

【问题讨论】:

  • 听起来很疯狂。
  • @Christopher 我对 Java EE 完全陌生。这在我描述的环境中是不可能的吗?任何意见将不胜感激。
  • 您的用例似乎没有意义:您想获取一个可执行的 JAR 文件并在单独的进程中运行它,但您想连接 servlet 的 InputStream(来自客户端)进入外部应用程序的stdin 和外部应用程序的stdout 并将其通过管道传输到servlet 的OutputStream(返回客户端)?这似乎是一个不应该存在的丑陋混乱。您是否尝试使用命令行程序并使其可在 Internet 上运行?
  • @Christoper 我现在明白了。编辑以正确解释情况。
  • 这是一个需要通过现代前端(您的 Web 应用程序)访问的遗留系统(您的命令行 java 程序)的完美示例。因此,对于提议的 Java EE JSF 应用程序,您将构建一个包含命令(例如按钮)并显示结果(例如文本区域)和相关处理程序类(CDI 组件)的视图,该处理程序类使用 JAR 中的逻辑无需通过文件系统,而是直接提供任何需要的参数,接收结果并将其显示在视图中。如果它长时间运行,则异步执行并轮询结果或通过网络套接字推送。

标签: java tomcat jakarta-ee design-patterns scalability


【解决方案1】:

答案很简单:这不是正确的方法。

如果您有可用作 Java SE 代码的逻辑,例如作为 JAR 文件,在大多数情况下,您可以在 Java EE Web 应用程序中使用它。

因此,如果您已准备好 servlet,请让它使用您的 JAR 功能并在 JSP 中提供您的方法调用的结果。

附带说明:如果您开始学习 Java EE,请不要再为 JSP 烦恼 - 目前的默认视图技术是 Facelets(XHTML 页面),只需查看有关该主题的 Java EE 7 tutorial。 em>

【讨论】:

  • 谢谢。我想将其模块化,以便 Java prog 上的任何新修订。不需要对控制器逻辑进行任何更改。但是这个解决方案应该照顾那个用例。
猜你喜欢
  • 1970-01-01
  • 2011-02-18
  • 2012-12-16
  • 2010-11-03
  • 2013-10-07
  • 1970-01-01
  • 2018-06-04
  • 2015-02-03
  • 1970-01-01
相关资源
最近更新 更多