Configuring the Custom Event Bean Component Configuration File
16.1 Overview of Custom Spring Beans
A Spring bean is a Plain Old Java Objects POJO managed by the Spring framework. You register a Spring bean in the EPN assembly file using the standard bean element. A Spring bean is not a type of stage: it cannot be monitored by the Oracle CEP monitoring framework, cannot use the configuration metadata annotations, and cannot be set to record and play-back events that pass through it. To add a POJO to your Oracle CEP application: ■ Use a Spring bean for legacy integration to Spring. ■ Use an event bean to actively use the capabilities of the Oracle CEP server container. For more information, see Chapter 15, Configuring Custom Event Beans .16.1.1 Spring Bean Event Sources and Event Sinks
Standard Spring beans can be event sources, event sinks, or both. Event sources generate events, event sinks receive events.16.1.1.1 Spring Beans as Event Sources
You specify that a standard Spring bean component in your EPN is an event source by implementing the com.bea.wlevs.ede.api.StreamSource or RelationSource API. The bean may also optionally implement the various lifecycle interfaces, such as InitializingBean, DisposableBean, and the active interfaces, such as RunnableBean. If a Spring-bean implements Runnable but not RunnableBean, Oracle CEP does not run it in a thread. This is different behavior from an event bean. The Spring bean event source can make use of the configuration metadata annotations, such as Prepare, Rollback, and Activate. You register the Spring bean in the EPN assembly file in the standard way using the bean element. For example: 16-2 Oracle Complex Event Processing Developers Guide bean id=bean class=com.acme.BeanSource In this example, the Java class BeanSource.java implements the com.bea.wlevs.ede.api.StreamSource or RelationSource API.16.1.1.2 Spring Beans as Event Sinks
You specify that a standard Spring bean component in your EPN is an event sink by implementing the com.bea.wlevs.ede.api.StreamSink or RelationSinkn API. The bean may also optionally implement the various lifecycle interfaces, such as InitializingBean, DisposableBean, and the active interfaces, such as RunnableBean. If a Spring-bean implements Runnable but not RunnableBean, Oracle CEP does not run it in a thread. This is different behavior from an event bean. The Spring bean event source can make use of the configuration metadata annotations, such as Prepare, Rollback, and Activate. You register the Spring bean in the EPN assembly file in the standard way using the bean element. You can then specify this bean as an event sink of some other stage in the EPN. You reference event sinks in the EPN assembly file using the wlevs:listener element: wlevs:channel id=S2 advertise=true event-type=StockEvent wlevs:listener ref=bean wlevs:source ref=cacheProcessor wlevs:channel bean id=bean class=com.bea.wlevs.example.cachecql.Bean In this example, the Java class Bean.java implements the com.bea.wlevs.ede.api.StreamSink or RelationSink API.16.2 Implementing a Custom Spring Bean
The following procedure describes the typical steps for creating a custom event bean. To implement a custom event bean: 1. Program the custom event bean Java class. If your custom event bean is an event source, see Section 16.2.1, Implementing a Custom Spring Bean as an Event Source. If your custom event bean is an event sink, see Section 16.2.2, Implementing a Custom Spring Bean as an Event Sink. If your custom event bean is both an event source and event sink, then see both sections. 2. Update the EPN assembly file with custom event bean and custom event bean factory if used registration info. See Section 16.3, Configuring the Custom Spring Bean EPN File. 3. Optionally extend the configuration of the custom event bean if its basic one is not adequate. See Chapter 19, Extending Component Configuration. Configuring Custom Spring Beans 16-316.2.1 Implementing a Custom Spring Bean as an Event Source
The following example shows a custom Spring bean class as an event source ; see the explanation after the example for coding guidelines that correspond to the Java code in bold. package com.acme; import com.bea.wlevs.ede.api.StreamSender; import com.bea.wlevs.ede.api.StreamSource; import com.bea.wlevs.ede.api.RunnableBean; public class SpringBeanSource implements RunnableBean, StreamSource { public void setEventSender StreamSender streamSender { ... } public void run { ... } public synchronized void suspend throws Exception { ... } } Follow these guidelines when programming the custom Spring bean Java class; code snippets of the guidelines are shown in bold in the preceding example: ■ Import the interfaces and classes of the Oracle CEP API: import com.bea.wlevs.ede.api.StreamSender; import com.bea.wlevs.ede.api.StreamSource; import com.bea.wlevs.ede.api.RunnableBean; Because the custom Spring bean is an event source it must implement the StreamSource interface. If you want the custom Spring bean to run in a thread, also implement RunnableBean. The StreamSender interface sends event types to the next component in your application network. For full details of these APIs, see Oracle Fusion Middleware Java API Reference for Oracle Complex Event Processing. ■ The custom Spring bean class must implement the StreamSource and RunnableBean interfaces because it is an event source and will run in its own thread: public class HelloWorldAdapter implements RunnableBean, StreamSource { The StreamSource interface provides the StreamSender that you use to send events. ■ Because the custom Spring bean implements the RunnableBean interface, your adapter must then implement the run method: public void run {... This is where you should put the code that reads the incoming data, such as from a market feed, and convert it into an Oracle CEP event type, and then send the event to the next component in the network. Refer to the documentation of your data feed provider for details on how to read the incoming data. See Section 24.2.2.2, Accessing Third-Party JAR Files for information about ensuring you can access the vendor APIs if they are packaged in a third-party JAR file. 16-4 Oracle Complex Event Processing Developers Guide ■ Because the custom Spring bean implements StreamSource, you must implement the setEventSender method, which passes in the StreamSender that you use to send events: public void setEventSenderStreamSender sender { ... ■ If, as is typically the case, your custom Spring bean implements SuspendableBean, you must implement the suspend method that stops the adapter when, for example, the application is undeployed: public synchronized void suspend throws Exception { ...16.2.2 Implementing a Custom Spring Bean as an Event Sink
The following sample code shows a Spring bean from HelloWorld application that acts as an event sink; see the explanation after the example for the code shown in bold: package com.bea.wlevs.example.helloworld; import com.bea.wlevs.ede.api.StreamSink; import com.bea.wlevs.event.example.helloworld.HelloWorldEvent; public class HelloWorldBean implements StreamSink { public void onInsertEventObject event { if event instanceof HelloWorldEvent { HelloWorldEvent helloWorldEvent = HelloWorldEvent event; System.out.printlnMessage: + helloWorldEvent.getMessage; } } } The programming guidelines shown in the preceding example are as follows: ■ Your bean must import the event type of the application, which in the HelloWorld case is HelloWorldEvent: import com.bea.wlevs.event.example.helloworld.HelloWorldEvent; ■ Your bean must implement the com.bea.wlevs.ede.api.StreamSink interface: public class HelloWorldBean implements StreamSink {... ■ The StreamSink interface has a single method that you must implement, onInsertEventjava.lang.Object, which is a callback method for receiving events. The parameter of the method is an Object that represents the actual event that the bean received from the component that sent it the event: public void onInsertEventObject event ■ The data type of the events is determined by the event type you registered in the EPN assembly file of the application. In the example, the event type is HelloWorldEvent; the code first ensures that the received event is truly a HelloWorldEvent: if event instanceof HelloWorldEvent { HelloWorldEvent helloWorldEvent = HelloWorldEvent event; This event type is a JavaBean that was configured in the EPN assembly file as shown: Configuring Custom Spring Beans 16-5 wlevs:event-type-repository wlevs:event-type type-name=HelloWorldEvent wlevs:class com.bea.wlevs.event.example.helloworld.HelloWorldEvent wlevs:class wlevs:event-type wlevs:event-type-repository See Section 4.3, Creating EPN Assembly Files for procedural information about creating the EPN assembly file, and Appendix C, Schema Reference: EPN Assembly spring-wlevs-v11_1_1_3.xsd for reference information. ■ Events are instances of the appropriate JavaBean, so you access the individual properties using the standard getXXX methods. In the example, the HelloWorldEvent has a property called message. You access this property using method getMessage: System.out.printlnMessage: + helloWorldEvent.getMessage; For complete API reference information about the Oracle CEP APIs described in this section, see the Oracle Fusion Middleware Java API Reference for Oracle Complex Event Processing.16.3 Configuring the Custom Spring Bean EPN File
The custom event bean and custom event bean factory if used must be registered in the EPN assembly file, as discussed in the following sections: ■ Section 16.3.1, Declaring the Custom Spring Bean Components in your Application For a complete description of the configuration file, including registration of other components of your application, see Section 4.3, Creating EPN Assembly Files.16.3.1 Declaring the Custom Spring Bean Components in your Application
In the EPN assembly file, you use the bean element to declare a custom Spring bean as a component in the event processor network. For example: bean id=recplayEventSink class=com.bea.wlevs.example.recplayRecplayEventSink beanParts
» Oracle Fusion Middleware Online Documentation Library
» Adapter Components of the Oracle CEP Event Processing Network
» Channel Processor Components of the Oracle CEP Event Processing Network
» Event Bean Components of the Oracle CEP Event Processing Network
» Spring Bean Cache Components of the Oracle CEP Event Processing Network
» Table Nested Stages Components of the Oracle CEP Event Processing Network
» Foreign Stages Components of the Oracle CEP Event Processing Network
» Streams and Relations Transmitting Events in the EPN: Stream and Relation Sources and Sinks
» Transmitting Events in the EPN: Examples
» EPN Assembly File Overview of the Oracle CEP Programming Model
» Component Configuration Files Overview of the Oracle CEP Programming Model
» High Availability and Scalability
» Oracle CEP calls the ResumableBean.beforeResume method on all
» For each bean that implements RunnableBean, Oracle CEP starts it running in a
» Application state is now RUNNING.
» User Action: Uninstall Application
» User Action: Update Application
» User Action: Calling Methods of Stream and Relation Sources and Sinks
» Oracle CEP APIs Overview of the Oracle CEP Programming Model
» Creating an Oracle CEP Application
» Static Resource Names Static Resource Injection
» Dynamic Resource Names Static Resource Injection
» Dynamic Resource Injection Dynamic Resource Lookup Using JNDI
» Next Steps Oracle Fusion Middleware Online Documentation Library
» Event Type Instantiation and Immutability
» Event Types Specified as JavaBean or Java Class
» Event Types Specified as java.util.Map Event Types Specified as a Tuple
» Event Types for use With a Database Table Source
» Event Types for use With the csvgen Adapter
» Event Type and Serialization Creating Oracle CEP Event Types
» How to Create an Oracle CEP Event Type as a JavaBean Using the Event Type Repository Editor
» How to Create an Oracle CEP Event Type as a JavaBean Manually
» How to Create an Oracle CEP Event Type as a Tuple Using the Event Type Repository Editor
» How to Create an Oracle CEP Event Type as a Tuple Manually
» How to Create an Oracle CEP Event Type as a Java Class Manually
» How to Create an Oracle CEP Event Type as a java.util.Map
» Using an Event Type Builder Factory
» Sharing Event Types Between Application Bundles
» Installing the Latest Oracle CEP IDE for Eclipse
» Installing the Oracle CEP IDE for Eclipse Distributed With Oracle CEP
» Configuring Eclipse Oracle Fusion Middleware Online Documentation Library
» How to Create an Oracle CEP Project
» Oracle CEP Project Overview Select File New Other.
» How to Export an Oracle CEP Project
» In the Binary Build area, check the resources you want exported with your
» How to Add a Standard JAR File to an Oracle CEP Project
» How to Export a Package How to Import a Package
» How to Create a Remote Oracle CEP Server and Server Runtime
» How to Create an Oracle CEP Server Runtime
» How to Start a Local Oracle CEP Server
» How to Deploy an Application to an Oracle CEP Server
» How to Configure Connection and Control Settings for Oracle CEP Server
» How to Configure Domain Runtime Settings for Oracle CEP Server
» How to Start the Oracle CEP Visualizer from Oracle CEP IDE for Eclipse
» Right-click a server in the Servers view and select Debug.
» How to Open the EPN Editor from a Project Folder
» How to Open the EPN Editor from a Context or Configuration File
» Flow Representation Filtering EPN Editor Overview
» Zooming Layout Showing and Hiding Unconnected Beans
» Printing and Exporting to an Image Configuration Badging
» Link Specification Location Indicator
» Nested Stages EPN Editor Overview
» Event Type Repository Editor
» Hyperlinking in Component Configuration and EPN Assembly Files
» Hyperlinking in Oracle CQL Statements
» Type the keyboard short cut Ctrl-Alt-T.
» Right-click on an empty portion of the EPN Editor surface and select New from
» Laying Out Nodes Renaming Nodes Deleting Nodes
» Conversion Between JMS Messages and Event Types
» JMS Service Providers Outbound JMS Adapter
» How to Configure a JMS Adapter Using the Oracle CEP IDE for Eclipse
» How to Configure a JMS Adapter Manually
» How to Configure a JMS Adapter for Oracle WebLogic Server JMS Manually
» How to Configure a JMS Adapter for Tibco EMS JMS Manually
» How to Create a Custom Converter for the Inbound JMS Adapter
» How to Create a Custom Converter for the Outbound JMS Adapter
» How to Encrypt Passwords in the JMS Adapter Component Configuration File
» JMS Inbound Adapter EPN Assembly File Configuration
» JMS Outbound Adapter EPN Assembly File Configuration
» JMS Inbound Adapter Component Configuration
» JMS Outbound Adapter Component Configuration
» Local Publishing Overview of the Built-In Pub-Sub Adapter for Publishing
» Remote Publishing Overview of the Built-In Pub-Sub Adapter for Publishing
» Overview of the Built-In Pub-Sub Adapter for Subscribing
» Converting Between JSON Messages and Event Types
» How to Configure an HTTP Pub-Sub Adapter Using the Oracle CEP IDE for Eclipse
» How to Configure an HTTP Pub-Sub Adapter Manually
» HTTP Pub-Sub Adapter for Publising EPN Assembly File Configuration
» HTTP Pub-Sub Adapter for Subscribing EPN Assembly File Configuration
» HTTP Pub-Sub Adapter for Publising Component Configuration
» HTTP Pub-Sub Adapter for Subscribing Component Configuration
» Channels as Streams Channels Representing Streams and Relations
» Channels as Relations Channels Representing Streams and Relations
» System-Timestamped Channels Application-Timestamped Channels
» Controlling Which Queries Output to a Downstream Channel: selector
» Batch Processing Channels Overview of Channel Configuration
» EventPartitioner Channels Overview of Channel Configuration
» How to Configure a System-Timestamped Channel Using Oracle CEP IDE for Eclipse
» How to Configure an Application-Timestamped Channel Using Oracle CEP IDE for Eclipse
» How to Create a Channel Component Configuration File Manually
» Channel Component Configuration File Channel EPN Assembly File
» How to Configure an Oracle CQL Processor Using Oracle CEP IDE for Eclipse
» How to Create an Oracle CQL Processor Component Configuration File Manually
» How to Configure an Oracle CQL Processor Table Source Using Oracle CEP IDE for Eclipse
» Oracle CQL Processor Component Configuration File
» Oracle CQL Processor EPN Assembly File
» Configuring an Oracle CQL Processor Cache Source Overview of EPL Processor Component Configuration
» How to Configure an EPL Processor Manually
» Configuring an EPL Processor Cache Source
» EPL Processor Component Configuration File
» EPL Processor EPN Assembly File
» Use Case: Publishing Events to a Cache
» Use Case: Consuming Data From a Cache
» Use Case: Updating and Deleting Data in a Cache
» Use Case: Using a Cache in a Multi-Server Domain
» Additional Caching Features Overview of Oracle CEP Cache Configuration
» Caching APIs Overview of Oracle CEP Cache Configuration
» Specifying the Key Used to Index an Oracle CEP Local Cache
» Configuring an Oracle CEP Local Cache as an Event Source
» Configuring an Oracle CEP Local Cache Loader
» Configuring an Oracle CEP Local Cache Store
» The coherence-cache-config.xml File
» The tangosol-coherence-override.xml File
» Specifying the Key Used to Index an Oracle Coherence Cache
» Configuring an Oracle Coherence Cache as an Event Source
» Configuring an Oracle Coherence Cache Loader
» Configuring an Oracle Coherence Cache Store
» Configuring a Third-Party Caching System and Cache
» How to Access a Cache From an Oracle CQL Statement
» How To Access a Cache From an EPL Statement
» Accessing a Cache From an Adapter
» How to Access a Cache With JMX Using Oracle CEP Visualizer
» How to Access a Cache With JMX Using Java
» Default Persistent Event Store
» Custom Persistent Event Store
» Persistent Event Store Schema
» Querying Stored Events Overview of Configuring Event Record and Playback
» Configuring an Event Store for Oracle CEP Server
» Configuring a Component to Record Events
» Configuring a Component to Playback Events
» Starting and Stopping the Record and Playback of Events
» Description of the Berkeley Database Schema
» Accessing a Cache From an EPL User-Defined Function Creating a Custom Event Store Provider
» Custom Adapters as Event Sources Custom Adapters as Event Sinks
» How to Implement a Custom Adapter Using Ant
» Implementing a Custom Adapter as an Event Source
» Implementing a Custom Adapter as an Event Sink
» Implementing a Custom Adapter Factory
» How to Pass Static Login Credentials to the Data Feed Provider
» How to Pass Dynamic Login Credentials to the Data Feed Provider
» Configuring the Custom Adapter Component Configuration File
» Custom Event Beans as Event Sources
» Custom Event Beans as Event Sinks
» Implementing a Custom Event Bean as an Event Source
» Implementing a Custom Event Bean as an Event Sink
» Configuring the Custom Event Bean Component Configuration File
» Implementing a Custom Spring Bean as an Event Source
» Implementing a Custom Spring Bean as an Event Sink
» Declaring the Custom Spring Bean Components in your Application
» How to Expose an Oracle CEP Application as a Web Service
» How to Configure Oracle JDBC Data Cartridge Application Context
» Extending Component Configuration Using Annotations
» Extending Component Configuration Using an XSD
» How to Extend Component Configuration Using Annotations
» Creating the XSD Schema File
» Lifecycle Callback Annotations Lifecycle
» Rejoining the High Availability Multi-Server Domain
» Deployment Group and Notification Group
» High Availability Input Adapter
» Buffering Output Adapter High Availability Components
» Broadcast Output Adapter High Availability Components
» Correlating Output Adapter ActiveActiveGroupBean
» High Availability and Oracle Coherence
» Simple Failover Choosing a Quality of Service
» Simple Failover with Buffering
» Light-Weight Queue Trimming Choosing a Quality of Service
» Primary Oracle CEP High Availability Use Case
» Select the Minimum High Availability Your Application can Tolerate
» Use Oracle CEP High Availability Components at All Ingress and Egress Points
» Choose an Adequate warm-up-window Time Ensure Applications are Idempotent
» Source Event Identity Externally Understand the Importance of Event Ordering
» Range-Based Windows Oracle CQL Query Restrictions
» Tuple-Based Windows Oracle CQL Query Restrictions
» Partitioned Windows Oracle CQL Query Restrictions
» Sliding Windows Oracle CQL Query Restrictions
» DURATION Clause and Non-Event Detection
» Prefer Application Time Oracle CQL Query Restrictions
» How to Configure Simple Failover
» How to Configure Simple Failover With Buffering
» How to Configure Light-Weight Queue Trimming
» How to Configure Precise Recovery With JMS
» High Availability Input Adapter EPN Assembly File Configuration
» High Availability Input Adapter Component Configuration File Configuration
» Broadcast Output Adapter EPN Assembly File Configuration
» Broadcast Output Adapter Component Configuration File Configuration
» Correlating Output Adapter EPN Assembly File Configuration
» Correlating Output Adapter Component Configuration File Configuration
» How to Configure Scalability With the Default Channel EventPartitioner
» How to Configure Scalability With a Custom Channel EventPartitioner
» How to Configure Scalability in a JMS Application Without Oracle CEP High Availability
» How to Configure Scalability in a JMS Application With Oracle CEP High Availability
» How to Configure the ActiveActiveGroupBean Group Pattern Match
» Applications Overview of Application Assembly and Deployment
» Private Application Dependencies Application Dependencies
» Shared Application Dependencies Application Dependencies
» Library Directory Application Libraries
» Library Extensions Directory Application Libraries
» Creating Application Libraries Application Libraries
» Deployment and Deployment Order
» Configuration History Management Overview of Application Assembly and Deployment
» Assembling an Oracle CEP Application Using Oracle CEP IDE for Eclipse
» Creating the MANIFEST.MF File
» Assembling Applications With Foreign Stages
» How to Assemble a Custom Adapter in its Own Bundle
» How to Assemble a Custom Event Bean in its Own Bundle
» Click OK. How to Configure an Absolute Path
» How to Update an Application Library Using Oracle CEP IDE for Eclipse
» How to View an Application Library Using the Oracle CEP Visualizer
» Message Catalog Hierarchy Using Message Catalogs With Oracle CEP Server
» Guidelines for Naming Message Catalogs
» Using Message Arguments Using Message Catalogs With Oracle CEP Server
» Message Catalog Formats Using Message Catalogs With Oracle CEP Server
» Message Catalog Localization Using Message Catalogs With Oracle CEP Server
» How to Parse a Message Catalog to Generate Logger and TextFormatter Classes for Localization
» How to Deploy an Oracle CEP Application Using Oracle CEP IDE for Eclipse
» How to Deploy an Oracle CEP Application Using Oracle CEP Visualizer
» How to Deploy an Oracle CEP Application Using the Deployer Utility
» Overview of Testing Applications With the Load Generator and csvgen Adapter
» Configuring and Running the Load Generator Utility
» Creating a Load Generator Property File
» Configuring the csvgen Adapter in Your Application
» Event Inspector HTTP Publish-Subscribe Channel and Server
» How to Trace Events Using Oracle CEP Visualizer
» Scalability Using the ActiveActiveGroupBean
» Host Configuration High Availability Performance Tuning
» High Availability Input Adapter and Quality of Service
» High Availability Input Adapter Configuration
» Broadcast Output Adapter Configuration
» Oracle Coherence Heartbeat Frequency
» Oracle Coherence Serialization Oracle Coherence Performance Tuning Options
» Adapter Lifecycle Annotations OSGi Service Reference Annotations
» Example com.bea.wlevs.configuration.Activate
» Example com.bea.wlevs.configuration.Rollback
Show more