4

我决定是时候深入研究 Java EE 的全部内容了。我在 Java SE 中使用 EE 一些技术,例如 JPA 或 JMS,但我仍然在使用 Java SE,我相信 Java EE 和应用程序服务器会解决我遇到的一些问题。

但是:在阅读了网络上的一些文章后,我仍然有一些问题。

第一:我是否仅限于请求响应应用程序?我有一个通过 HTTP 提供 XML 文档的应用程序。所有交付的对象都被添加到一个队列中,该队列将在不同的线程中分派。对此对象进行了一些验证,包括打开远程机器的套接字(我听说不允许 EJ-Beans 这样做,这是真的吗?)。那么,是否可以在应用程序服务器中执行此操作?

第二:我知道有消息驱动的 bean,是否可以从应用程序服务器外部将 JMS 消息发送到 MDB?我有一个发送 JMS 消息的服务,但作为遗留系统运行,而不是在同一个应用程序服务器内。

第三:系统管理员或用户如何配置我的应用程序?我知道在应用程序服务器中配置了一些诸如数据库连接之类的东西,我的应用程序可以通过 JNDI 查找它们或通过 DI 获取它们。但是应用程序特定的配置呢?

是的,这些都是非常愚蠢的问题,但也许有人有时间向我解释所有这些东西是如何工作的。:)

问候, Posix

PS:

4th:似乎EJB不允许对文件做任何事情,所以Java EE对于接收文件的服务似乎没有选择,将它们推送到不同的系统并希望它们写入套接字(见问题1)?

4

5 回答 5

2

我可以说在您的情况下可以毫无疑问地使用 Java EE。让我更深入地研究您的具体问题:

  1. 您可以从 EJB 打开套接字连接。没有什么可以阻止你这样做。但是,不建议对 Java EE 应用程序进行这种操作。在我看来,更好的选择是实现 Java EE 连接器 (JCA),它可以管理与您的专有系统的套接字连接池。这是按照规范实现这种集成的模型方式。

  2. 是的!完全可以接收从外部应用程序/系统(AS 外部)发送的消息。这是使用消息传递集成的主要思想:) 在许多情况下,作为 Java EE 应用程序的应用程序通过 MDB 从 JMS 通道接收消息,但 JMS 只是一个 API,可以由任何消息传递系统(例如 IBM MQ)实现。在此架构中,外部系统将 MQ 消息放入队列中,而您的 Java EE 应用程序正在监听队列,通过 JMS API 接收消息!

  3. 一般来说,Application Server 为管理员提供了很好的工具来管理 Java EE 资源,即数据源、JMS 连接工厂、JMS 目标、JTA 事务管理器等。如果您需要能够更改特定 Java EE 应用程序的能力,那么最好的选择似乎是 JMX . 只需实现一些 MBean,将它们导出到嵌入在 Application Server 中的 JMX 服务器,就完成了。这项任务在 JBoss 中确实是微不足道的,但如今大多数现代应用程序服务器都提供了广泛的 JMX 功能。

  4. 乍一看,EJB 似乎不是处理文件的最佳选择。但是请记住,您的 EJB 的实现仍然是用纯 Java 编写的,因此没有什么能阻止您读取/流式传输文件等。我有大型 Java EE 应用程序的经验,这些应用程序将大文件作为输入文件处理,并且可以向您保证 Java EE 是一个不错的技术选择 :)

于 2009-05-18T11:50:56.410 回答
0
  1. 对文件做任何事情都违反了 EE 规范(以确保 EE 应用程序是可移植和可分发的)。然而,由于这只是简单的 Java 代码,yopu 可以选择做任何你想做的事情。只要您知道目标环境的外观(例如系统供内部使用),我会毫不犹豫地修改文件,因为规范是这样说的。
于 2009-05-12T11:26:52.063 回答
0

以下是 EJB 1.1 规范的限制。

以下是我对您的问题的看法:

  1. 我相信 EJB 可以在远程机器上打开套接字,但我会说打开套接字的操作级别太低。我会考虑将套接字为您所做的任何事情公开为另一个 EJB。
  2. MDB 只是向特定主题或队列注册的侦听器。它没有说任何关于发送的内容。如果您的客户知道如何将消息发送到队列,这是可能的。他们只需要知道队列 URL 并能够创建连接。
  3. 管理员设置连接池、JNDI 名称等 - 一切。他们使用应用服务器的管理控制台来执行此操作。
于 2009-05-11T09:56:13.830 回答
0
  1. 在像 Tomcat 这样的应用程序服务器中(可能还有其他应用程序服务器,但我从未使用过它们),您不仅可以在收到请求时执行操作,还可以在服务器启动时执行操作(包括启动长时间运行的线程)。基本上你可以用“普通”Java 做任何你能做的事情。事实上,如果你只包含一段在服务器启动时调用适当的 main() 的代码,你就可以将一个普通的 Java 应用程序放在应用程序服务器中。
于 2009-05-12T11:56:11.003 回答
0

我建议将每种技术应用于您当前感到疼痛的适当点。关于你的具体观点,

  1. 在 EE 上下文中,您可以将消息添加到 JMS 队列中,该队列具有可以执行实际处理的 MDB。关于 HTTP 请求/响应生命周期的管理,您可以像现在一样管理它,或者使用现有的库来为您做。通过迁移到 EE 应用服务器,您将允许应用服务器管理线程、事务等,而不必手动管理。

  2. 正如 duffymo 所说,MDB 负责接收消息,它们不关心消息的来源。

  3. 系统管理员可以按照 duffymo 的说明配置应用服务器。此外,您可以将 JMX bean 公开给其他系统或最终用户,以允许他们根据需要配置服务。

于 2009-05-11T20:56:27.210 回答