DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://issues.apache.org/bugzilla/show_bug.cgi?id=30445>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=30445 RDBMS adapter for Weblogic/Oracle Summary: RDBMS adapter for Weblogic/Oracle Product: Slide Version: Nightly Platform: Other OS/Version: All Status: NEW Severity: Normal Priority: Other Component: Stores AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] The following RDBMS adapter is required for running Slide on Weblogic & Oracle because Weblogic has to use the class "weblogic.jdbc.vendor.oracle.OracleThinBlob" in order to save blob into an Oracle DB. --------------------------------------------------------------------------------- package org.apache.slide.store.impl.rdbms; import org.apache.slide.common.*; import org.apache.slide.content.*; import org.apache.slide.store.impl.rdbms.CommonRDBMSAdapter; import org.apache.slide.store.impl.rdbms.SequenceAdapter; import org.apache.slide.util.logger.Logger; import java.io.*; import java.sql.*; /** * * Slide Adapter for Weblogic/oracle. * */ public class WeblogicOracleRDBMSAdapter extends CommonRDBMSAdapter implements SequenceAdapter { protected static String normalizeSequenceName(String sequenceName) { return sequenceName.replace('-', '_').toUpperCase() + "_SEQ"; } // Constructor public WeblogicOracleRDBMSAdapter(Service service, Logger logger) { super(service, logger); } // Public Methods public boolean isSequenceSupported(Connection conn) { return true; } public boolean createSequence(Connection conn, String sequenceName) throws ServiceAccessException { String query = "CREATE SEQUENCE \"" + normalizeSequenceName(sequenceName) + "\""; PreparedStatement statement = null; try { statement = conn.prepareStatement(query); statement.executeUpdate(); return true; } catch (SQLException e) { throw new ServiceAccessException(service, e); } finally { close(statement); } } public long nextSequenceValue(Connection conn, String sequenceName) throws ServiceAccessException { String selectQuery = "SELECT \"" + normalizeSequenceName(sequenceName)+"\".nextval FROM DUAL"; PreparedStatement selectStatement = null; ResultSet res = null; try { selectStatement = conn.prepareStatement(selectQuery); res = selectStatement.executeQuery(); if (!res.next()) { throw new ServiceAccessException(service, "Could not increment sequence " + sequenceName); } long value = res.getLong(1); return value; } catch (SQLException e) { throw new ServiceAccessException(service, e); } finally { close(selectStatement, res); } } public boolean sequenceExists(Connection conn, String sequenceName) throws ServiceAccessException { PreparedStatement selectStatement = null; ResultSet res = null; try { selectStatement = conn.prepareStatement("ALTER SEQUENCE \"" + normalizeSequenceName(sequenceName) + "\" INCREMENT BY 1"); res = selectStatement.executeQuery(); return true; } catch (SQLException e) { return false; } finally { close(selectStatement, res); } } // Private Methods protected void storeContent( Connection connection, Uri uri, NodeRevisionDescriptor revisionDescriptor, NodeRevisionContent revisionContent) throws IOException, SQLException { getLogger().log("storeContent: " + uri, Logger.DEBUG); assureVersionInfo(connection, uri, revisionDescriptor); long versionContentId = getVersionContentId(connection, uri, revisionDescriptor); insertEmptyContent(connection, versionContentId); PreparedStatement statement = connection.prepareStatement( "SELECT vc.CONTENT FROM VERSION_CONTENT vc WHERE vc.VERSION_ID = ? FOR UPDATE"); try { statement.setLong(1, versionContentId); ResultSet res = statement.executeQuery(); try { res.next(); Blob blob = res.getBlob(1); InputStream in = revisionContent.streamContent(); OutputStream out = ((weblogic.jdbc.vendor.oracle.OracleThinBlob) blob).getBinaryOutputStream(); if (bcompress) { getLogger().log("Compressing the data", LOG_CHANNEL, 6); StoreContentZip ziputil = new StoreContentZip(); ziputil.Zip(in); in = ziputil.getInputStream(); } try { copy(in, out, ((weblogic.jdbc.vendor.oracle.OracleThinBlob) blob).getBufferSize()); } finally { close(out); } } finally { close(res); } } finally { close(statement); } } private long getVersionContentId(Connection connection, Uri uri, NodeRevisionDescriptor revisionDescriptor) throws SQLException { PreparedStatement statement = connection.prepareStatement( "select vh.VERSION_ID from VERSION_HISTORY vh, URI u " + "where vh.URI_ID = u.URI_ID and u.URI_STRING = ? and vh.REVISION_NO" + getRevisionNumberAsWhereQueryFragement(revisionDescriptor.getRevisionNumber())); try { statement.setString(1, uri.toString()); ResultSet res = statement.executeQuery(); try { res.next(); return res.getLong(1); } finally { close(res); } } finally { close(statement); } } private void insertEmptyContent(Connection connection, long versionContentId) throws SQLException { PreparedStatement statement = connection.prepareStatement( "insert into VERSION_CONTENT (VERSION_ID, CONTENT) values (?, EMPTY_BLOB())"); try { statement.setLong(1, versionContentId); statement.executeUpdate(); } finally { close(statement); } } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
