SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
Get Cooking with
Apache Camel
Cookbook of Tips and Tricks
Scott Cranton
@scottcranton
•  Red Hat Middleware (technical) sales
•  Over 5 years working with Camel
–  Joined FuseSource Feb, 2009
•  https://github.com/FuseByExample
•  https://github.com/CamelCookbook
Apache Camel Developer’s Cookbook
•  100+ Recipes
•  424 pages
•  Published Dec 2013
•  Camel 2.12.2
•  https://github.com/
CamelCookbook
Why a Camel Cookbook?
•  Help beginner to intermediate users get
productive by example with follow on references
•  Break common Camel tasks into Recipes
•  Each recipe contains:
•  Introduction
•  How to do it (task oriented)
•  How it works
•  There’s more
How Do I Control Route Startup Order?
•  Introduction
–  Sometimes order matters, and routes need to start and stop in a defined order
•  How to do it
–  Set route startupOrder attribute
–  XML DSL: <route startupOrder="20" routeId="myRoute">...</route>
–  Java DSL: from("direct:in").startupOrder(20).routeId("myRoute")...;
•  How it works
–  Routes started in ascending order, and stopped in descending order
•  http://camel.apache.org/configuring-route-startup-ordering-and-autostartup.html
•  There’s more
–  You can programmatically startup and shutdown routes in response to events
•  exchange.getContext().startRoute("myRoute");
Camel Cookbook Tasting Menu
•  Route Design
•  Routing messages (EIP)
•  Transactions
•  Unit Testing
•  Monitoring
•  Calling Camel Routes
Interconnecting Routes
Camel supports breaking routes up into
re-usable sub-routes, and
synchronously or asynchronously
calling those sub-routes.
Interconnecting Routes
Within
CamelContext
Within
JVM
Synchronous direct: direct-vm:
Asynchronous seda: vm:
Interconnecting Routes
CamelContext-1
from("activemq:queue:one").to("direct:one");
from("direct:one").to("direct-vm:two");
CamelContext-2
from("direct-vm:two").log("Direct Excitement!");
–  Run on same thread as caller
–  direct-vm within JVM, including other OSGi Bundles
Direct and Direct-VM
Interconnecting Routes
CamelContext-1
from("activemq:queue:one").to("seda:one");
from("seda:one").to("vm:two");
CamelContext-2
from("vm:two").log("Async Excitement!");
–  Run on different thread from caller
–  concurrentConsumers=1 controls thread count
–  vm within JVM, including other OSGi Bundles
SEDA and VM
Interconnecting Routes
from("activemq:queue:one").to("seda:one");
from("seda:one?multipleConsumers=true").log("here");
from("seda:one?multipleConsumers=true").log("and there");
–  Publish / Subscribe like capability
–  Each route gets its own copy of the Exchange
–  Multicast EIP better for known set of routes
–  https://issues.apache.org/jira/browse/CAMEL-6451
SEDA and VM
Wire Tap
To create an asynchronous path from
your main route. Useful for audit and
logging operations.
Wire Tap
from("direct:start")
.wiretap("direct:tap")
.to("direct:other");
from("direct:tap")
.log("something interesting happened");
from("direct:other")
.wiretap("activemq:queue:tap")
.to("direct:other");
–  Runs on different thread / thread pool
–  Default Thread Pool - initial 10; grows to 20
Wire Tap
from("direct:start")
.wiretap("direct:tap-mod")
.delay(constant(1000))
.log("Oops! Body changed unexpectedly");
from("direct:tap-mod")
.bean(BodyModifier.class, "changeIt"); // Modifies message body
–  Message, Header, and Properties passed by reference
Wire Tap
from("direct:start")
.wiretap("direct:tap-mod").onPrepare(new DeepCloningProcessor())
.delay(constant(1000))
.log("Yay! Body not changed.");
from("direct:tap-mod")
.bean(BodyModifier.class, "changeIt");
–  onPrepare calls Processor before wiretap endpoint
Throttler
For when you need to limit the number
of concurrent calls made a sequence of
actions. For example, limit calls to a
back-end ERP.
Throttler
from("direct:start")
.throttle(constant(5)) // max per period expression
.to("direct:throttled") // step(s) being throttled
.end() // end of step(s)
.to("direct:post-throttle");
–  Example limits to 5 messages per 1,000 ms (default)
–  Should use end() to delimit steps being throttled
Throttler
from("direct:start")
.throttle(header("message-limit")) // expression
.to("direct:throttled")
.end()
.to("direct:post-throttle");
–  Example throttles to value in header "message-limit"
–  Will use last value if Expression evaluates to null
Throttler
from("direct:start")
.throttle(constant(5)).timePeriodMillis(2000) // value in milliseconds
.to("direct:throttled")
.end()
.to("direct:post-throttle");
–  Example limits to 5 messages per 2,000 ms
Throttler
from("direct:start")
.throttle(constant(5)).asyncDelayed()
.to("direct:throttled")
.end()
.to("direct:post-throttle");
–  asyncDelayed() causes throttled requests to be queued for future
processing, releasing calling thread (non-blocking)
Transactions
For local transaction control within your
routes to commit data or rollback on
error. Includes fine grained support for
scoping of transactions.
Transactions
Setup Transaction manager reference (requires Spring).
<bean id="sql" class="org.apache.camel.component.sql.SqlComponent">
<property name="dataSource" ref="auditDataSource"/>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="auditDataSource"/>
</bean>
<bean id="PROPAGATION_REQUIRED" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
<property name="transactionManager" ref="transactionManager"/>
<property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
</bean>
Transactions
Mark a route as transacted. Will commit local transaction at route completion or
automatically rollback if an error is thrown and not handled.
from("direct:transacted")
.transacted()
.setHeader("message", body())
.to("sql:insert into audit_log (message) values(:#message)")
.to("mock:out");
Transactions
Can also explicitly scope transactions.
from("direct:policies")
.setHeader("message", body())
.policy("PROPAGATION_REQUIRED") // Transaction 1
.to("sql:insert into audit_log (message) values (:#message)")
.to("mock:out1")
.end()
.policy("PROPAGATION_REQUIRED") // Transaction 2
.to("sql:insert into messages (message) values (:#message)")
.to("mock:out2")
.end();
XSLT
Camel supports many different ways to
transform data, for example using XSLT
to transform XML.
XSLT
from("direct:start")
.to("xslt:books.xslt");
–  Example uses books.xslt on classpath: (default)
–  Also supports file: and http:
XSLT
from("direct:start")
.to("xslt:books.xslt?output=DOM");
–  output controls output data type
–  Supports: string (default), bytes, DOM, and file
–  output=file writes directly to disk; path must exist
–  File name controlled by header "CamelXsltFileName"
XSLT
from("direct:start").setHeader("myParamValue", constant("29.99")).to("xslt:books-with-param.xslt");
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="myParamValue"/>
<xsl:template match="/">
<books>
<xsl:attribute name="value">
<xsl:value-of select="$myParamValue"/>
</xsl:attribute>
<xsl:apply-templates select="/bookstore/book/title[../price>$myParamValue]">
<xsl:sort select="."/>
</xsl:apply-templates>
</books>
</xsl:template>
</xsl:stylesheet>
Mock Endpoints
Camel provides some very powerful
Unit Testing capabilities. Its
MockEndpoint class supports complex
expressions to validate your routes.
Mock Endpoints
from("direct:start")
.filter().simple("${body} contains 'Camel'")
.to("mock:camel")
.end();
public class ContentBasedRouterTest extends CamelTestSupport {
@Test
public void testCamel() throws Exception {
getMockEndpoint("mock:camel").expectedMessageCount(1);
template.sendBody("direct:start", "Camel Rocks!");
assertMockEndpointsSatisfied();
}
}
Mock Endpoints
MockEndpoint mockCamel = getMockEndpoint("mock:camel");
mockCamel.expectedMessageCount(2);
mockCamel.message(0).body().isEqualTo("Camel Rocks");
mockCamel.message(0).header("verified").isEqualTo(true);
mockCamel.message(0).arrives().noLaterThan(50).millis().beforeNext();
mockCamel.allMessages().simple("${header.verified} == true");
template.sendBody("direct:start", "Camel Rocks");
template.sendBody("direct:start", "Loving the Camel");
mockCamel.assertIsSatisfied();
Exchange exchange0 = mockCamel.assertExchangeReceived(0);
Exchange exchange1 = mockCamel.assertExchangeReceived(1);
assertEquals(exchange0.getIn().getHeader("verified"), exchange1.getIn().getHeader("verified"));
Mock Endpoints
from("direct:start").inOut("mock:replying").to("mock:out");
getMockEndpoint("mock:replying")
.returnReplyBody(SimpleBuilder.simple("Hello ${body}"));
getMockEndpoint("mock:out").expectedBodiesReceived("Hello Camel");
template.sendBody("direct:start", "Camel");
assertMockEndpointsSatisfied();
Mock Responding
Mock Endpoints
from("direct:start").to("activemq:out");
public class ContentBasedRouterTest extends CamelTestSupport {
@Override
public String isMockEndpoints() {
return "activemq:out";
}
@Test
public void testCamel() throws Exception {
getMockEndpoint("mock:activemq:out").expectedMessageCount(1);
template.sendBody("direct:start", "Camel Rocks!");
assertMockEndpointsSatisfied();
}
}
Auto Mocking
Naming your Routes in JMX
Camel by default exposes your routes
through JMX. You should provide
explicit names for your routes to make
it easier for yourself and others to
monitor.
Naming your Routes in JMX
from("direct:start")
.routeId("first-route")
.log("${body}")
.to("mock:result");
JMX Name
org.apache.camel:context=localhost/contextName,type=routes,name=first-route
•  By default, Camel will name "route-N"
•  It will use the route id if provided as part of the JMX name
POJO Producing
Camel’s ProducerTemplate is seen
mostly in Unit Tests, and it provides a
great way to interact with Camel from
your existing code.
POJO Producing
public class ProducePojo {
@Produce
private ProducerTemplate template;
public String sayHello(String name) {
return template.requestBody("activemq:sayhello", name, String.class);
}
}
–  Send (InOnly) or Request (InOut) to Endpoint or Route
POJO Producing
public interface ProxyPojo {
String sayHello(String name);
}
public class ProxyProduce {
@Produce(uri = "activemq:queue:sayhello")
ProxyPojo myProxy;
public String doSomething(String name) {
return myProxy.sayHello(name);
}
}
–  Proxy template Java interface to make use clearer
Parameter Binding
Camel was designed to work well with
calling POJOs. Parameter Binding allows
you to, within the route, map the
message to the method parameters.
This makes it even easier to call POJOs
from Camel.
Parameter Binding
public String myMethod(
@Header("JMSCorrelationID") String id,
@Body String message) {
...
}
public String myOtherMethod(
@XPath("/myDate/people/@id") String id,
@Body String message) {
...
}
Parameter Binding
public class MyBean {
public String sayHello(String name, boolean fanboy) {
return (fanboy) ? ("Hello iPhone") : ("Hello " + name);
}
}
from("direct:fanboy").bean(MyBean.class, "sayHello(${body}, true)");
from("direct:undecided")
.bean(MyBean.class, "sayHello(${body}, ${header.fanboy})");
–  Send (InOnly) or Request (InOut) to Endpoint or Route
Questions?
Apache Camel Developer’s Cookbook
•  100+ Recipes
•  424 pages
•  Published Dec 2013
•  Camel 2.12.2
•  https://github.com/
CamelCookbook

Weitere ähnliche Inhalte

Was ist angesagt?

Workshop apache camel
Workshop apache camelWorkshop apache camel
Workshop apache camel
Marko Seifert
 
Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju
Skills Matter
 
Apache camel overview dec 2011
Apache camel overview dec 2011Apache camel overview dec 2011
Apache camel overview dec 2011
Marcelo Jabali
 
Using Ruby on Rails with legacy Oracle databases
Using Ruby on Rails with legacy Oracle databasesUsing Ruby on Rails with legacy Oracle databases
Using Ruby on Rails with legacy Oracle databases
Raimonds Simanovskis
 

Was ist angesagt? (20)

Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
 
Ruby off Rails (japanese)
Ruby off Rails (japanese)Ruby off Rails (japanese)
Ruby off Rails (japanese)
 
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
 
Apache Camel for Devclub.eu
Apache Camel for Devclub.euApache Camel for Devclub.eu
Apache Camel for Devclub.eu
 
#30.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#30.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#30.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#30.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScript
 
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
 
Workshop apache camel
Workshop apache camelWorkshop apache camel
Workshop apache camel
 
Building and managing java projects with maven part-III
Building and managing java projects with maven part-IIIBuilding and managing java projects with maven part-III
Building and managing java projects with maven part-III
 
Introduction to Node.JS Express
Introduction to Node.JS ExpressIntroduction to Node.JS Express
Introduction to Node.JS Express
 
Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju
 
Os Furlong
Os FurlongOs Furlong
Os Furlong
 
Apache camel overview dec 2011
Apache camel overview dec 2011Apache camel overview dec 2011
Apache camel overview dec 2011
 
Using Ruby on Rails with legacy Oracle databases
Using Ruby on Rails with legacy Oracle databasesUsing Ruby on Rails with legacy Oracle databases
Using Ruby on Rails with legacy Oracle databases
 
Advanced moduledevelopment d6_slideshare
Advanced moduledevelopment d6_slideshareAdvanced moduledevelopment d6_slideshare
Advanced moduledevelopment d6_slideshare
 
Uniface Lectures Webinar - Application & Infrastructure Security - Hardening ...
Uniface Lectures Webinar - Application & Infrastructure Security - Hardening ...Uniface Lectures Webinar - Application & Infrastructure Security - Hardening ...
Uniface Lectures Webinar - Application & Infrastructure Security - Hardening ...
 
Express JS
Express JSExpress JS
Express JS
 
Os Pruett
Os PruettOs Pruett
Os Pruett
 
Azure Day Reloaded 2019 - ARM Template workshop
Azure Day Reloaded 2019 - ARM Template workshopAzure Day Reloaded 2019 - ARM Template workshop
Azure Day Reloaded 2019 - ARM Template workshop
 

Andere mochten auch

SG 09 Patrones de Integración Empresarial Apache Camel
SG 09 Patrones de Integración Empresarial Apache CamelSG 09 Patrones de Integración Empresarial Apache Camel
SG 09 Patrones de Integración Empresarial Apache Camel
Domingo Suarez Torres
 

Andere mochten auch (10)

Simplify your integrations with Apache Camel
Simplify your integrations with Apache CamelSimplify your integrations with Apache Camel
Simplify your integrations with Apache Camel
 
Microservices with Apache Camel
Microservices with Apache CamelMicroservices with Apache Camel
Microservices with Apache Camel
 
SG 09 Patrones de Integración Empresarial Apache Camel
SG 09 Patrones de Integración Empresarial Apache CamelSG 09 Patrones de Integración Empresarial Apache Camel
SG 09 Patrones de Integración Empresarial Apache Camel
 
Fusesource camel-persistence-part1-webinar-charles-moulliard
Fusesource camel-persistence-part1-webinar-charles-moulliardFusesource camel-persistence-part1-webinar-charles-moulliard
Fusesource camel-persistence-part1-webinar-charles-moulliard
 
Apache Camel
Apache CamelApache Camel
Apache Camel
 
Apache Camel - Parte II
Apache Camel - Parte IIApache Camel - Parte II
Apache Camel - Parte II
 
Microservices with Apache Camel, Docker and Fabric8 v2
Microservices with Apache Camel, Docker and Fabric8 v2Microservices with Apache Camel, Docker and Fabric8 v2
Microservices with Apache Camel, Docker and Fabric8 v2
 
Developing Microservices with Apache Camel
Developing Microservices with Apache CamelDeveloping Microservices with Apache Camel
Developing Microservices with Apache Camel
 
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO DevOps with ActiveMQ, Camel, Fabric8, and HawtIO
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO
 
Aktualny stan social media
Aktualny stan social mediaAktualny stan social media
Aktualny stan social media
 

Ähnlich wie Cooking with Apache Camel: Tips and Tricks - DevNation 2014

Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix
Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMixEasy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix
Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix
elliando dias
 
Camel manual-2.11.0
Camel manual-2.11.0Camel manual-2.11.0
Camel manual-2.11.0
sharonv1
 
Writing Continuous Applications with Structured Streaming Python APIs in Apac...
Writing Continuous Applications with Structured Streaming Python APIs in Apac...Writing Continuous Applications with Structured Streaming Python APIs in Apac...
Writing Continuous Applications with Structured Streaming Python APIs in Apac...
Databricks
 

Ähnlich wie Cooking with Apache Camel: Tips and Tricks - DevNation 2014 (20)

Camel as a_glue
Camel as a_glueCamel as a_glue
Camel as a_glue
 
Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix
Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMixEasy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix
Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix
 
Scala active record
Scala active recordScala active record
Scala active record
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomy
 
[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기
 
Riding Apache Camel
Riding Apache CamelRiding Apache Camel
Riding Apache Camel
 
Red Hat Agile integration Workshop Labs
Red Hat Agile integration Workshop LabsRed Hat Agile integration Workshop Labs
Red Hat Agile integration Workshop Labs
 
Continuous Application with Structured Streaming 2.0
Continuous Application with Structured Streaming 2.0Continuous Application with Structured Streaming 2.0
Continuous Application with Structured Streaming 2.0
 
DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...
DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...
DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...
 
Integration made easy with Apache Camel
Integration made easy with Apache CamelIntegration made easy with Apache Camel
Integration made easy with Apache Camel
 
Liquibase migration for data bases
Liquibase migration for data basesLiquibase migration for data bases
Liquibase migration for data bases
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator
 
Scala Frustrations
Scala FrustrationsScala Frustrations
Scala Frustrations
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 
Camel manual-2.11.0
Camel manual-2.11.0Camel manual-2.11.0
Camel manual-2.11.0
 
Integrating Microservices with Apache Camel
Integrating Microservices with Apache CamelIntegrating Microservices with Apache Camel
Integrating Microservices with Apache Camel
 
Writing Continuous Applications with Structured Streaming Python APIs in Apac...
Writing Continuous Applications with Structured Streaming Python APIs in Apac...Writing Continuous Applications with Structured Streaming Python APIs in Apac...
Writing Continuous Applications with Structured Streaming Python APIs in Apac...
 
Null Bachaav - May 07 Attack Monitoring workshop.
Null Bachaav - May 07 Attack Monitoring workshop.Null Bachaav - May 07 Attack Monitoring workshop.
Null Bachaav - May 07 Attack Monitoring workshop.
 
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディングXitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
 
Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014
 

Kürzlich hochgeladen

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Kürzlich hochgeladen (20)

Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 

Cooking with Apache Camel: Tips and Tricks - DevNation 2014