最近项目中方法用到了一些新的东西,由于之前没有用到过,现在总结一下,方便以后查阅,本篇文章介绍ultraESB,接下来的文章会介绍JsonSchema,JsonSchamaValidator,JsonPath以及如何在spring项目中更方便地使用反射机制

ultraESB是我们项目中采用的一个开源的ESB实现,主要目的是为了依据数据库表提供一些REST查询接口,以及代理和整合其他的一些webservice和REST接口,ultraESB的主要优点是开源,配置简单,功能比较丰富,同时还提供了一个基于JMX的管理控制台,可以动态地启动和停止某些服务而不影响其他的服务。

由于官网下载编译好的包会有问题(点击了按钮之后没有任何反应),所以下边提供了源码的托管地址,可以直接下载源代码,然后用maven来进行编译

源码地址:https://bitbucket.org/adroitlogic/ultraesb/src

与项目的集成:ultraESB可以作为一个web项目进行单独部署(在web.xml里边配置spring的相关Listener等,在spring配置文件里定义各个Rest接口,代理的webservice接口等等),或是与我们的项目集成在一起(要求项目支持spring,各个rest接口和代理的webservice等还是在spring的配置文件中进行定义,需要将ultraESB依赖的jar包引入项目中)

下边是一个demo的配置(我们选择将ultraESB的相关配置放在一个独立的spring配置文件里),包括了数据源配置和基于数据库表提供的REST接口

以及对webservice接口进行proxy

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:u="http://www.adroitlogic.org/ultraesb"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.adroitlogic.org/ultraesb http://schemas.ultraesb.org/ultraesb-2.0.xsd">
<bean id="ultra-config" class="org.adroitlogic.ultraesb.core.ConfigurationImpl">
<property name="environment">
<bean class="org.adroitlogic.ultraesb.api.Environment">
<constructor-arg name="name" value="path"/>
</bean>
</property>
</bean>
<bean id="fileCache" class="org.adroitlogic.ultraesb.core.PooledMessageFileCache">
<constructor-arg type="int" value="20"/>
</bean> <bean id="http-8280" class="org.adroitlogic.ultraesb.transport.http.HttpNIOListener">
<constructor-arg ref="fileCache"/>
<property name="port" value="8280"/>
<!--配置默认路径-->
<property name="defaultContextPath" value="/service/"/>
<property name="requestFilters">
<list>
<bean class="org.adroitlogic.ultraesb.transport.http.ServiceResourceRequestFilter">
<property name="resourcePrefix" value="http://localhost:8280"/>
</bean>
</list>
</property>
</bean>
<!-- proxy其他接口的时候用来发送http请求,若不加上则不会向所proxy的接口发送请求-->
<bean id="http-sender" class="org.adroitlogic.ultraesb.transport.http.HttpNIOSender">
<constructor-arg ref="fileCache"/>
</bean> <!--Demonstrates a basic query-only JSON data service. This only supports GET method, and is able to return one
or all rows from a table using the specified queries-->
<!-- pds数据表对应的接口proxy -->
<u:proxy id="pdsRestService">
<u:transport id="http-8280">
<u:property name="ultra.transport.url" value="path*"/>
</u:transport>
<u:target>
<u:inSequence>
<u:java><![CDATA[
mediation.getJSONSupport().processBasicJSONDataServiceRequest(msg, "pdsJsonSvc", "dataSource_rest");
]]></u:java>
</u:inSequence>
</u:target>
</u:proxy>
<!-- 数据表对应接口的查询条件定义-->
<bean id="jsonSvc" class="org.adroitlogic.ultraesb.core.helper.BasicJSONDataService" init-method="init">
<property name="queryMap">
<map>
<!--注意,若前缀相同,更长的URL应该写在前边-->
<entry key="/contract/{code:VARCHAR}/reports" value="SELECT * from t1 where code =:code"/>
<entry key="/contract/{code:VARCHAR}" value="SELECT * from t2 where code= :code"/>
</map> </property>
</bean> <!--这里proxy的id对应最终提供的接口的URL中/service/之后的部分-->
<!-- 代理webservice-->
<u:proxy id="webServiceURL">
<u:transport id="http-8280">
<u:property name="ultra.http.wsdl_url"
value="http://192.168.1.1:7780/orabpel/sc/SB_SC_CMS_InquiryContractApprovalInfoSrv/1.0?wsdl"/>
</u:transport> <u:target>
<u:inDestination>
<!-- 实际URL-->
<u:address>http://192.168.1.1:7780/orabpel/sc/SB_SC_CMS_InquiryContractApprovalInfoSrv/1.0</u:address>
</u:inDestination>
<u:outDestination>
<u:address type="response"/>
</u:outDestination>
</u:target>
</u:proxy> <!--数据源配置(名称无所谓)-->
<bean id="dataSource_rest" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.data.driverClassName}"/>
<property name="url" value="${jdbc.data.url}"/>
<property name="username" value="${jdbc.data.username}"/>
<property name="password" value="${jdbc.data.password}"/>
<property name="maxActive" value="${jdbc.data.maxActive}"/>
<property name="minIdle" value="${jdbc.data.minIdle}"/>
<property name="maxIdle" value="${jdbc.data.maxIdle}"/>
</bean>
<!-- JMX监控-->
<bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean" depends-on="registry">
<property name="objectName" value="connector:name=iiop"/>
<property name="serviceUrl" value="${esb.jmx.url}"/>
<property name="threaded" value="true"/>
<property name="daemon" value="true"/>
</bean>
<bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
<property name="port" value="1099"/>
</bean>
</beans>

访问,在地址栏输入:

http://localhost:8280/service/path/contract/参数

http://localhost:8280/service/path/contract/参数/reports

即可访问配置的两个rest接口

访问代理的webservice 的地址:

http://localhost:8280/service/path/webServiceURL

总结一下最近用到的技术(1)--ultraESB的更多相关文章

  1. 关于解决python线上问题的几种有效技术

    工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...

  2. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  3. 本人提供微软系.NET技术顾问服务,欢迎企业咨询!

    背景: 1:目前微软系.NET技术高端人才缺少. 2:企业很难直接招到高端技术人才. 3:本人提供.NET技术顾问,保障你的产品或项目在正确的技术方向. 技术顾问服务 硬服务项: 1:提供技术.决策. ...

  4. 分布式锁1 Java常用技术方案

    前言:       由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.所以自己结合实际工作中的一些经验和网上看到的一些资 ...

  5. 【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡

    一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务 ...

  6. 探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密

    下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问 ...

  7. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  8. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  9. Java数据库连接技术——JDBC

    大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...

随机推荐

  1. memcached监控工具

    最简单和最直接的方式是在启动memcached的时候加入-vv参数,从而在控制台打印每次客户端的请求和相应,这非常适合开发.另外一种较为直接的方式是通过telnet进行查看,例如:若server为本机 ...

  2. iptables规则备份和恢复 firewalld的9个zone firewalld关于zone的操作 firewalld关于service的操作

    iptables规则备份和恢复 保存和备份iptables规则Service iptables save //会把规则保存到/etc/sysconfig/iptables把iptables规则备份到m ...

  3. 原来找字也可以这样用ElseIf FindStr 手机按键精灵 跟大漠的区别

     原来找字也可以这样用ElseIf FindStr(646, 1109, 776, 1261, "公告小叉", "FFFFFF-333333", 0.9, in ...

  4. kafka学习之-集群配置及安装

    1.软件版本 kafka2.10_0.9.0.0 zookeeper_3.4.6 2.集群节点 一共有3台机器. 192.168.14.100 slave-01 192.168.14.105 slav ...

  5. 为Hadoop集群选择合适的硬件配置

    随着Apache Hadoop的起步,云客户的增多面临的首要问题就是如何为他们新的的Hadoop集群选择合适的硬件. 尽管Hadoop被设计为运行在行业标准的硬件上,提出一个理想的集群配置不想提供硬件 ...

  6. Java编程思想学习笔记——字符串

    前言 字符串操作是计算机程序设计中最常见的行为. 不可变String String对象是不可变的 重载"+"与StringBuilder String对象是不可变的,可以给Stri ...

  7. Node.js之操作Mongodb

    // mongoose 链接 var mongoose = require('mongoose'); var db = mongoose.createConnection('mongodb://127 ...

  8. Java 连接 Access数据库方式

    import <a href="http://lib.csdn.net/base/java" class='replace_word' title="Java 知识 ...

  9. Oracle12c 在 Ubuntu 12.04 ~ 18.04 的安装注意事项

    必须的注意点: 1:/bin/sh 必须指向 bash or ksh 2:/usr/lib64 可以忽略的事情: 1:gcc 版本无所谓 2:libstdc++5 无需安装 3:libaio 版本无所 ...

  10. ActiveMQ的消息存储方式

    1. 队列存储        采取先进先出模式,同一时间,消息只会发送给某一个消费者,只有当该消息被消费并告知已收到时,它才能在代理的存储中被删除.        对于持久性订阅来说,每一个消费者都会 ...