Search in sources :

Example 1 with CommDBManager

use of com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.CommDBManager in project openmq by eclipse-ee4j.

the class DBTool method doDump.

/**
 * dump info about the database. for debugging purpose
 */
private void doDump(String arg, CommDBManager mgrArg) throws SQLException, BrokerException {
    CommDBManager mgr = (mgrArg == null ? dbmgr : mgrArg);
    String[] names = null;
    if (!(mgr instanceof ShareConfigChangeDBManager)) {
        int storeVersion = JDBCStore.STORE_VERSION;
        if (arg != null) {
            try {
                storeVersion = Integer.parseInt(arg);
            } catch (NumberFormatException e) {
                storeVersion = 0;
            }
        }
        if (storeVersion != JDBCStore.STORE_VERSION) {
            // Old store
            names = mgr.getTableNames(storeVersion);
            if (names == null || names.length == 0) {
                throw new BrokerException("version " + arg + " not supported");
            }
        }
    }
    Connection conn = null;
    Exception myex = null;
    try {
        conn = mgr.getConnection(true);
        doDump(conn, names, mgr);
    } catch (SQLException | BrokerException e) {
        myex = e;
        throw e;
    } finally {
        Util.close(null, null, conn, myex, mgr);
    }
}
Also used : CommDBManager(com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.CommDBManager) ShareConfigChangeDBManager(com.sun.messaging.jmq.jmsserver.persist.jdbc.sharecc.ShareConfigChangeDBManager)

Example 2 with CommDBManager

use of com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.CommDBManager in project openmq by eclipse-ee4j.

the class DBTool method dropStoredProcs.

private static void dropStoredProcs(Connection conn, ArrayList<BaseDAO> daos) throws BrokerException {
    CommDBManager mgr = DBManager.getDBManager();
    Iterator<BaseDAO> itr = null;
    if (daos == null) {
        itr = mgr.allDAOIterator();
    } else {
        itr = daos.iterator();
    }
    while (itr.hasNext()) {
        BaseDAO dao = itr.next();
        try {
            Util.RetryStrategy retry = null;
            do {
                try {
                    dao.dropStoredProc(conn);
                    // table created so break from retry loop
                    break;
                } catch (Exception e) {
                    // Exception will be log & re-throw if operation cannot be retry
                    if (retry == null) {
                        retry = new Util.RetryStrategy(mgr);
                    }
                    retry.assertShouldRetry(e);
                }
            } while (true);
        } catch (BrokerException be) {
            Globals.getLogger().logStack(Logger.WARNING, be.getMessage(), be);
        }
    }
}
Also used : CommDBManager(com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.CommDBManager) BaseDAO(com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.BaseDAO) StringUtil(com.sun.messaging.jmq.util.StringUtil)

Example 3 with CommDBManager

use of com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.CommDBManager in project openmq by eclipse-ee4j.

the class DBTool method doDelete.

private void doDelete(String arg, CommDBManager mgrArg, DeleteStatus deleteStatus) throws BrokerException {
    CommDBManager mgr = (mgrArg == null ? dbmgr : mgrArg);
    boolean deleted = false;
    Connection conn = null;
    Exception myex = null;
    try {
        conn = mgr.getConnection(true);
        if (arg == null || arg.length() == 0) {
            if (mgr instanceof ShareConfigChangeDBManager) {
                String[] oldnames = mgr.getAllOldTableNames();
                if (oldnames != null && oldnames.length > 0) {
                    dropTables(conn, mgr.getAllOldTableNames(), true, true, mgr);
                }
            }
            // Check if store exist
            boolean continueOnError = false;
            int status = mgr.checkStoreExists(conn);
            if (status > 0 && !(mgr instanceof ShareConfigChangeDBManager)) {
                // Verify cluster is not active in HA mode
                if (!forceSpecified && Globals.getHAEnabled() && ((DBManager) mgr).isHAClusterActive(conn)) {
                    throw new BrokerException(br.getKString(BrokerResources.E_HA_CLUSTER_STILL_ACTIVE, dbmgr.getClusterID()));
                }
                try {
                    // the tables will be dropped when we are done
                    if (!forceSpecified) {
                        // true = lock
                        mgr.lockTables(conn, true);
                    }
                } catch (BrokerException e) {
                    if (e.getStatusCode() == Status.NOT_FOUND) {
                        // For some reason if version table doesn't exist or
                        // version data is not found we can just ignore the error!
                        continueOnError = true;
                    } else {
                        throw e;
                    }
                }
            } else if (status > 0 && (mgr instanceof ShareConfigChangeDBManager)) {
            } else if (status < 0) {
                // Some tables are missings so try to delete the rest
                // but ignore error if table does not exists
                continueOnError = true;
            } else {
                if (deleteStatus == null) {
                    if (!(mgr instanceof ShareConfigChangeDBManager)) {
                        throw new BrokerException(br.getKString(BrokerResources.E_DATABASE_TABLE_ALREADY_DELETED));
                    } else {
                        throw new BrokerException(br.getKString(BrokerResources.E_SHARECC_TABLE_ALREADY_DELETED, Globals.getClusterID()));
                    }
                } else {
                    deleteStatus.deleted = true;
                }
            }
            if (deleteStatus == null || !deleteStatus.deleted) {
                deleted = dropTables(conn, continueOnError, mgrArg);
                if (deleted && deleteStatus != null) {
                    deleteStatus.deleted = true;
                }
            }
        } else if (arg.equals(ARGU_OLDTBL)) {
            int oldStoreVersion = -1;
            if (checkVersion(conn, VERSION_TBL_37 + dbmgr.getBrokerID(), dbmgr)) {
                oldStoreVersion = JDBCStore.OLD_STORE_VERSION_370;
            } else if (checkVersion(conn, VERSION_TBL_35 + dbmgr.getBrokerID(), dbmgr)) {
                oldStoreVersion = JDBCStore.OLD_STORE_VERSION_350;
            } else {
                throw new BrokerException("Old persistent store (version " + JDBCStore.OLD_STORE_VERSION_370 + ") not found");
            }
            deleted = dropTables(conn, dbmgr.getTableNames(oldStoreVersion), false, false, dbmgr);
        } else {
        // not possible since argument is checked already
        }
        if (standalone && deleted && deleteStatus == null) {
            if (Globals.getHAEnabled()) {
                System.out.println(br.getString(BrokerResources.I_DATABASE_TABLE_HA_DELETED, Globals.getClusterID()));
            } else if (mgr instanceof ShareConfigChangeDBManager) {
                System.out.println(br.getString(BrokerResources.I_SHARECC_DATABASE_TABLE_DELETED, Globals.getClusterID()));
            } else {
                System.out.println(br.getString(BrokerResources.I_DATABASE_TABLE_DELETED));
            }
        }
    } catch (Exception e) {
        myex = e;
        if (debugSpecified) {
            e.printStackTrace();
        }
        if (!(mgr instanceof ShareConfigChangeDBManager)) {
            throw new BrokerException(br.getKString(BrokerResources.E_DELETE_DATABASE_TABLE_FAILED, mgr.getOpenDBURL()), e);
        } else {
            throw new BrokerException(br.getKString(BrokerResources.E_SHARECC_FAIL_DELETE_TABLE, Globals.getClusterID(), mgr.getOpenDBURL()), e);
        }
    } finally {
        Util.close(null, null, conn, myex, mgrArg);
    }
}
Also used : CommDBManager(com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.CommDBManager) ShareConfigChangeDBManager(com.sun.messaging.jmq.jmsserver.persist.jdbc.sharecc.ShareConfigChangeDBManager)

Example 4 with CommDBManager

use of com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.CommDBManager in project openmq by eclipse-ee4j.

the class DBTool method dropTables.

public static boolean dropTables(Connection conn, boolean continueOnError, CommDBManager mgrArg) throws SQLException, BrokerException {
    CommDBManager mgr = (mgrArg == null ? DBManager.getDBManager() : mgrArg);
    boolean deleted = false;
    try {
        Iterator itr = mgr.allDAOIterator();
        while (itr.hasNext()) {
            BaseDAO dao = (BaseDAO) itr.next();
            try {
                Util.RetryStrategy retry = null;
                do {
                    try {
                        dao.dropTable(conn);
                        if (mgr instanceof DBManager) {
                            dao.dropStoredProc(conn);
                        }
                        break;
                    } catch (Exception e) {
                        if (retry == null) {
                            retry = new Util.RetryStrategy(mgr);
                        }
                        retry.assertShouldRetry(e);
                    }
                } while (true);
            } catch (BrokerException be) {
                if (continueOnError) {
                    Globals.getLogger().log(Logger.WARNING, be.toString(), be.getCause());
                } else {
                    throw be;
                }
            }
        }
        deleted = true;
    } catch (Exception e) {
        if (!(mgr instanceof ShareConfigChangeDBManager)) {
            Globals.getLogger().log(Logger.ERROR, BrokerResources.E_DELETE_DATABASE_TABLE_FAILED, e.toString(), e);
        } else {
            Globals.getLogger().log(Logger.ERROR, BrokerResources.E_SHARECC_FAIL_DELETE_TABLE, Globals.getClusterID(), e.toString(), e);
        }
        if (e instanceof SQLException) {
            throw (SQLException) e;
        }
        if (e instanceof BrokerException) {
            throw (BrokerException) e;
        }
        throw new BrokerException(e.getMessage(), e);
    }
    return deleted;
}
Also used : CommDBManager(com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.CommDBManager) ShareConfigChangeDBManager(com.sun.messaging.jmq.jmsserver.persist.jdbc.sharecc.ShareConfigChangeDBManager) CommDBManager(com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.CommDBManager) BaseDAO(com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.BaseDAO) ShareConfigChangeDBManager(com.sun.messaging.jmq.jmsserver.persist.jdbc.sharecc.ShareConfigChangeDBManager) StringUtil(com.sun.messaging.jmq.util.StringUtil)

Example 5 with CommDBManager

use of com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.CommDBManager in project openmq by eclipse-ee4j.

the class DBTool method doRecreate.

private void doRecreate(CommDBManager mgrArg) throws BrokerException {
    CommDBManager mgr = (mgrArg == null ? dbmgr : mgrArg);
    Connection conn = null;
    Throwable myex = null;
    try {
        DeleteStatus deleteStatus = new DeleteStatus();
        doDelete(null, mgr, deleteStatus);
        conn = mgr.getConnection(true);
        createTables(conn, false, mgrArg);
        if (standalone) {
            if (Globals.getHAEnabled()) {
                System.out.println(br.getString(BrokerResources.I_DATABASE_TABLE_HA_CREATED, Globals.getClusterID()));
            } else if (mgr instanceof ShareConfigChangeDBManager) {
                System.out.println(br.getString(BrokerResources.I_SHARECC_DATABASE_TABLE_CREATED, Globals.getClusterID()));
            } else {
                System.out.println(br.getString(BrokerResources.I_DATABASE_TABLE_CREATED));
            }
        }
    } catch (Throwable t) {
        myex = t;
        if (!(mgr instanceof ShareConfigChangeDBManager)) {
            throw new BrokerException(br.getKString(BrokerResources.E_RECREATE_DATABASE_TABLE_FAILED, mgr.getOpenDBURL()), t);
        } else {
            throw new BrokerException(br.getKString(BrokerResources.E_SHARECC_FAIL_RECREATE_TABLE, Globals.getClusterID(), mgr.getOpenDBURL()), t);
        }
    } finally {
        Util.close(null, null, conn, myex, mgrArg);
    }
}
Also used : CommDBManager(com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.CommDBManager) ShareConfigChangeDBManager(com.sun.messaging.jmq.jmsserver.persist.jdbc.sharecc.ShareConfigChangeDBManager)

Aggregations

CommDBManager (com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.CommDBManager)24 BrokerException (com.sun.messaging.jmq.jmsserver.util.BrokerException)13 IOException (java.io.IOException)13 ShareConfigChangeDBManager (com.sun.messaging.jmq.jmsserver.persist.jdbc.sharecc.ShareConfigChangeDBManager)7 BaseDAO (com.sun.messaging.jmq.jmsserver.persist.jdbc.comm.BaseDAO)5 StringUtil (com.sun.messaging.jmq.util.StringUtil)4 ChangeRecordInfo (com.sun.messaging.jmq.jmsserver.persist.api.ChangeRecordInfo)2 ArrayList (java.util.ArrayList)2 ConsumerUID (com.sun.messaging.jmq.jmsserver.core.ConsumerUID)1 DestinationUID (com.sun.messaging.jmq.jmsserver.core.DestinationUID)1 TransactionUID (com.sun.messaging.jmq.jmsserver.data.TransactionUID)1 UID (com.sun.messaging.jmq.util.UID)1