Search in sources :

Example 1 with ColumnMappingPostSet

use of org.datanucleus.store.rdbms.mapping.column.ColumnMappingPostSet in project datanucleus-rdbms by datanucleus.

the class OracleSerialisedPCMapping method performSetPostProcessing.

/**
 * Retrieve the empty BLOB created by the insert statement and write out the current BLOB field value to the Oracle BLOB object
 * @param ownerSM the current StateManager
 */
public void performSetPostProcessing(DNStateManager ownerSM) {
    Object value = ownerSM.provideField(mmd.getAbsoluteFieldNumber());
    DNStateManager sm = null;
    if (value != null) {
        ExecutionContext ec = ownerSM.getExecutionContext();
        sm = ec.findStateManager(value);
        if (sm == null || sm.getExecutionContext().getApiAdapter().getExecutionContext(value) == null) {
            // Assign a StateManager to the serialised object since none present
            sm = ec.getNucleusContext().getStateManagerFactory().newForEmbedded(ec, value, false, ownerSM, mmd.getAbsoluteFieldNumber(), PersistableObjectType.EMBEDDED_PC);
        }
    }
    if (sm != null) {
        sm.setStoringPC();
    }
    // Generate the contents for the BLOB
    byte[] bytes = new byte[0];
    if (value != null) {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(value);
            bytes = baos.toByteArray();
        } catch (IOException e1) {
        // Do Nothing
        }
    }
    // Update the BLOB
    if (columnMappings[0] instanceof ColumnMappingPostSet) {
        ((ColumnMappingPostSet) columnMappings[0]).setPostProcessing(ownerSM, bytes);
    }
    if (sm != null) {
        sm.unsetStoringPC();
    }
}
Also used : ExecutionContext(org.datanucleus.ExecutionContext) DNStateManager(org.datanucleus.state.DNStateManager) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) ObjectOutputStream(java.io.ObjectOutputStream) ColumnMappingPostSet(org.datanucleus.store.rdbms.mapping.column.ColumnMappingPostSet)

Example 2 with ColumnMappingPostSet

use of org.datanucleus.store.rdbms.mapping.column.ColumnMappingPostSet in project datanucleus-rdbms by datanucleus.

the class OracleCollectionMapping method performSetPostProcessing.

public void performSetPostProcessing(DNStateManager sm) {
    if (containerIsStoredInSingleColumn()) {
        if (columnMappings[0] instanceof ColumnMappingPostSet) {
            // Create the value to put in the BLOB
            Collection value = (Collection) sm.provideField(mmd.getAbsoluteFieldNumber());
            byte[] bytes = new byte[0];
            if (value != null) {
                try {
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    ObjectOutputStream oos = new ObjectOutputStream(baos);
                    oos.writeObject(value);
                    bytes = baos.toByteArray();
                } catch (IOException e1) {
                // Do Nothing
                }
            }
            // Update the BLOB
            ((ColumnMappingPostSet) columnMappings[0]).setPostProcessing(sm, bytes);
        }
    }
}
Also used : Collection(java.util.Collection) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) ObjectOutputStream(java.io.ObjectOutputStream) ColumnMappingPostSet(org.datanucleus.store.rdbms.mapping.column.ColumnMappingPostSet)

Example 3 with ColumnMappingPostSet

use of org.datanucleus.store.rdbms.mapping.column.ColumnMappingPostSet in project datanucleus-rdbms by datanucleus.

the class OracleSerialisedObjectMapping method performSetPostProcessing.

/**
 * Retrieve the empty BLOB created by the insert statement and write out the current BLOB field value to the Oracle BLOB object
 * @param sm the current StateManager
 */
public void performSetPostProcessing(DNStateManager sm) {
    // Generate the contents for the BLOB
    byte[] bytes = new byte[0];
    Object value = sm.provideField(mmd.getAbsoluteFieldNumber());
    if (value != null) {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(value);
            bytes = baos.toByteArray();
        } catch (IOException e1) {
        // Do Nothing
        }
    }
    if (columnMappings[0] instanceof ColumnMappingPostSet) {
        // Update the BLOB
        ((ColumnMappingPostSet) columnMappings[0]).setPostProcessing(sm, bytes);
    }
}
Also used : ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) ObjectOutputStream(java.io.ObjectOutputStream) ColumnMappingPostSet(org.datanucleus.store.rdbms.mapping.column.ColumnMappingPostSet)

Example 4 with ColumnMappingPostSet

use of org.datanucleus.store.rdbms.mapping.column.ColumnMappingPostSet in project datanucleus-rdbms by datanucleus.

the class OracleBitSetMapping method performSetPostProcessing.

/**
 * Retrieve the empty BLOB created by the insert statement and write out the current BLOB field value to the Oracle BLOB object
 * @param sm the current StateManager
 */
public void performSetPostProcessing(DNStateManager sm) {
    Object value = sm.provideField(mmd.getAbsoluteFieldNumber());
    if (value == null) {
        return;
    }
    // Generate the contents for the BLOB
    byte[] bytes = new byte[0];
    try {
        if (mmd.isSerialized()) {
            // Serialised field so just perform basic Java serialisation for retrieval
            if (!(value instanceof Serializable)) {
                throw new NucleusDataStoreException(Localiser.msg("055005", value.getClass().getName()));
            }
            BlobImpl b = new BlobImpl(value);
            bytes = b.getBytes(0, (int) b.length());
        } else if (value instanceof java.util.BitSet) {
            bytes = ArrayConversionHelper.getByteArrayFromBooleanArray(ArrayConversionHelper.getBooleanArrayFromBitSet((java.util.BitSet) value));
        } else {
            // Fall back to just perform Java serialisation for storage
            if (!(value instanceof Serializable)) {
                throw new NucleusDataStoreException(Localiser.msg("055005", value.getClass().getName()));
            }
            BlobImpl b = new BlobImpl(value);
            bytes = b.getBytes(0, (int) b.length());
        }
    } catch (SQLException e) {
        throw new NucleusDataStoreException(Localiser.msg("055001", "Object", "" + value, mmd, e.getMessage()), e);
    } catch (IOException e1) {
    // Do nothing
    }
    if (columnMappings[0] instanceof ColumnMappingPostSet) {
        ((ColumnMappingPostSet) columnMappings[0]).setPostProcessing(sm, bytes);
    }
}
Also used : NucleusDataStoreException(org.datanucleus.exceptions.NucleusDataStoreException) Serializable(java.io.Serializable) SQLException(java.sql.SQLException) IOException(java.io.IOException) BlobImpl(org.datanucleus.store.rdbms.mapping.column.BlobImpl) ColumnMappingPostSet(org.datanucleus.store.rdbms.mapping.column.ColumnMappingPostSet)

Example 5 with ColumnMappingPostSet

use of org.datanucleus.store.rdbms.mapping.column.ColumnMappingPostSet in project datanucleus-rdbms by datanucleus.

the class OracleMapMapping method performSetPostProcessing.

public void performSetPostProcessing(DNStateManager sm) {
    if (containerIsStoredInSingleColumn()) {
        if (columnMappings[0] instanceof ColumnMappingPostSet) {
            // Create the value to put in the BLOB
            java.util.Map value = (java.util.Map) sm.provideField(mmd.getAbsoluteFieldNumber());
            byte[] bytes = new byte[0];
            if (value != null) {
                try {
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    ObjectOutputStream oos = new ObjectOutputStream(baos);
                    oos.writeObject(value);
                    bytes = baos.toByteArray();
                } catch (IOException e1) {
                // Do Nothing
                }
            }
            // Update the BLOB
            ((ColumnMappingPostSet) columnMappings[0]).setPostProcessing(sm, bytes);
        }
    }
}
Also used : Map(java.util.Map) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) ObjectOutputStream(java.io.ObjectOutputStream) Map(java.util.Map) ColumnMappingPostSet(org.datanucleus.store.rdbms.mapping.column.ColumnMappingPostSet)

Aggregations

IOException (java.io.IOException)6 ColumnMappingPostSet (org.datanucleus.store.rdbms.mapping.column.ColumnMappingPostSet)6 ByteArrayOutputStream (java.io.ByteArrayOutputStream)4 ObjectOutputStream (java.io.ObjectOutputStream)4 Serializable (java.io.Serializable)2 SQLException (java.sql.SQLException)2 NucleusDataStoreException (org.datanucleus.exceptions.NucleusDataStoreException)2 BlobImpl (org.datanucleus.store.rdbms.mapping.column.BlobImpl)2 BigInteger (java.math.BigInteger)1 Collection (java.util.Collection)1 Map (java.util.Map)1 ExecutionContext (org.datanucleus.ExecutionContext)1 DNStateManager (org.datanucleus.state.DNStateManager)1