轻量级Java Web服务

时间:2014-04-23 01:34:00

标签: java web-services java-ee soap jms

我有Java EE应用程序(ear)在不同的JBoss实例和不同的硬件上运行。我想打电话给

  1. 一个应用程序到另一个服务器JBOSS。
  2. 相同的JBOSS,在两只耳朵之间。
  3. Same Server,介于两个JBOss之间。
  4. 通信数据类型可以是任何类型。例如; JSON或对象。我想知道我可以使用哪些轻量级的开源Java Web框架从一个调用到另一个?其中一些Here。但我没有任何经验。通常,使用SOAP和RESTful服务,它们有许多实现框架。

    请根据您的经验建议我了解哪些适用于我的要求的框架?让我来源解释任何比较。我担心的是,通信方法应该是轻量级的,应该支持传输任何类型的数据,不应该有太多的配置或标准。该框架应该支持简单地传输(所有通信都在我的应用程序中完成。因此不需要结构良好,标准化的重量配置)并且安全。它应该是Java。我使用Java 7。

5 个答案:

答案 0 :(得分:2)

根据我对你的情况的了解,我认为ESB对你的问题是一个很好的解决方案。

http://en.wikipedia.org/wiki/Enterprise_service_bus

来自WSO2的是一个非常轻量级的开源ESB,并且拥有一个良好的活跃社区。 http://wso2.com/products/enterprise-service-bus/

答案 1 :(得分:2)

这是典型的集成问题。对于集成,调解,代理等不同服务甚至传输数据,请使用Apache Camel。有关Camel的简短回答,请参阅What exactly is Apache Camel?

在Camel中,您可以使用Java DSL或XML Spring DSL定义路由。代理了一个Web服务here。使用XML Spring DSL,路由如下:

<route>
    <from uri="jetty:http://0.0.0.0:8080/myapp?matchOnUriPrefix=true"/>
    <to uri="jetty:http://realserverhostname:8090/myapp?bridgeEndpoint=true&amp;throwExceptionOnFailure=false"/>
</route>

使用Java DSL,这将成为:

from("jetty:http://0.0.0.0:8080/myapp?matchOnUriPrefix=true"
    .to("jetty:http://realserverhostname:8090/myapp?bridgeEndpoint=true&amp;throwExceptionOnFailure=false")

Camel支持许多不同的协议,例如JSM,SOAP WS,RESTful WS,普通HTTP,TCP。了解所有可能性https://camel.apache.org/components.html

下一个示例显示使用Restlet component定义RESTful服务器是多么容易:

from("restlet:http://localhost:8400/orders/{id}?restletMethod=post")
    .process(new Processor() {
        @Override
        public void process(final Exchange exchange) throws Exception {
            final String res = "received [" + exchange.getIn().getBody(String.class) + "] with order id = " + exchange.getIn().getHeader("id");
            exchange.getIn().setBody(res);
        }
   });

相应的客户端如下所示:

 from("direct:start")
     .setBody(constant("Hello, world!!"))
     .to("http://localhost:8400/orders/22?restletMethod=post")
     .log("order: direct start body result = ${bodyAs(String)}")

也就是说,Camel支持丰富的企业集成模式,如分路器,聚合器等,可以满足您的需求。有关详细信息,请查看http://camel.apache.org/enterprise-integration-patterns.html

您可以使用“普通”Java类来转换数据并将它们挂钩到路由中。除此之外,还有许多集成型转换器用于将一种数据类型转换为另一种数据类型。这些转换器可以轻松扩展。见https://camel.apache.org/type-converter.html

您可以使用Camel作为基本集成框架并添加例如JMS / ActiveMQ用于通信。但是,也可以使用ActiveMQ作为基础并添加Camel来转换数据,请参阅https://activemq.apache.org/broker-camel-component.html:“代理驼峰组件使这更容易 - 当消息在代理本身中移动时拦截消息,允许它们在它们被持久化到消息存储库或交付给最终消费者之前进行修改和操作。“但是,我更喜欢使用Camel作为基础并为异步通信添加JMS / ActiveMQ(例如,如果需要消息持久性或者如果通信必须在不同主机之间进行)。

Camel支持大量不同的协议和格式。但是,如果您不需要它们,则不必使用它们。如果需要,只需将依赖项添加到pom.xml即可。 Apache Camel是一个小型库(11.2 MB),具有最小的依赖性,可以轻松嵌入任何Java应用程序。 Camel独立运行,在Servlet引擎中运行,或者在诸如Karaf / ServiceMix / JBoss Fuse ESB的OSGI容器中运行。如果您的需求在增长,您可以从小规模开始,应用程序可以增长。

要开始使用Camel,请阅读Claus Ibsen的优秀书籍:http://www.manning.com/ibsen/

答案 2 :(得分:1)

你可以使用jax-ws来提供JBoss的web服务,并使用javax.xml.soap来调用它们。我不知道的是,如果它可以发送对象数据,也许你必须从xml端序列化并将其编码为base64字符串。

另一种方式可能是jms。

答案 3 :(得分:1)

如果此处列出的所有其他解决方案都不符合您的需求,您可以通过HTTP发送JSON或XML数据与应用程序进行交互。

Spark是一个Java的微型Web框架,可让您快速创建Web端点。

默认情况下,Spark在嵌入式服务器上运行,但它可以轻松地在现有的JBoss服务器上运行。 Here是我几个月前组建的一个示例,用于演示它是如何工作的,以及如何使它与JBoss一起工作。

您可以让每个需要接收数据的应用程序公开HTTP端点,并让调用应用程序发送简单的HTTP请求。

答案 4 :(得分:0)

简单而开放的胜利。您可以通过多种不同方式远程公开对象,但Java RMI和EJB将您限制为仅限Java的客户端。

最开放,最简单的方法是使用HTTP作为协议和Web服务,SOAP或REST(我的偏好)。这些将与任何客户端轻松交互,甚至是那些不是Java的客户端。客户不需要知道或关心您选择Java和JBOSS来实现服务器逻辑。