Java EE和应用程序服务器 - 我该怎么办?

时间:2009-05-11 09:47:15

标签: java java-ee jms jndi

我决定现在是时候挖掘整个Java EE的东西了。我在Java SE中使用EE一些技术,如JPA或JMS,但我仍然在使用Java SE,我相信Java EE和应用服务器将解决我的一些问题。

但是:在网上阅读了一些文章之后我还有一些问题。

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

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

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

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

的问候, POSIX

PS:

第四:似乎EJB不允许对文件做任何事情,因此Java EE似乎不是接收文件的服务的选项,将它们推送到不同的系统并希望它们写入Socket(参见问题1) )?

5 个答案:

答案 0 :(得分: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是一个很好的技术选择:)

答案 1 :(得分:0)

Here是对EJB 1.1规范的限制。

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

  1. 我相信EJB可以在远程计算机上打开一个套接字,但我会说打开套接字的操作太低了。我想考虑将socket作为另一个EJB做的事情暴露给你。
  2. MDB只是一个在特定主题或队列中注册的侦听器。它没有说任何关于发送的内容。如果您的客户端知道如何将消息发送到队列,则可能。他们只需知道队列URL并能够创建连接。
  3. 管理员设置连接池,JNDI名称等 - 一切。他们使用app服务器的管理控制台来完成它。

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

  1. 对文件执行任何操作都违反了EE规范(以确保EE应用程序是可移植的和可分发的)。但是,因为它只是普通的Java代码,所以yopu可以选择做任何你想做的事情。只要您了解目标环境的外观(例如系统供内部使用),我就会毫不犹豫地修改文件,因为规范是这样说的。

答案 4 :(得分:0)

  1. 在像Tomcat这样的应用服务器中(可能是其他人,但我从未使用过它们),您不仅可以在收到请求时执行操作,还可以在服务器启动时执行操作(包括启动长时间运行的线程)。基本上你可以使用“普通”Java做任何事情。实际上,如果只包含一段在服务器启动时调用相应main()的代码,您可以在应用程序服务器中放置一个普通的Java应用程序。