001/* 002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the Eclipse Public License v1.0 006 * which accompanies this distribution, and is available at 007 * http://www.eclipse.org/legal/epl-v10.html 008 * 009 * Contributors: 010 * Florent Guillaume 011 */ 012 013package org.nuxeo.ecm.core.storage.sql; 014 015import java.sql.Connection; 016import java.sql.ResultSet; 017import java.sql.Statement; 018import java.util.ArrayList; 019import java.util.HashMap; 020import java.util.List; 021import java.util.Map; 022 023import org.apache.commons.logging.Log; 024import org.apache.commons.logging.LogFactory; 025import org.nuxeo.runtime.api.Framework; 026 027/** 028 * @author Florent Guillaume 029 */ 030public class DatabaseOracle extends DatabaseHelper { 031 032 private static final Log log = LogFactory.getLog(DatabaseOracle.class); 033 034 public static DatabaseHelper INSTANCE = new DatabaseOracle(); 035 036 private static final String DEF_SERVER = "localhost"; 037 038 private static final String DEF_URL = "jdbc:oracle:thin:@" + DEF_SERVER + ":1521:XE"; 039 040 private static final String DEF_USER = "nuxeo"; 041 042 private static final String DEF_PASSWORD = "nuxeo"; 043 044 private static final String CONTRIB_XML = "OSGI-INF/test-repo-repository-oracle-contrib.xml"; 045 046 private static final String DRIVER = "oracle.jdbc.OracleDriver"; 047 048 private void setProperties() { 049 Framework.getProperties().setProperty(REPOSITORY_PROPERTY, repositoryName); 050 setProperty(URL_PROPERTY, DEF_URL); 051 setProperty(USER_PROPERTY, DEF_USER); 052 setProperty(PASSWORD_PROPERTY, DEF_PASSWORD); 053 setProperty(DRIVER_PROPERTY, DRIVER); 054 setProperty(ID_TYPE_PROPERTY, DEF_ID_TYPE); 055 } 056 057 @Override 058 public void setUp() throws Exception { 059 super.setUp(); 060 Class.forName(DRIVER); 061 setProperties(); 062 Connection connection = getConnection(Framework.getProperty(URL_PROPERTY), 063 Framework.getProperty(USER_PROPERTY), Framework.getProperty(PASSWORD_PROPERTY)); 064 doOnAllTables(connection, null, Framework.getProperty(USER_PROPERTY).toUpperCase(), 065 "DROP TABLE \"%s\" CASCADE CONSTRAINTS PURGE"); 066 dropSequences(connection); 067 connection.close(); 068 } 069 070 public void dropSequences(Connection connection) throws Exception { 071 List<String> sequenceNames = new ArrayList<String>(); 072 Statement st = connection.createStatement(); 073 ResultSet rs = st.executeQuery("SELECT SEQUENCE_NAME FROM USER_SEQUENCES"); 074 while (rs.next()) { 075 String sequenceName = rs.getString(1); 076 if (sequenceName.indexOf('$') != -1) { 077 continue; 078 } 079 sequenceNames.add(sequenceName); 080 } 081 rs.close(); 082 for (String sequenceName : sequenceNames) { 083 String sql = String.format("DROP SEQUENCE \"%s\"", sequenceName); 084 log.trace("SQL: " + sql); 085 st.execute(sql); 086 } 087 st.close(); 088 } 089 090 @Override 091 public String getDeploymentContrib() { 092 return CONTRIB_XML; 093 } 094 095 @Override 096 public RepositoryDescriptor getRepositoryDescriptor() { 097 RepositoryDescriptor descriptor = new RepositoryDescriptor(); 098 descriptor.xaDataSourceName = "oracle.jdbc.xa.client.OracleXADataSource"; 099 Map<String, String> properties = new HashMap<String, String>(); 100 properties.put("URL", Framework.getProperty(URL_PROPERTY)); 101 properties.put("User", Framework.getProperty(USER_PROPERTY)); 102 properties.put("Password", Framework.getProperty(PASSWORD_PROPERTY)); 103 descriptor.properties = properties; 104 descriptor.idType = Framework.getProperty(ID_TYPE_PROPERTY); 105 return descriptor; 106 } 107 108 @Override 109 public boolean supportsClustering() { 110 return true; 111 } 112 113 @Override 114 public boolean supportsSoftDelete() { 115 return true; 116 } 117 118 @Override 119 public boolean supportsSequenceId() { 120 return true; 121 } 122 123}