/** * Load the shared objects up front, replace them in the xforms/jobs loaded from XML. We do this * for performance reasons. * * @throws KettleException */ protected void loadSharedObjects() throws KettleException { sharedObjects = new SharedObjects(); for (ObjectId id : rep.getDatabaseIDs(false)) { DatabaseMeta databaseMeta = rep.loadDatabaseMeta(id, null); validateImportedElement(importRules, databaseMeta); sharedObjects.storeObject(databaseMeta); } ObjectId[] slaveIDs = rep.getSlaveIDs(false); List<SlaveServer> slaveServers = new ArrayList<SlaveServer>(slaveIDs.length); for (ObjectId id : slaveIDs) { SlaveServer slaveServer = rep.loadSlaveServer(id, null); validateImportedElement(importRules, slaveServer); sharedObjects.storeObject(slaveServer); slaveServers.add(slaveServer); } for (ObjectId id : rep.getClusterIDs(false)) { ClusterSchema clusterSchema = rep.loadClusterSchema(id, slaveServers, null); validateImportedElement(importRules, clusterSchema); sharedObjects.storeObject(clusterSchema); } for (ObjectId id : rep.getPartitionSchemaIDs(false)) { PartitionSchema partitionSchema = rep.loadPartitionSchema(id, null); validateImportedElement(importRules, partitionSchema); sharedObjects.storeObject(partitionSchema); } }
/** * Add a database to the list of shared databases in ~/.kettle/shared.xml * * @param databaseMeta * @throws KettleException in case there is an error * @throws KettleObjectExistsException if a database with the same name already exists */ public static void addSharedDatabase(DatabaseMeta databaseMeta) throws KettleObjectExistsException, KettleException { // First verify existence... // List<DatabaseMeta> sharedDatabases = loadSharedDatabases(); DatabaseMeta found = DatabaseMeta.findDatabase(sharedDatabases, databaseMeta.getName()); if (found != null) { throw new KettleObjectExistsException( "A database with name '" + databaseMeta.getName() + "' already exists in the shared databases list."); } try { SharedObjects sharedObjects = new SharedObjects(); sharedObjects.storeObject(databaseMeta); sharedObjects.saveToFile(); } catch (Exception e) { throw new KettleException( "It was not possible to add database '" + databaseMeta.getName() + "' to the shared.xml file"); } }