Notes: Module 11: Mule 3 Fundamentals: Connecting to Additional Resources

- Connect to SaaS applications
- Connect to files
- Poll resources
- Connect to JMS queues
- Discover and install connectors not bundled with Anypoint Studio

11-1) Connecting to SaaS Applications (Salesforce)

Walkthrough 11-1: Connect to a Saas application (Salesforce)
- Use the Salesforce connector to retrieve accounts for a postal code
- Use the Query Builder to write a query

Image: Add Saleforce connector to canvas and Salesforce libraries get added too (also added to POM file in Maven)

Many operations are available with the Salesforce connector.

11-2) The File Connector

Gives Mule applications the ability to read/write files in the local file system:
- Read input files
- Create new files
- Copy (backup) files
- Append to existing files
- Read periodically and delete/move/leave once processed

By default it uses streaming:
- Payload is a FileInputStream
- Streams are closed by transformers reading the input stream

Can turn off streaming:
- Payload is a byte array

Connector configuration:
- Not required (standalone)
- Use for reusability and setting properties

File connector as outbound endpoint:
- Passes files to the connected file system
- File name can be set at runtime

Walkthrough 11-2: Connect to a file (CSV)
- Add and configure a File endpoint to watch an input directory, read the contents of any added files, and then rename and move the files
- Use DataWeave to convert a CSV file to a string
- Add a CSV file to the input directory and watch it renamed and moved
- Restrict the type of file read
- Add payload metadata to a file endpoint

We have an input and output folder under:


Image: Configuring the File connector

Use regex to search for just CSV say.
Use ‘Move to Pattern’ to rename with say .backup.
Use Transform.

11-3) Polling Resources

Some connectors use or can use a polling process to actively retrieve messages e.g. File, FTP, SMTP.
For other message processors, use a Poll scope element to actively call a resource at regular intervals.

Image: Polling Information (Frequency is milliseconds)

Use a watermark to only retrieve newly created or updated data.
- The value must persist across flows:
--- Mule uses a build-in object store for persistent storage and exposes the value as a flow variable
----- Saved to file for embedded Mule and standalone Mule runtime
----- Saved to data storage for CloudHub
----- Saved to shared distributed memory for clustered Mule runtimes

Walkthrough 11-3: Poll a resource
- Create a flow with a Poll scope as the message source
- Poll a database every 5 seconds for records with a specific postal code
- Use a poll watermark to track the ID of the latest record retrieved
- Use the watermark to only retrieve new records with that postal code

Image: Configuring Poll Scope and Watermark

Image: Configuring pollDatabaseFlow

Image: Prompting to clear the watermark

11-4) Connecting to JMS (Java Messaging Service) Queues

JMS is an API for enabling applications to communicate through the exchange of messages, it provides a standard interface for creating/sending/receiving messages. Supports two messaging models:

1) Queues: PTP (point-to-point)
One-to-one! A sender delivers messages to a queue and a single receiver pulls the message off. The receiver does not need to be listening at the time the message is sent.

2) Topics: Pub-Sub (publish/subscribe)
One-to-many! A publisher sends a message to a topic and all active subscribers of the topic receive the message. Subscribers not actively listening will miss the published message (unless messages are made durable).

The Mule JMS connector can connect to any JMS messaging service that implements JMS spec.

Supported JMS providers:
- Out-of-the-box support for ActiveMQ and WebLogic JMS.
- Others (see the documentation) are supported by a generic JMS or custom JMS configuration.

Walkthrough 11-4: Connect to a JMS queue (ActiveMQ)
- Create a flow accessible at ‘http://localhost:8081/jms’
- Add and configure an Active MQ connector
- Use a JMS endpoint to retrieve messages from a JMS topic
- Add messages to the topic using a web form
- Use a JMS endpoint to send messages to a JMS topic

Image: Connect to a JMS queue

General recommendation: do not use the ALL jar library; use just what you need in your application (to avoid bloat).

Image: Configuration of JMS connectors

Configuration of Logger: message: #[payload]
Configuration of Set Payload: value:
#[message.InboundProperties.’http.query.params’.name] : [message.InboundProperties.’http.query.params’.messageBody]

Image: Using the Mule JMS HTTP app in Postman

11-5) Discovering and using additional connectors

Anypoint Exchange:

11-6) Introducing Anypoint Connector DevKit for creating custom connectors

You can create custom connectors with Anypoint Studio and Anypoint Connector DevKit.
Note: Use Maven for development and building.