//------------------------------------------------------------------------------ // Desc: Backup // // Tabs: 3 // // Copyright (c) 2003-2006 Novell, Inc. All Rights Reserved. // // This program is free software; you can redistribute it and/or // modify it under the terms of version 2 of the GNU General Public // License as published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, contact Novell, Inc. // // To contact Novell about this file by physical or electronic mail, // you may find current contact information at www.novell.com // // $Id: Backup.java 3109 2006-01-19 13:07:07 -0700 (Thu, 19 Jan 2006) dsanders $ //------------------------------------------------------------------------------ package xflaim; import java.io.FileNotFoundException; /** * This classes provides methods to back up an XFlaim database */ public class Backup { // This constructor doesn't need to do much of anything; it's here mostly // to ensure that Backup does NOT have a public constructor. (The // application is not supposed to call new on Backup; Backup objects // are created by a call to Db.backupBegin Backup( long lThis, Db jdb) { m_this = lThis; m_jdb = jdb; } /** * Finalize method used to release native resources on garbage collection. */ public void finalize() { if (m_this != 0) { _release( m_this); m_this = 0; } m_jdb = null; } /** * Get the transaction ID for this backup operation. * @return Returns the transaction ID for this backup operation. */ public long getBackupTransId() { return _getBackupTransId( m_this); } /** * Gets the transaction ID for the last backup job run on this database. * @return Returns the transaction ID for the last backup job run on the * database associated with this Backup object. */ public long getLastBackupTransId() { return _getLastBackupTransId( m_this); } /** * Performs the backup operation. sBackupPath and * backupClient are mutually exclusive. If backupClient is null, * then an instance of DefaultBackupClient will be created * and sBackupPath passed into its constructor. If * Client is non-null, sBackupPath is ignored. * @param sBackupPath Optional. The full pathname of a file to store the * backed up data. * @param backupClient Optional. If non-null, then it will be used as the backup * client. * @param backupStatus Optional. If non-null, then backupStatus.backupStatus * will be called periodically to inform the application about the * progress of the backup operation. * @return Returns the sequence number of this backup. (This is for * informational purposes only; for instance, users can use it to label * their backup tapes.) * @throws XFlaimException */ public long backup( String sBackupPath, String sPassword, BackupClient backupClient, BackupStatus backupStatus) throws XFlaimException { BackupClient backClient; if (backupClient == null) { try { backClient = new DefaultBackupClient( sBackupPath); } catch (FileNotFoundException e) { throw new XFlaimException( xflaim.RCODE.NE_XFLM_OPENING_FILE, "IOException opening " + sBackupPath + ". Message from JVM was" + e.getMessage()); } } else { backClient = backupClient; } return _backup( m_this, sBackupPath, sPassword, backClient, backupStatus); } /** * Ends the backup operation. * @throws XFlaimException */ public void endBackup() throws XFlaimException { _endBackup( m_this); } // Reassigns the object to "point" to a new F_Backup instance and a new // Db. Called by any of the member functions that take a // Db.backupBegin parameter. Shouldn't be called by outsiders, so it's // not public, but it must be callable for other instances of this class. // NOTE: This function does not result in a call to F_Backup::Release() // because that is done by the native code when the F_Backup object is // reused. Calling setRef() in any case except from within // Db.backupBegin will result in a memory leak on the native side! void setRef( long lBackupRef, Db jdb) { m_this = lBackupRef; m_jdb = jdb; } long getRef() { return m_this; } // PRIVATE METHODS private native void _release( long lThis); private native long _getBackupTransId( long lThis); private native long _getLastBackupTransId( long lThis); private native long _backup( long lThis, String sBackupPath, String sPassword, BackupClient Client, BackupStatus Status) throws XFlaimException; private native void _endBackup( long lThis) throws XFlaimException; private long m_this; private Db m_jdb; }