轻量级Java Web服务

Light Weight Java Web Services

我有JavaEE应用程序(EAR)运行在单独的JBOSS实例和不同的硬件上。我想打电话给

  • 一个应用程序到另一个应用程序,位于另一个服务器jboss中。
  • 同样的JBoss,在两个耳朵之间。
  • 相同的服务器,在两个JBoss之间。
  • 通信数据类型可以是任何类型。例如,JSON或对象。我想知道什么是轻量级的、开源的Java Web框架,我可以用来从一个调用到另一个?这里有一些。但我没有他们的经验。通常使用SOAP和RESTful服务,它们有许多实现框架。

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


    这是一个典型的集成问题。对于集成、中介、代理等不同的服务,甚至传输数据,请使用ApacheCamel。简而言之,什么是骆驼,看看阿帕奇骆驼到底是什么?

    在Camel中,您可以使用Java DSL或XML Spring DSL来定义路由。这里描述了代理Web服务。使用XML Spring DSL,路径如下:

    1
    2
    3
    4
    <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,这将成为:

    1
    2
    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、plain-http、tcp。查看https://camel.apache.org/components.html了解所有可能性。

    下一个示例向您展示了使用restlet组件定义restful服务器有多简单:

    1
    2
    3
    4
    5
    6
    7
    8
    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);
            }
       });

    对应的客户机如下:

    1
    2
    3
    4
     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:"broker camel组件使这变得更容易——它在消息通过代理本身时截取消息,允许在它们被持久化之前对其进行修改和操作。但是,我更喜欢使用camel作为基础,并为异步通信添加jms/activemq(例如,如果需要消息持久性,或者必须在不同的主机之间进行通信)。

    camel支持大量不同的协议和格式。但是,如果你不需要的话,你不必使用它们。如果需要,只需将依赖项添加到您的pom.xml中即可。Apache CAMEL是一个小的库(11.2 MB),具有最小的依赖性,便于在任何Java应用程序中嵌入。camel在servlet引擎或OSGi容器(如karaf/servicemix/jboss fuse esb)中独立运行。如果您的需求不断增长,您可以从小处着手,应用程序也可以不断增长。

    要开始使用骆驼,请阅读克劳斯·易卜生的优秀著作:http://www.manning.com/ibsen/。


    从我对您的情况的理解来看,我认为ESB将是解决您的问题的好方法。

    http://en.wikipedia.org/wiki/enterprise_service_总线

    来自wso2的是一个相当轻的开源ESB,并且有一个很好的活跃社区。http://wso2.com/products/enterprise-service-bus/


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

    SCAPK是一个Java的Micro Web框架,它可以让您快速创建Web端点。

    默认情况下,Spark在嵌入式服务器上运行,但它可以很容易地在现有的JBoss服务器上运行。这是几个月前我整理的一个示例,用来演示它是如何工作的,以及如何让它与JBoss一起工作的。

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


    您可以使用JAXWS提供JBoss中的WebService,并使用javax.xml.soap调用它们。我不知道是否可以发送对象数据,也许您必须从XML端序列化,然后将其编码为base64字符串发送到XML端。

    另一种方法可能是JMS。


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

    最开放、最简单的方法是使用HTTP作为协议和Web服务,无论是SOAP还是REST(我的首选)。这些将很容易与任何客户端交互,即使那些不是Java的。客户端不需要知道或不关心您选择Java和JBOSS来实现服务器逻辑。