diff --git a/islandora-connector-broadcast/README.md b/islandora-connector-broadcast/README.md new file mode 100644 index 00000000..0e1471a8 --- /dev/null +++ b/islandora-connector-broadcast/README.md @@ -0,0 +1,17 @@ +# Islandora Connector Broadcast + +## Description + +This service takes an incoming message and broadcasts it to a list of queues/topics. The list of recipients is specified in the `IslandoraBroadcastRecipients` header as a comma separated list. + +## Configuration + +Once deployed, the incoming message stream can be configured by editing the `ca.islandora.alpaca.connector.broadcast.cfg` file in your Karaf installation's `etc` directory. + + input.stream=broker:queue:islandora-connector-broadcast + +For example, by changing `broker` to `activemq`, this service will attempt read messages from the ActiveMQ queue `islandora-connector-broadcast`. In theory, any broker technology supported by Camel should be supported, though ActiveMQ is the only one tested. + +## More Information + +For more information, please visit the [Apache Camel](http://camel.apache.org) documentation. diff --git a/islandora-connector-broadcast/build.gradle b/islandora-connector-broadcast/build.gradle new file mode 100644 index 00000000..adcc51eb --- /dev/null +++ b/islandora-connector-broadcast/build.gradle @@ -0,0 +1,29 @@ +apply plugin: 'osgi' + +description = 'Islandora CLAW Broadcaster' + +dependencies { + compile group: 'org.apache.camel', name: 'camel-core', version: camelVersion + compile group: 'org.apache.camel', name: 'camel-blueprint', version: camelVersion + compile group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion + testCompile group: 'org.apache.camel', name: 'camel-test-blueprint', version: camelVersion +} + +jar { + manifest { + description project.description + docURL project.docURL + vendor project.vendor + license project.license + + instruction 'Import-Package', "org.apache.camel;version=\"${camelVersionRange}\",${defaultOsgiImports}" + instruction 'Export-Package', 'ca.islandora.alpaca.connector.broadcast' + } +} + +artifacts { + archives (file('build/cfg/main/ca.islandora.alpaca.connector.broadcast.cfg')) { + classifier 'configuration' + type 'cfg' + } +} diff --git a/islandora-connector-broadcast/src/main/cfg/ca.islandora.alpaca.connector.broadcast.cfg b/islandora-connector-broadcast/src/main/cfg/ca.islandora.alpaca.connector.broadcast.cfg new file mode 100644 index 00000000..9c20cfbc --- /dev/null +++ b/islandora-connector-broadcast/src/main/cfg/ca.islandora.alpaca.connector.broadcast.cfg @@ -0,0 +1,4 @@ +# Incoming queue/topic on the broker of your choice. +# Replace the 'broker' prefix with the broker for your system. +# E.g. activemq, zeromq, etc... +input.stream=broker:queue:islandora-connector-broadcast diff --git a/islandora-connector-broadcast/src/main/java/ca/islandora/alpaca/connector/broadcast/BroadcastRouter.java b/islandora-connector-broadcast/src/main/java/ca/islandora/alpaca/connector/broadcast/BroadcastRouter.java new file mode 100644 index 00000000..7239ebbb --- /dev/null +++ b/islandora-connector-broadcast/src/main/java/ca/islandora/alpaca/connector/broadcast/BroadcastRouter.java @@ -0,0 +1,50 @@ +/* + * Licensed to Islandora Foundation under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * + * The Islandora Foundation licenses this file to you under the MIT License. + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/MIT + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ca.islandora.alpaca.connector.broadcast; + +import static org.apache.camel.LoggingLevel.INFO; + +import org.apache.camel.builder.RouteBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * A content router distributing messages to multiple endpoints. + * + * @author Daniel Lamb + */ +public class BroadcastRouter extends RouteBuilder { + + private static final Logger LOGGER = LoggerFactory.getLogger(BroadcastRouter.class); + + /** + * Configure the message route workflow. + */ + public void configure() throws Exception { + + // Distribute message based on configured header. + from("{{input.stream}}") + .routeId("MessageBroadcaster") + .description("Broadcast messages from one queue/topic to other specified queues/topics.") + .log(INFO, LOGGER, + "Distributing message: ${headers[JMSMessageID]} with timestamp ${headers[JMSTimestamp]}") + .recipientList(simple("${headers[IslandoraBroadcastRecipients]}")) + .ignoreInvalidEndpoints(); + } +} + diff --git a/islandora-connector-broadcast/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/islandora-connector-broadcast/src/main/resources/OSGI-INF/blueprint/blueprint.xml new file mode 100644 index 00000000..c2e250e5 --- /dev/null +++ b/islandora-connector-broadcast/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + ca.islandora.alpaca.connector.broadcast + + diff --git a/karaf/src/main/resources/features.xml b/karaf/src/main/resources/features.xml index 7f0c4652..5c2fa538 100644 --- a/karaf/src/main/resources/features.xml +++ b/karaf/src/main/resources/features.xml @@ -13,9 +13,20 @@ camel activemq-camel - mvn:ca.islandora.indexing/islandora-indexing-triplestore/${project.version} + mvn:ca.islandora.alpaca/islandora-indexing-triplestore/${project.version} - mvn:ca.islandora.indexing/islandora-indexing-triplestore/${project.version}/cfg/configuration + mvn:ca.islandora.alpaca/islandora-indexing-triplestore/${project.version}/cfg/configuration + + + + +
Distributes a message to a list of queues/topics.
+ + camel + + mvn:ca.islandora.alpaca/islandora-connector-broadcast/${project.version} + + mvn:ca.islandora.alpaca/islandora-connector-broadcast/${project.version}/cfg/configuration
diff --git a/settings.gradle b/settings.gradle index 54c1b360..e05f19d0 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,5 +1,7 @@ include ':islandora-karaf' include ':islandora-indexing-triplestore' +include ':islandora-connector-broadcast' project(':islandora-karaf').projectDir = "$rootDir/karaf" as File project(':islandora-indexing-triplestore').projectDir = "$rootDir/islandora-indexing-triplestore" as File +project(':islandora-connector-broadcast').projectDir = "$rootDir/islandora-connector-broadcast" as File