blob: 462eaef4f22acdca27c30a7ad1d18a0886f39e45 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.eis.adapters.aq;
import javax.resource.*;
import javax.resource.cci.*;
import org.w3c.dom.*;
import org.eclipse.persistence.eis.*;
import org.eclipse.persistence.eis.interactions.*;
import org.eclipse.persistence.internal.eis.adapters.aq.*;
import org.eclipse.persistence.internal.sessions.AbstractRecord;
import oracle.AQ.*;
/**
* Platform for Oracle AQ JCA adapter.
* This allows for Oracle AQ to be treated as a data source and accessed through EclipseLink.
*
* @author James
* @since OracleAS TopLink 10<i>g</i> (10.0.3)
*/
public class AQPlatform extends EISPlatform {
/** AQ interaction spec properties. */
public static String QUEUE = "queue";
public static String SCHEMA = "schema";
public static String QUEUE_OPERATION = "operation";
public static String ENQUEUE = "enqueue";
public static String DEQUEUE = "dequeue";
public static String ENQUEUE_OPTIONS = "enqueue-options";
public static String DEQUEUE_OPTIONS = "dequeue-options";
/**
* Default constructor.
*/
public AQPlatform() {
super();
setShouldConvertDataToStrings(true);
setIsMappedRecordSupported(false);
setIsIndexedRecordSupported(true);
setIsDOMRecordSupported(true);
setSupportsLocalTransactions(true);
setRequiresAutoCommit(true);
}
/**
* Allow the platform to build the interaction spec based on properties defined in the interaction.
*/
public InteractionSpec buildInteractionSpec(EISInteraction interaction) {
InteractionSpec spec = interaction.getInteractionSpec();
if (spec == null) {
AQInteractionSpec aqSpec;
if (interaction.getProperty(QUEUE_OPERATION) == null) {
throw EISException.resourceException(new ResourceException(QUEUE_OPERATION + " properties must be set."), interaction, null, null);
}
if (interaction.getProperty(QUEUE_OPERATION).equals(ENQUEUE)) {
aqSpec = new AQEnqueueInteractionSpec();
AQEnqueueOption options = (AQEnqueueOption)interaction.getProperty(ENQUEUE_OPTIONS);
if (options != null) {
((AQEnqueueInteractionSpec)aqSpec).setOptions(options);
}
} else {
aqSpec = new AQDequeueInteractionSpec();
AQDequeueOption options = (AQDequeueOption)interaction.getProperty(DEQUEUE_OPTIONS);
if (options != null) {
((AQDequeueInteractionSpec)aqSpec).setOptions(options);
}
}
aqSpec.setQueue((String)interaction.getProperty(QUEUE));
aqSpec.setSchema((String)interaction.getProperty(SCHEMA));
spec = aqSpec;
}
return spec;
}
/**
* Allow the platform to handle the creation of the DOM record.
* Create an indexed record (mapped are not supported).
*/
public Record createDOMRecord(String recordName, EISAccessor accessor) {
try {
return accessor.getRecordFactory().createIndexedRecord(recordName);
} catch (ResourceException exception) {
throw EISException.resourceException(exception, accessor, null);
}
}
/**
* Stores the XML DOM value into the record.
* Convert the DOM to a RAW and add to the indexed record.
*/
public void setDOMInRecord(Element dom, Record record, EISInteraction call, EISAccessor accessor) {
IndexedRecord indexedRecord = (IndexedRecord)record;
indexedRecord.add(new org.eclipse.persistence.oxm.record.DOMRecord(dom).transformToXML());
}
/**
* Allow the platform to handle the creation of the Record for the DOM record.
* Translate the indexed record RAW bytes into a DOM record.
*/
public AbstractRecord createDatabaseRowFromDOMRecord(Record record, EISInteraction call, EISAccessor accessor) {
EISDOMRecord domRecord = new EISDOMRecord();
IndexedRecord indexedRecord = (IndexedRecord)record;
if (indexedRecord.size() == 0) {
return null;
}
byte[] bytes = (byte[])indexedRecord.get(0);
domRecord.transformFromXML(new String(bytes));
return domRecord;
}
}