Index: D:/workspace/compass-trunk/main/src/org/compass/gps/device/jdbc/AbstractJdbcGpsDevice.java =================================================================== --- D:/workspace/compass-trunk/main/src/org/compass/gps/device/jdbc/AbstractJdbcGpsDevice.java (revision 3529) +++ D:/workspace/compass-trunk/main/src/org/compass/gps/device/jdbc/AbstractJdbcGpsDevice.java (working copy) @@ -23,13 +23,16 @@ import java.sql.SQLException; import javax.sql.DataSource; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.compass.core.CompassException; import org.compass.core.CompassSession; import org.compass.gps.CompassGpsException; import org.compass.gps.device.AbstractGpsDevice; +import org.compass.gps.device.jdbc.JdbcUtils; import org.compass.gps.device.jdbc.dialect.DefaultJdbcDialect; +import org.compass.gps.device.jdbc.dialect.OracleJdbcDialect; import org.compass.gps.device.jdbc.dialect.JdbcDialect; /** @@ -48,7 +51,7 @@ */ public abstract class AbstractJdbcGpsDevice extends AbstractGpsDevice implements JdbcGpsDevice { - protected Log log = LogFactory.getLog(getClass()); + protected sun.rmi.runtime.Log log = LogFactory.getLog(getClass()); /** * A hint object which provides the statement query to execute or the actual @@ -105,12 +108,28 @@ protected DataSource dataSource; - protected JdbcDialect dialect = new DefaultJdbcDialect(); + protected JdbcDialect dialect; protected void doStart() throws CompassGpsException { if (dataSource == null) { throw new IllegalArgumentException("dataSource property must be set"); } + + Connection connection = JdbcUtils.getConnection(dataSource); + try { + String databaseProductName = connection.getMetaData().getDatabaseProductName(); + + if (StringUtils.startsWithIgnoreCase(databaseProductName, "Oracle")) { + dialect = new OracleJdbcDialect(); + } else { + dialect = new DefaultJdbcDialect(); + } + } catch (Exception e) { + log.warn("Failed to detect database dialect", e); + throw new JdbcGpsDeviceException("Failed to detect database dialect", e); + } finally { + JdbcUtils.closeConnection(connection); + } } /** Index: D:/workspace/compass-trunk/main/src/org/compass/gps/device/jdbc/dialect/OracleJdbcDialect.java =================================================================== --- D:/workspace/compass-trunk/main/src/org/compass/gps/device/jdbc/dialect/OracleJdbcDialect.java (revision 0) +++ D:/workspace/compass-trunk/main/src/org/compass/gps/device/jdbc/dialect/OracleJdbcDialect.java (revision 0) @@ -0,0 +1,48 @@ +/* + * Copyright 2004-2008 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.compass.gps.device.jdbc.dialect; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Types; + +import org.compass.gps.device.jdbc.dialect.DefaultJdbcDialect; +import org.compass.gps.device.jdbc.mapping.ColumnMapping; +import org.compass.gps.device.jdbc.mapping.VersionColumnMapping; + +/** + * DefaultJdbcDialect with the setParameter method compatible with Oracle JDBC Drivers. + * + * @author fabiomatos + */ +public class IndexerDefaultJdbcDialect extends DefaultJdbcDialect { + + /** + * @see org.compass.gps.device.jdbc.dialect.DefaultJdbcDialect#setParameter(java.sql.PreparedStatement, int, + * java.lang.String) + */ + @Override + public void setParameter(final PreparedStatement ps, final int paramIndex, final String value) throws SQLException { + if (value != null) { + ps.setObject(paramIndex, value); + } else { + throw new IllegalArgumentException("Failed to set parameter with index [" + paramIndex + "] and value [" + + value + "] , not supported"); + } + } +}