About this task
Use the SolutionGateway API and related
APIs (GatewayClient, EventFactory, GridConnection, GridConfiguration)
to establish a connection to an object grid, create a gateway instance
so that events can be routed to the event queue, create events, and
submit these events for processing.
By default, the gateway
submits events at the same rate they are received. The maximum event
submission delay is equal to the maximum transaction delay of the
inbound connectivity system (JMS and IIB, for example). If too many
events are submitted over a certain period, or if event processing
is slower than event submission, the Insight Server can
be overrun. If the server is overrun, the gateway slows down event
submission. The default maximum submission delay is 1,100 milliseconds.
When this limit is reached, events are no longer submitted and an EventCapacityExceededException error
is written in the server log. You can modify the maximum delay value
to prevent the error by using the setMaxSubmitDelay method.
Note: Do
not submit an event object more than once.
- Add the Decision Server
Insights runtime
JAR files as external libraries to the build path.
- Select your Java™ project
and click on the workbench menu.
- In the Project Properties dialog,
select the Java Build Path page in the navigator.
- On the Java Build Path page, click
the Libraries tab.
- Click Add Library.
- In the JAR Selection dialog, select IBM
ODM Library and click Next.
- Select the Insight Solution Gateway library
and click OK.
- In , expand Java and select Compiler to
verify that the JDK compliance level of your project is set to 1.8.
If it is not, change it to 1.8.
- Import the gateway client class.
import com.ibm.ia.gateway.client.GatewayClient;
- Initialize a gateway client:
GatewayClient.init();
- Establish a connection to the grid by calling a GridConnection and
a GridConfiguration.
For example:
GridConfiguration gridConfig = new GridConfiguration("localhost:2809");
GridConnection connection = GridConnectionFactory.createGridConnection(gridConfig);
Where localhost:2809 is
the connection endpoint of the grid server. A GridConfiguration constructor
also exists to take AuthenticationConfiguration.
Note: When
you create a grid configuration to the catalog servers in a production
environment, you must pass in a list of IP addresses. For example,
the following line of code passes three addresses to three different
hosts.
GridConfiguration gridConfig = new GridConfiguration("localhost:2809,host01:2810,host02:2811");
Using the GridConnection API, you can establish
connections between a single object grid and multiple solutions.
- Create a gateway instance. You must supply the solution
name to create a gateway, and establish the connection.
For
example:
SolutionGateway gateway = connection.getSolutionGateway("AcmeAirlines");
Where AcmeAirlines is
the solution name. Use the gateway class to retrieve
information about a solution. The following example returns the current
version value for the gateway solution:
SolutionVersion solVersion = gateway.getSolutionVersion();
Each solution gateway instance represents a single, specific
solution that is connected to the object grid.
- Submit an event to the runtime environment by using a specific
event instance.
For example:
CustomerEvent event = gateway.getEventFactory().createEvent(CustomerEvent.class);
event.setDescription("Customer event");
Relationship customer = gateway.getEventFactory().createRelationship(Customer.class, "Alan");
event.setCustomer(customer);
Relationship flight = gateway.getEventFactory().createRelationship(Flight.class, "Flight123");
event.setFlight(flight);
try{
RoutingStatus status = gateway.submit(event);
System.out.println("Event submitted successfully, status is " + status);
}
catch (GatewayException e) {
System.out.println("Failed to submit event" + e.getMessage());
}
catch (RoutingException re ){
System.out.println("Failed to route event" + re.getMessage());
}
In this example, the EventFactory API
is called to create an instance of the CustomerEvent event
type.
Note: A RoutingException normally occurs
when something is wrong with the submitted event. For example, one
of the fields is null or the wrong type, or the bound
entity is null.
- If the event time stamp is missing, provide the defaultTime value
as a parameter in the submit call:
gateway.submit(event, defaultTime);
Specify the defaultTime setting as LocalDateTime or ZonedDateTime,
or a string representation of the local time or zoned time. The value
of defaultTime is converted by using the ZoneId
for the solution and then used as the event time stamp. If the event
does not include a time stamp and a defaultTime value
is not provided, the event submission time is used as the event time
stamp. The event time stamp in this case uses the solution ZoneId.
- Optional: To override the default maximum event
submission delay setting, use the SolutionGateway.setMaxSubmitDelay(int
delay) API. Alternately, you can add the
system property com.ibm.ia.gateway.MaxSubmitDelay and
specify the delay value in milliseconds.
For more information about
what to do if you receive a GatewayException, see Object grid transaction exceptions.