【问题标题】:Best way to consume http resource from EJB or Java EE webapp从 EJB 或 Java EE webapp 使用 http 资源的最佳方式
【发布时间】:2014-04-11 08:20:48
【问题描述】:

我有一个在 Glassfish4 容器中运行的带有 jsf2、ejb3.1、jpa 等的 java ee 7 应用程序。

在提交 facelet 时,我想调用外部 http 资源(很可能使用 apache http 客户端)。响应将是文本响应,我需要对其进行解析,然后再执行一些数据库操作。

我的第一个想法是从 ejb 调用它,但由于 clint 可能会产生线程,所以这不是一个好主意。我还听说过以不产生线程的方式限制 httpClient 的方法,例如使用 HttpConnectionManager,不要使用超时等。但是我想我会失去一些性能。

最终可以使用/触发 httpClient 的异步 ejb 方法怎么样?

实现这一目标的最佳方法是什么?

我应该如何管理连接?

【问题讨论】:

  • 您是否要消耗资源?或者调用一些方法?您的详细信息有点稀疏。
  • 我正在尝试从我使用 https 调用的另一台服务器获取纯文本响应。解析响应后,我需要提取数据并更新一些数据库表。
  • 我不明白为什么您不能在提交的业务代码中使用 HttpClient 来使用该站点(可能是 EJB 或 CDI bean)。如果这是一个提交后花费太长时间并因此打扰用户的问题,我会将其委托给后台作业(例如异步 EJB)。
  • @Geziefer ,这正是我想实现的。问题在于 ejb 的每次调用,我将创建一个连接并关闭它。而且我将无法使用 httpClient 超时功能,因为它会创建线程。我想探索一些更好的方法来做到这一点。

标签: java jakarta-ee httpclient ejb-3.0


【解决方案1】:

为什么不像这个简单的例子那样使用 JAX-RS 客户端:

 Client client = ClientBuilder.newClient();
 String content = client.target("http://www.google.de")
      .request(MediaType.TEXT_HTML)
      .get(String.class);

更多信息在Java EE 7 tutorial

【讨论】:

  • 其实我不太熟悉。它可以使用证书链和私钥处理自定义客户端安全性吗?
  • 您可以通过多种方式保护客户端通信 - 查看 Jersey documentation,它是 JAX-RS 的参考实现。
猜你喜欢
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 2019-07-08
  • 2017-05-14
相关资源
最近更新 更多