To programmatically subscribe to Event Hub or Event Analytics with your own Java class:
Write the Java code, get the libraries from the Event Hub and Event Analytics applications in the Infor Grid, download the simple SLF4J logger, compile, and run. I used this code for my demo of picking lists in Google Glass; I would not use this in a production environment.
DISCLAIMER: INFOR DOES NOT SUPPORT USAGE OF CUSTOM SUBSCRIBER OR PUBLISHER CLIENTS IN EXTERNAL APPLICATIONS. ONLY INFOR PROCESS AUTOMATION (IPA) AND M3 ENTERPRISE COLLABORATOR (MEC) ARE ALLOWED TO CONNECT TO THE EVENT HUB. USE AT YOUR OWN RISK. MAY VOID YOUR WARRANTY.
/* javac -cp eventhub-common-2.0.20.jar;eventhub-subscriber-2.0.20.jar;slf4j-api-1.6.2.jar TestEventSubscriber.java java -cp eventhub-common-2.0.20.jar;eventhub-subscriber-2.0.20.jar;slf4j-api-1.6.2.jar;hornetq-core-client-2.3.0.CR1.jar;hornetq-commons-2.3.0.CR1.jar;slf4j-simple-1.7.12.jar;jboss-logging-3.1.0.GA.jar;jboss-logmanager-1.2.2.GA.jar;netty-3.6.2.Final.jar;. TestEventSubscriber */ import java.util.Date; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.lawson.eventhub.ElementData; import com.lawson.eventhub.EventData; import com.lawson.eventhub.Subscription; import com.lawson.eventhub.Subscription.Builder; import com.lawson.eventhub.subscriber.EventReceiver; import com.lawson.eventhub.subscriber.Subscriber; import com.lawson.eventhub.subscriber.SubscriberException; public class TestEventSubscriber { static String name = "MyTest"; static String hostName = "host"; static int portNumber = 22110; static String subscription = "M3:OCUSMA:U"; // or EventAnalytics:something static Subscriber subscriber; static Logger log = LoggerFactory.getLogger(TestEventSubscriber.class); public static void main(String[] args) throws Exception { register(); Runtime.getRuntime().addShutdownHook(new Thread() { /* stop when CTRL+C */ public void run() { try { unregister(); } catch (Exception ex) { log.error("CTRL+C", ex); } } }); } public static void register() throws Exception { log.info("Registering..."); // create subscriber Map<String, String> params = new HashMap<String, String>(); params.put("subscriber-name", name); params.put("subscriber-persist", "false"); params.put("subscriber-server-address", hostName); params.put("subscriber-server-port", Integer.toString(portNumber)); subscriber = new Subscriber(params); // add subscription Subscription sub = Subscription.newBuilder(subscription).build(); subscriber.add(sub); // register receiver EventReceiver receiver = new TestEventReceiver(); subscriber.register(receiver); // probe log.info( "isActive: " + subscriber.isActive() + ", isConnected: " + subscriber.isConnected() + ", isRegistered: " + subscriber.isRegistered() + ", isFailed: " + subscriber.isFailed()); } public static void unregister() throws Exception { log.info("Unregistering..."); subscriber.unregister(); } } class TestEventReceiver implements EventReceiver { static Logger log = LoggerFactory.getLogger(TestEventReceiver.class); public boolean receiveEvent(EventData event) throws SubscriberException { log.info( "Subscription: " + event.getSubscription() + ", Publisher: " + event.getPublisher() + ", DocumentName: " + event.getDocumentName() + ", Operation: " + event.getOperation().character() + ", TrackingId: " + event.getTrackingId() + ", SentTimestamp: " + new Date(event.getSentTimestamp()).toString() + ", CONO: " + event.getElementValue("CONO")); for (ElementData element : event.getElements()) { log.info( "Name: " + element.getName() + ", OldValue: " + element.getOldValue() + ", Value: " + element.getValue()); } return true; } }
It will persist a file data/subscriber/delivered/MyTest.rcv
that contains a bunch of unique ids and that you can deserialize with a ConcurrentHashMap.
Thank you.