Package oracle.streams
Class XStreamIn
- java.lang.Object
-
- oracle.streams.XStreamIn
-
public class XStreamIn extends java.lang.Object
The XStreamIn class provides APIs for using Oracle XStream In. This is the main Java API for Oracle XStream Inbound. It has the following main API methods as shown in the list.
- Attach(): Attach to an XStream inbound server.
- Detach(): Detach from an XStream inbound server.
- SendLCRCallback(): Send a stream of logical change records (LCRs) to the XStream inbound server in callback mode. Specify an XStreamLCRCallbackHandler that constructs the LCRs that are sent to the XStream inbound server.
- SendLCR(): Send one LCR to the XStream inbound server in non-callback mode.
- SendChunk(): Send chunk data for LCRs that contain LOB, LONG, or XMLTYPE columns. Invoke this API only after invoking the sendLCR() API if the LCR contains chunk data.
Connection conn; XStreamIn xsIn; ... // assume myLCRHandler implements XStreamLCRCallbackHandler XStreamLCRCallbackHandler hdlr = new MyLCRHandler(); try { DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); conn = DriverManager.getConnection("jdbc:oracle:oci:@hostname:port:sid", "strmadm", "strmadm"); xsIn = XStreamIn.attach(conn, new String("APPLY1"), new String("CAP1"), XStreamIn.DEFAULT_MODE); while(true) { xsIn.sendLCRCallback(hdlr, XStreamIn.DEFAULT_MODE); // maintain processed low watermark maintainWatermark(); ... if (user_terminate_condition) { break; } } xsIn.detach(XStreamIn.DEFAULT_MODE); } catch(StreamsException e) { System.out.println("Streams exception: " + e.getMessage()); } catch(Exception e) { }
Please see createLCR() and createChunk() in XStreamLCRCallbackHandler for examples of implementing the callback methods.
Here is an example of using the non-callback API:
Connection conn; XStreamIn xsIn; ... try { DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); conn = DriverManager.getConnection("jdbc:oracle:oci:@hostname:port:sid", "strmadm", "strmadm"); xsIn = XStreamIn.attach(conn, new String("APPLY1"), new String("CAP1"), XStreamIn.DEFAULT_MODE); lwm = xsIn.getProcessedLowWatermark(XStreamIn.DEFAULT_MODE); while(true) { RowLCR rowlcr = new DefaultRowLCR(...); if (rowlcr has chunk data) rowlcr.setChunkDataFlag(true); int status = xsIn.sendLCR(rowlcr, XStreamIn.DEFAULT_MODE); if (status == EXECUTING) { for (each chunk in each lob/long/xmltype column) { ChunkColumnValue chunk = new DefaultChunkColumnValue(...); if (chunk is the last one in the column) chunk.setLastChunk(true); if (chunk is the last one for entire row) chunk.setEndOfRow(true); xsIn.sendChunk(chunk, XStreamIn.DEFAULT_MODE); } } else // status == FINISHED { // maintain watermark lwm = xsIn.getProcessedLowWatermark(XStreamIn.DEFAULT_MODE); maintainWatermark(); } if (user_terminate_condition) { break; } } xsIn.detach(XStreamIn.DEFAULT_MODE); } catch(StreamsException e) { System.out.println("Streams exception: " + e.getMessage()); } catch(Exception e) { }
-
-
Field Summary
Fields Modifier and Type Field Description static int
DEFAULT_BATCH_INTERVAL
XStreamIn default batch interval value for batch processingstatic int
DEFAULT_MODE
XStreamIn default modestatic int
EXECUTING
XStreamIn batch processing status EXECUTING, which indicates the the batch is in progressstatic int
FINISHED
XStreamIn batch processing status FINISHED, which is the default status
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static XStreamIn
attach(oracle.jdbc.OracleConnection oconn, java.lang.String serverName, java.lang.String sourceName, int mode)
Attaches to an inbound server.static XStreamIn
attach(oracle.jdbc.OracleConnection oconn, java.lang.String serverName, java.lang.String sourceName, int batchInterval, int mode)
Attaches to an inbound server.byte[]
detach(int mode)
Detaches from an inbound server.void
flush(int mode)
Flushes the network.byte[]
getLastPosition()
Gets last position.byte[]
getOldestPosition()
Gets the oldest position.byte[]
getProcessedLowWatermark()
Gets the processed low watermark.void
sendChunk(ChunkColumnValue chunk, int mode)
Sends chunk data in non-callback mode.int
sendLCR(LCR lcr, int mode)
Sends one LCR in non-callback mode.void
sendLCRCallback(XStreamLCRCallbackHandler handler, int mode)
Sends a stream of LCRs in callback mode.
-
-
-
Field Detail
-
DEFAULT_MODE
public static final int DEFAULT_MODE
XStreamIn default mode- See Also:
- Constant Field Values
-
DEFAULT_BATCH_INTERVAL
public static final int DEFAULT_BATCH_INTERVAL
XStreamIn default batch interval value for batch processing- See Also:
- Constant Field Values
-
FINISHED
public static final int FINISHED
XStreamIn batch processing status FINISHED, which is the default status- See Also:
- Constant Field Values
-
EXECUTING
public static final int EXECUTING
XStreamIn batch processing status EXECUTING, which indicates the the batch is in progress- See Also:
- Constant Field Values
-
-
Method Detail
-
attach
public static XStreamIn attach(oracle.jdbc.OracleConnection oconn, java.lang.String serverName, java.lang.String sourceName, int mode) throws StreamsException
Attaches to an inbound server.
This API attaches the client to the specified XStream inbound server. This is also the factory method that returns an XStreamIn instance once it is attached to a valid XStream inbound server.
After successfully attached to an XStream inbound server, call getLastPosition() to decide where to start sending LCRs in the LCR stream.- Parameters:
oconn
- Oracle database connection.
Note that the connection must be made using Oracle OCI (thick) driver.serverName
- Name of the XStream inbound server.sourceName
- Name of the data source.mode
- The mode of XStream inbound server (for future extension). Use XStreamIn.DEFAULT_MODE for now.- Returns:
- an XStreamIn instance object
- Throws:
StreamsException
- if error occurs during attach.
-
attach
public static XStreamIn attach(oracle.jdbc.OracleConnection oconn, java.lang.String serverName, java.lang.String sourceName, int batchInterval, int mode) throws StreamsException
Attaches to an inbound server.
This API is the same as the other attach API except that it includes the batchInterval parameter.- Parameters:
oconn
- Oracle database connection.
Note that the connection must be made using Oracle OCI (thick) driver.serverName
- Name of the XStream inbound server.sourceName
- Name of the data sourcebatchInterval
- XStreamIn batch processing interval.mode
- The mode of XStream inbound server (for future extension). Use XStreamIn.DEFAULT_MODE for now.- Returns:
- an XStreamIn instance object
- Throws:
StreamsException
- if error occurs during attach.
-
detach
public byte[] detach(int mode) throws StreamsException
Detaches from an inbound server.
This API detaches the client from the XStream inbound server.- Parameters:
mode
- The mode of XStream inbound server (for future extension). Use XStreamIn.DEFAULT_MODE for now.- Returns:
- the inbound server's processed low watermark.
- Throws:
StreamsException
- if error occurs during detach.
-
sendLCRCallback
public void sendLCRCallback(XStreamLCRCallbackHandler handler, int mode) throws StreamsException
Sends a stream of LCRs in callback mode.
This API starts sending an LCR stream to the specified XStream inbound server using callback mode. You must supply an LCR callback handler that uses the createLCR() and createChunk() callback methods. See XStreamLCRCallbackHandler for details about the LCR callback handler.
To reduce network roundtrip overhead, this method also starts a batch process that sends LCRs to the inbound server. The batch process is stopped after 30 seconds or when a NULL LCR is returned in the createLCR() callback method.- Parameters:
handler
- The XStreamLCRCallbackHandler for constructing LCRs.mode
- The mode of XStream inbound server (for future extension). Use XStreamIn.DEFAULT_MODE for now.- Throws:
StreamsException
- if error occurs during the batch.
-
sendLCR
public int sendLCR(LCR lcr, int mode) throws StreamsException
Sends one LCR in non-callback mode.
This method sends one LCR to the connected inbound server. To avoid a network round trip for each SendLCR call, XStreamIn starts a batch process internally to fill the network buffer with LCRs. This batch process is stopped after 30 seconds has elapsed.
This method returns a batch status value of either EXECUTING or FINISHED. Note that when a RowLCR has chunkDataFlag set, the return status is always EXECUTING.- Parameters:
lcr
- A constructed LCR.mode
- The mode of XStream inbound server (for future extension). Use XStreamIn.DEFAULT_MODE for now.- Returns:
- The XStreamIn batch processing status.
- Throws:
StreamsException
- if the LCR is NULL or invalid, or error occurs while sending the LCR.
-
sendChunk
public void sendChunk(ChunkColumnValue chunk, int mode) throws StreamsException
Sends chunk data in non-callback mode.
This API sends streaming LOB, LONG, and XMLTYPE chunk data.
Call this API after calling sendLCR() to send chunk data for an LCR. Ensure that all of the chunks for one LOB column are sent before sending the chunks for another LOB column. The LOB columns can be sent in any order.
Use setLastChunk() in chunkColumnValue to indicate whether the current chunk is the last chunk for a column. Use setEndOfRow() in chunkColumnValue to indicate whether the current chunk is the last chunk for an entire row change.- Parameters:
chunk
- A ChunkColumnValue object that contains the chunk data for the LOB, LONG, or XMLTYPE column in a RowLCRmode
- The mode of XStream inbound server (for future extension). Use XStreamIn.DEFAULT_MODE for now.- Throws:
StreamsException
- if error occurs while sending chunk data.
-
getProcessedLowWatermark
public byte[] getProcessedLowWatermark()
Gets the processed low watermark.
Use this method to get the inbound server's processed low watermark. After attaching to an XStream inbound server, the client caches a local copy of the inbound server's processed low watermark. Each of the following calls refreshes the local copy with the inbound server's processed low watermark and returns the FINISHED batch status from sendLCR:attach sendLCR sendLCRCallback flush
This method can be called while the client is attached to an XStream inbound server.- Returns:
- The inbound server's processed low watermark.
-
getOldestPosition
public byte[] getOldestPosition()
Gets the oldest position.
Use this method to get the inbound server's oldest position. After attaching to an XStream inbound server, the client caches a local copy of the inbound server's oldest position. Each of the following calls refreshes the local copy with the inbound server's oldest position and returns the FINISHED batch status from sendLCR:attach sendLCR flush
This method can be called while the client is attached to an XStream inbound server.- Returns:
- The inbound server's processed low watermark.
-
getLastPosition
public byte[] getLastPosition()
Gets last position.
This method gets the inbound server's last position after an attach call. After attaching to an XStream inbound server, this method retrieves the inbound server's last position and sends it to the client. The client can use this last position to decide where to stream LCRs. Ensure that this method is called after successfully attaching to an XStream inbound server.- Returns:
- The inbound server's processed low watermark.
-
flush
public void flush(int mode) throws StreamsException
Flushes the network.
This method flushes the network while attaching to an XStream inbound server. Ensure that this method is called only when there are no LCRs to send to the inbound server and the client needs to determine the progress of the inbound server.
It terminates any in-progress batch processing and should not called in callback mode.
This method contacts the inbound server to get the inbound server's processed low watermark. The getProcessedLowWatermark() method can retrieve the processed low watermark.- Parameters:
mode
- The mode of XStream inbound server (for future extension). Use XStreamIn.DEFAULT_MODE for now.- Throws:
StreamsException
- if error occurs while flushing network.
-
-