apache-camel #apachecamel

Similar documents
cocos2d-x #cocos2d-x

wix #wix

xslt #xslt

pthreads #pthreads

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

PowerPoint Presentation

VB.NETコーディング標準

V8.1新規機能紹介記事

ibm-bluemix #ibmbluemix

PowerPoint プレゼンテーション

Java演習(4) -- 変数と型 --

エレクトーンのお客様向けiPhone/iPad接続マニュアル

Microsoft PowerPoint ppt

iPhone/iPad接続マニュアル


. IDE JIVE[1][] Eclipse Java ( 1) Java Platform Debugger Architecture [5] 3. Eclipse GUI JIVE 3.1 Eclipse ( ) 1 JIVE Java [3] IDE c 016 Information Pr

インターネット接続ガイド v110

untitled

新・明解Java入門

A B 1: Ex. MPICH-G2 C.f. NXProxy [Tanaka] 2:

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

シミュレーションの簡単な例 GUI 無しのシミュレーションを作る GUI を作る パラメタを設定するデモンストレーションをする 2 オブジェクト指向プログラミング特論

WTM2019SingleSignOn

intra-mart im-JavaEE Framework

MIDI_IO.book

fx-9860G Manager PLUS_J

Java知識テスト問題

FC741E2_091201

ユニット・テストの概要

Exam : 1z0-809 日本語 (JPN) Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO 1 / 8 Get Latest & Valid 1z0-809-JPN Exam's Question and Answe

TestDesign for Web

A 28 TEL Take-Two Interactive Software and its subsidiaries. All rights reserved. 2K Sports, the 2K

コンテナでテストをまわせ! Java EE への自動テストの導入 1 小西高之 JBoss Technical Support Engineer Red Hat K.K.

Javaセキュアコーディングセミナー東京 第2回 数値データの取扱いと入力値の検証 演習解説

展開とプロビジョニングの概念

オブジェクト脳のつくり方

SonicWALL SSL-VPN 4000 導入ガイド

ScanFront300/300P セットアップガイド

,,,,., C Java,,.,,.,., ,,.,, i

137. Tenancy specific information (a) Amount of deposit paid. (insert amount of deposit paid; in the case of a joint tenancy it should be the total am

JAVA H13 OISA JAVA 1

SpringSecurity

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

早分かりS2Dao

Microsoft PowerPoint - Lecture_3

とても使いやすい Boost の serialization

Microsoft PowerPoint - グリッド協議会GT4演習資料_2007_配布用

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV


Program Design (プログラム設計)

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

tkk0408nari

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

X-Form Plug-in Guide

Xpand! Plug-In Guide

Contents Logging in 3-14 Downloading files from e-ijlp 15 Submitting files on e-ijlp Sending messages to instructors Setting up automatic

DDR3 SDRAMメモリ・インタフェースのレベリング手法の活用

text_08.dvi

Java - Visual Editor


Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx


DIGNO® ケータイ ユーザーガイド

Zinstall WinWin 日本語ユーザーズガイド

untitled


ユーザーズマニュアル

インターネットマガジン2001年4月号―INTERNET magazine No.75

JAVA とテンプレート

WEBシステムのセキュリティ技術

Seasar.NET入門

Gartner Day

ALG ppt

西川町広報誌NETWORKにしかわ2011年1月号

1 1 tf-idf tf-idf i

Adobe Acrobat DC 製品比較表

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

Using the Excel Exporter

Microsoft PowerPoint - chap10_OOP.ppt

PowerPoint プレゼンテーション

WARNING To reduce the risk of fire or electric shock,do not expose this apparatus to rain or moisture. To avoid electrical shock, do not open the cabi

基本操作ガイド

べリンガーB-CONTROL

untitled

スライド 1

基本情報STEP UP演習Java対策

Javaと マルチスレッド

操作ガイド(本体操作編)

Microsoft Word - Android_SQLite講座_画面800×1280

1 Dependency Injection glue glue glue glue glue GluonJ GluonJ glue Dependency Injection Aspect-Oriented Programming Meets Dependency Injection Rei Ish

Web Web Web Web i

ScanFront 220/220P 取扱説明書

ScanFront 220/220P セットアップガイド

PowerPoint プレゼンテーション

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

intra-mart Accel Platform — IM-BloomMaker プログラミングガイド   初版  

基本操作ガイド

Java (5) 1 Lesson 3: x 2 +4x +5 f(x) =x 2 +4x +5 x f(10) x Java , 3.0,..., 10.0, 1.0, 2.0,... flow rate (m**3/s) "flow

Transcription:

apache-camel #apachecamel

1 1: apache-camel 2 2 Examples 2 2 Maven 2 2 3 3 2: Apache-CamelSpringDBUnit 4 4 4 4 Examples 5 5 5 7 3: Camel + RedisPub / Sub 10 10 Examples 10 RedisPublisher 10 RedisSubscriber 10 11 11 ManagedCamel 12 14

You can share this PDF with anyone you feel could benefit from it, downloaded the latest version from: apache-camel It is an unofficial and free apache-camel ebook created for educational purposes. All the content is extracted from Stack Overflow Documentation, which is written by many hardworking individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official apache-camel. The content is released under Creative Commons BY-SA, and the list of contributors to each chapter are provided in the credits section at the end of this book. Images may be copyright of their respective owners unless otherwise specified. All trademarks and registered trademarks are the property of their respective company owners. Use the content presented in this book at your own risk; it is not guaranteed to be correct nor accurate, please send your feedback and corrections to info@zzzprojects.com https://riptutorial.com/ja/home 1

1: apache-camel をいめる Apache Camel は にエンタープライズののをにするフレームワークです そのコアでは ルーテ ィングエンジンエンジンビルダーとえることができます には ルートでシステムエンドポイントをすることができます これらのルートは のデータのメッセージをけれます Apache Camel フレームワークには スプリッタ アグリゲータ コンテンツベースのルーティン グなどの EIP エンタープライズパターンのなセットもまれています このフレームワークは Java アプリケーションのさまざまなスタンドアロン WildFly や Tomcat などのさまざまなアプリ ケーションサーバー またはなエンタープライズサービスバスにできるため フレームワークとみなすことができます フレームワークをいめるには のいずれかのでプロジェクトにするがあります 1. Maven 2. け 3. のブート 4. あなたのプロジェクトにい JAR ライブラリがされました Examples インストールまたはセットアップ な Camel ののにするな Maven Apache Camel をアプリケーションにみむもなの 1 つは Maven のをすることです のブロックを することで Maven は Camel のライブラリとをします <dependency> <groupid>org.apache.camel</groupid> <artifactid>camel-core</artifactid> <version>2.17.3</version> </dependency> け Apache Camel をアプリケーションにみむもうつのなは Gradle をするです のをするだけで Gradle は Camel ライブラリとそのをインポートします // https://mvnrepository.com/artifact/org.apache.camel/camel-core https://riptutorial.com/ja/home 2

compile group: 'org.apache.camel', name: 'camel-core', version: '2.17.3' のブート Camel 2.15 Apache Camel の Spring Boot をできるようになりました この Camel ライブラリと のいは それが Camel ルートのをむ のをすることです <dependency> <groupid>org.apache.camel</groupid> <artifactid>camel-spring-boot</artifactid> <version>${camel.version</version> <!-- use the same version as your Camel core version - -> </dependency> キャメルドメインの CamelのDSLDomain Specific Languageは Camelをのフレームワークからするの1つです のいくつかのフレームワークは XMLファイルのでDSLのもえていますが DSLはにカスタムベースのでした Camelは Java Scala Groovy XMLなどのプログラミングでのDSLをしています たとえば のリストにすように なファイルコピールートをさまざまなでできます Java DSL from("file:data/in").to("file:data/out"); Blueprint / Spring DSLXML <route> <from uri="file:data/inbox"/> <to uri="file:data/out"/> </route> スカラDSL from "file:data/inbox" -> "file:data/out" オンラインで apache-camel をいめるをむ https://riptutorial.com/ja/apachecamel/topic/3511/apache-camel をいめる https://riptutorial.com/ja/home 3

2: Apache-Camel および Spring および DBUnit を したのルートでのテスト き この wiki のポイントは Apache Camel をしてテストをするをすことです よりには これをすると のルートをからまでのデータベースのにかかわらずちげたり ルートのとのをしたり ヘッダーやがしいかどうかをテストすることができます がこれまでってきたプロジェクトでは xml のな Spring と DBUnit をってテストデータベースをし ています これがあなたにいくつかのリードをえることをっています パラメーター パラメータ / このはラクダのプロセッサーのであなたのルートの CamelContext ProducerTemplate AdviceWith WeaveById MockEndpoint テストでは ラクダのコンテキストをして コンテキストをでおよびします あなたのルートでメッセージをしたり でなをしたり ダミーのヘッダ / ボディをしたりすることができます のコンテキストでのルートをするのにちます のアドバイスのでされ あなたのルートのにるいをえます weavebytostring もえます モックエンドポイントは テストにしたポイントです あなたの weavebyid では あなたのルートにのをえることができ のルートにう のではなく mockenpoint にることができます こので メッセージ ステータスをすることができます... いくつかのはにはではありませんが のコードをするのにちます よりなをるためのリンクがいくつかあります AdviceWithとweaveById またはルートをトリガーするののについては のapache-camelの ドキュメントをてください このリンクをしてください ProducerTemplateのについては もうドキュメントをしてくださいこのリンクをしてくだ https://riptutorial.com/ja/home 4

さい すべてのラクダについてにするために Entrepriseインテグレーションパターンのなドキュメ ント こののテストは スタックのオーバーフローであっても つけるのはかなりしいです これはかなりですが をねるのをためらうことはありません おそらくはけることができます Examples キャメルルートの のルートにはながあります まず ImportDocumentProcessオブジェクトがデータベースにするかどうかをチェック し それをヘッダーとしてします に データベースにのImportDocumentProcessにリンクされている ImportDocumentTraitement をします このルートのコードはのとおりです @Component public class TestExampleRoute extends SpringRouteBuilder { public static final String ENDPOINT_EXAMPLE = "direct:testexampleendpoint"; @Override public void configure() throws Exception { from(endpoint_example).routeid("testexample").bean(testexampleprocessor.class, "getimportdocumentprocess").id("getimportdocumentprocess").bean(testexampleprocessor.class, "createimportdocumenttraitement").id("createimportdocumenttraitement").to("com.pack.camel.routeshowall=true&multiline=true"); ルートの ID はではありません で Bean をすることもできます しかし はあなたのルートがされ るにえて ID のはいとえることができるといます キャメルプロセッサの プロセッサには ルートでなメソッドだけがまれています いくつかのメソッドをむな Java Bean です プロセッサをして プロセスメソッドをオーバーライドすることもできます のコードをしてください @Component("testExampleProcessor") public class TestExampleProcessor { https://riptutorial.com/ja/home 5

private static final Logger LOGGER = LogManager.getLogger(TestExampleProcessor.class); @Autowired public ImportDocumentTraitementServiceImpl importdocumenttraitementservice; @Autowired public ImportDocumentProcessDAOImpl importdocumentprocessdao; @Autowired public ImportDocumentTraitementDAOImpl importdocumenttraitementdao; // ---- Constants to name camel headers and bodies public static final String HEADER_ENTREPRISE = "entreprise"; public static final String HEADER_UTILISATEUR = "utilisateur"; public static final String HEADER_IMPORTDOCPROCESS = "importdocumentprocess"; public void getimportdocumentprocess(@header(header_entreprise) Entreprise entreprise, Exchange exchange) { LOGGER.info("Entering TestExampleProcessor method : getimportdocumentprocess"); Utilisateur utilisateur = SessionUtils.getUtilisateur(); ImportDocumentProcess importdocumentprocess = importdocumentprocessdao.getimportdocumentprocessbyentreprise( entreprise); exchange.getin().setheader(header_utilisateur, utilisateur); exchange.getin().setheader(header_importdocprocess, importdocumentprocess); public void createimportdocumenttraitement(@header(header_entreprise) Entreprise entreprise, @Header(HEADER_UTILISATEUR) Utilisateur utilisateur, @Header(HEADER_IMPORTDOCPROCESS) ImportDocumentProcess importdocumentprocess, Exchange exchange) { LOGGER.info("Entering TestExampleProcessor method : createimportdocumenttraitement"); long nbimporttraitementbefore = this.importdocumenttraitementdao.countnumberofimportdocumenttraitement(); ImportDocumentTraitement importdocumenttraitement = this.importdocumenttraitementservice.createimportdocumenttraitement( entreprise, utilisateur, importdocumentprocess, "md5_fichier_example_test", "fichier_example_test.xml"); long nbimporttraitementafter = this.importdocumenttraitementdao.countnumberofimportdocumenttraitement(); exchange.getin().setheader("nbimporttraitementbefore", Long.valueOf(nbImportTraitementBefore)); exchange.getin().setheader("nbimporttraitementafter", Long.valueOf(nbImportTraitementAfter)); exchange.getin().setheader("importdocumenttraitement", importdocumenttraitement); // Rest of the code contains getters and setters for imported dependencies ここでうことはあまりありませんが たちはをってオブジェクトをあるパートからのパートにします これはがになプロセスをっているので のプロジェクトでわれるです https://riptutorial.com/ja/home 6

キャメルテストクラスの あなたのプロジェクトのにラクダテストサポートとラクテルテストサポートをすることをれないでください Maven ユーザーの をしてください <dependency> <groupid>org.apache.camel</groupid> <artifactid>camel-test</artifactid> <version>${camel.version</version> <scope>test</scope> </dependency> <dependency> <groupid>org.apache.camel</groupid> <artifactid>camel-test-spring</artifactid> <version>${camel.version</version> <scope>test</scope> </dependency> このクラスは サンプルルートでテストをトリガしてします これらのテストでは DBUnit を して のまたはののデータベースをするようにコンテキストをできるように データベースをシミュレートします まず でする Camel Integration Test クラスでのをするためにクラスをします @RunWith(CamelSpringRunner.class) @BootstrapWith(CamelTestContextBootstrapper.class) @ContextConfiguration(locations = { "classpath:/test-beans.xml" ) @DbUnitConfiguration(dataSetLoader = ReplacementDataSetLoader.class) @TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, DbUnitTestExecutionListener.class ) @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) public abstract class AbstractCamelTI { をれないようにするか DAO がしくされません つまり コンテキストにされているデータベー スをしないは DBUnit アノテーションをにできます な @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) しました そうすれば テスト ごとにラクダのコンテキストがリロードされます あなたはにルートのをにテストすることができます しかし にそれをむなら あなたはしたくないされたルートので remove をうがあります これはのテストではないとするもいれば しいだろう しかし のように あなたがリファクタリングするがあるなプロセッサをっているなら そこからすることができます のコードは テストクラスのをしていますのテストについては を @DatabaseSetup(value = { "/db_data/dao/common.xml", "/db_data/dao/importdocumentdaocommontest.xml" ) public class TestExampleProcessorTest extends AbstractCamelTI { https://riptutorial.com/ja/home 7

@Autowired protected CamelContext camelcontext; @EndpointInject(uri = "mock:catchtestendpoint") protected MockEndpoint mockendpoint; @Produce(uri = TestExampleRoute.ENDPOINT_EXAMPLE) protected ProducerTemplate template; @Autowired ImportDocumentTraitementDAO importdocumenttraitementdao; // -- Variables for tests ImportDocumentProcess importdocumentprocess; @Override @Before public void setup() throws Exception { super.setup(); importdocumentprocess = new ImportDocumentProcess(); //specific implementation of your choice のテストはルートののをトリガして mockendpoint くことになっているので ImportDocumentProcess がしくされ ヘッダにかれているかどうかをテストできます @Test public void processcorrectlyobtained_getimportdocumentprocess() throws Exception { camelcontext.getroutedefinitions().get(0).advicewith(camelcontext, new AdviceWithRouteBuilder() { ); @Override public void configure() throws Exception { weavebyid("getimportdocumentprocess").after().to(mockendpoint); // -- Launching the route camelcontext.start(); template.sendbodyandheader(null, "entreprise", company); mockendpoint.expectedmessagecount(1); mockendpoint.expectedheaderreceived(testexampleprocessor.header_utilisateur, null); mockendpoint.expectedheaderreceived(testexampleprocessor.header_importdocprocess, importdocumentprocess); mockendpoint.assertissatisfied(); camelcontext.stop(); のテストはのルートをトリガーします @Test public void traitementcorrectlycreated_createimportdocumenttraitement() throws Exception { camelcontext.getroutedefinitions().get(0).advicewith(camelcontext, new AdviceWithRouteBuilder() { https://riptutorial.com/ja/home 8

); @Override public void configure() throws Exception { weavebyid("createimportdocumenttraitement").after().to(mockendpoint); // -- Launching the route camelcontext.start(); Exchange exchange = new DefaultExchange(camelContext); exchange.getin().setheader(testexampleprocessor.header_entreprise, company); exchange.getin().setheader(testexampleprocessor.header_utilisateur, null); // No user in this case exchange.getin().setheader(testexampleprocessor.header_importdocprocess, importdocumentprocess); long numberoftraitementbefore = this.importdocumenttraitementdao.countnumberofimportdocumenttraitement(); template.send(exchange); mockendpoint.expectedmessagecount(1); mockendpoint.assertissatisfied(); camelcontext.stop(); long numberoftraitementafter = this.importdocumenttraitementdao.countnumberofimportdocumenttraitement(); assertequals(numberoftraitementbefore + 1L, numberoftraitementafter); のルートをのプロセスにリダイレクトすることもできます しかし は mockendpoint リダイレクトするがき mockendpoint あなたのとヘッダーでにテストをうことができるので もうしいです なこのでは ルートをして advicewith をするために のコードをしています camelcontext.getroutedefinitions().get(0).advicewith(camelcontext, new AdviceWithRouteBuilder() { [...] ); しかし にとしてされた ID でルートをすることはです camelcontext.getroutedefinition("routeid").advicewith(camelcontext, new AdviceWithRouteBuilder() { [...] ); はこのをくおめします なぜあなたのテストがしたのかをするのにくのをすることができますオンラインでApache-CamelおよびSpringおよびDBUnitをしたのルートでのテストをむ https://riptutorial.com/ja/apache-camel/topic/10630/apache-camelおよびspring-およびdbunit-をしたのルートでのテスト https://riptutorial.com/ja/home 9

3: Camel + Redis をした Pub / Sub サイトの producertemplate.asyncsendbody("direct:myprocedure", massagebody); ManagedCamel で "createproducer" をして producertemplate をする Examples RedisPublisher public class RedisPublisher extends RouteBuilder { public static final String CAMEL_REDIS_CHANNEL = "CamelRedis.Channel"; public static final String CAMEL_REDIS_MESSAGE = "CamelRedis.Message"; @Value("${redis.host") private String redishost; @Value("${redis.port") private int redisport; @Value("${redis.channel.mychannel") private String redischannel; private String producername; @Required public void setproducername(string producername) { this.producername = producername; @Override public void configure() throws Exception { from(producername).log(string.format("publishing with redis in channel: %s, massage body: ${body", redischannel)).setheader(camel_redis_channel, constant(redischannel)).setheader(camel_redis_message, body()).to(string.format("spring-redis://%s:%s?command=publish&redistemplate=#%s", redishost, redisport, ManagedCamel.REDIS_TEMPLATE)); RedisSubscriber public class RedisSubscriber extends RouteBuilder { @Value("${redis.host") private String redishost; @Value("${redis.port") private int redisport; @Value("${redis.channel.mychannel") https://riptutorial.com/ja/home 10

private String redischannel; private Object bean; private String method; @Required public void setbean(object bean) { this.bean = bean; @Required public void setmethod(string method) { this.method = method; @Override public void configure() throws Exception { from(string.format("springredis://%s:%s?command=subscribe&channels=%s&serializer=#%s", redishost, redisport, redischannel, ManagedCamel.REDIS_SERIALIZER)).log(String.format("Consuming with redis in channel: %s, massage body: ${body", redischannel)).process(exchange -> { ).bean(bean, String.format("%s(${body)", method)); されたのにあるメソッド メソッド は けったマッサージをします ののコンテキスト <bean id="managedcamel" class="com.pubsub.example.managedcamel" > <constructor-arg name="routes"> <list> <ref bean="redissubscriber"/> </list> </constructor-arg> </bean> <bean id="redissubscriber" class="com.pubsub.example.redissubscriber" > <property name="bean" ref="mybean"/> <property name="method" value="process"/> </bean> パブリッシャーのスプリングコンテキスト <bean id="managedcamel" class="com.pubsub.example.managedcamel" > <constructor-arg name="routes"> <list> <ref bean="redispublisher"/> </list> </constructor-arg> </bean> <bean id="redispublisher" class="com.pubsub.example.redispublisher" > <property name="producername" value="direct:myprocedure"/> </bean> https://riptutorial.com/ja/home 11

ManagedCamel public class ManagedCamel implements Managed { public static final String REDIS_TEMPLATE = "redistemplate"; public static final String LISTENER_CONTAINER = "listenercontainer"; public static final String REDIS_SERIALIZER = "redisserializer"; private DefaultCamelContext camelcontext; private List<RouteBuilder> routes; @Value("${redis.host") private String redishost; @Value("${redis.port") private int redisport; @Value("${redis.password") private String redispassword; public ManagedCamel(List<RouteBuilder> routes) throws Exception { this.routes = routes; @PostConstruct private void postinit() throws Exception { JndiRegistry registry = new JndiRegistry(); final StringRedisSerializer serializer = new StringRedisSerializer(); RedisTemplate<String, Object> redistemplate = getredistemplate(serializer); registry.bind(redis_template, redistemplate); RedisMessageListenerContainer messagelistenercontainer = new RedisMessageListenerContainer(); registry.bind(listener_container, messagelistenercontainer); registry.bind(redis_serializer, serializer); camelcontext = new DefaultCamelContext(registry); for (RouteBuilder routebuilder : routes) { camelcontext.addroutes(routebuilder); start(); private RedisTemplate<String, Object> getredistemplate(stringredisserializer serializer) { RedisTemplate<String, Object> redistemplate = new RedisTemplate<String, Object>(); redistemplate.setconnectionfactory(redisconnectionfactory()); redistemplate.setkeyserializer(new StringRedisSerializer()); redistemplate.setvalueserializer(serializer); redistemplate.setenabledefaultserializer(false); redistemplate.afterpropertiesset(); return redistemplate; private RedisConnectionFactory redisconnectionfactory() { final JedisConnectionFactory jedisconnectionfactory = new JedisConnectionFactory(); jedisconnectionfactory.sethostname(redishost); jedisconnectionfactory.setport(redisport); jedisconnectionfactory.setpassword(redispassword); jedisconnectionfactory.afterpropertiesset(); return jedisconnectionfactory; public void start() throws Exception { camelcontext.start(); https://riptutorial.com/ja/home 12

public void stop() throws Exception { camelcontext.stop(); public ProducerTemplate createproducer() { return camelcontext.createproducertemplate(); オンラインで Camel + Redis をした Pub / Sub をむ https://riptutorial.com/ja/apachecamel/topic/7105/camel-plus-redis をした pub---sub https://riptutorial.com/ja/home 13

クレジット S. No Contributors 1 apache-camel をいめ る Community, Michael Hoffman, Namphibian 2 Apache-CamelおよびSpringおよび DBUnitをしたのルートでのテスト DamienB, Flanfl, matthieusb 3 Camel + Redis をし た Pub / Sub Lior https://riptutorial.com/ja/home 14