Example usage for javax.transaction.xa XAException getMessage

List of usage examples for javax.transaction.xa XAException getMessage

Introduction

In this page you can find the example usage for javax.transaction.xa XAException getMessage.

Prototype

public String getMessage() 

Source Link

Document

Returns the detail message string of this throwable.

Usage

From source file:com.alibaba.napoli.metamorphosis.client.transaction.TransactionContext.java

/**
 * XA/*from  w ww.  j a  v  a2s . c om*/
 * 
 * @param e
 * @return
 */
XAException toXAException(final Exception e) {
    if (e.getCause() != null && e.getCause() instanceof XAException) {
        final XAException original = (XAException) e.getCause();
        final XAException xae = new XAException(original.getMessage());
        xae.errorCode = original.errorCode;
        xae.initCause(original);
        return xae;
    }

    if (e instanceof XAException) {
        // ((XAException) e).errorCode = XAException.XAER_RMFAIL;
        return (XAException) e;
    }

    final XAException xae = new XAException(e.getMessage());
    xae.errorCode = XAException.XAER_RMFAIL;
    xae.initCause(e);
    return xae;
}

From source file:org.apache.hadoop.hive.metastore.MyXid.java

public boolean createDatabaseByDistributeTransaction(Database db) throws MetaException {
    if (db.getMetastore() == null) {
        String slaveURL = getSegmentUrlByDbNameHashCode(db.getName());
        db.setMetastore(slaveURL);/*from  w  w w.j  a  va  2s .c o  m*/
    }
    int hashcode = getHashForDb(db.getName());
    db.setName(db.getName().toLowerCase());

    boolean success = false;

    Connection masterConn = null;
    Connection slaveConn = null;

    PGXADataSource masterDS = null;
    PGXADataSource slaveDS = null;

    masterDS = getXADataSource(globalDbUrl, user, passwd);
    slaveDS = getXADataSource(db.getMetastore(), user, passwd);

    XAConnection masterDSXaConn = null;
    XAConnection slaveDSXaConn = null;

    XAResource masterSaRes = null;
    XAResource slaveSaRes = null;

    int formatID = genFormatID();
    Xid masterXid = new MyXid(formatID, new byte[] { 0x01 }, new byte[] { 0x02 });
    Xid slaveXid = new MyXid(formatID, new byte[] { 0x11 }, new byte[] { 0x12 });

    PreparedStatement masterStmt = null;
    PreparedStatement slaveStmt = null;

    try {
        masterDSXaConn = masterDS.getXAConnection();
        slaveDSXaConn = slaveDS.getXAConnection();

        masterSaRes = masterDSXaConn.getXAResource();
        slaveSaRes = slaveDSXaConn.getXAResource();

        masterConn = masterDSXaConn.getConnection();
        slaveConn = slaveDSXaConn.getConnection();

        masterStmt = masterConn
                .prepareStatement("insert into router(db_name, seg_addr,hashcode, owner) values(?,?,?,?)");
        slaveStmt = slaveConn
                .prepareStatement("insert into dbs(name, hdfs_schema, description, owner) VALUES(?,?,?,?)");

        try {
            masterSaRes.start(masterXid, XAResource.TMNOFLAGS);

            masterStmt.setString(1, db.getName());
            masterStmt.setString(2, db.getMetastore());
            masterStmt.setInt(3, hashcode);
            masterStmt.setString(4, db.getOwner());
            masterStmt.executeUpdate();

            masterSaRes.end(masterXid, XAResource.TMSUCCESS);

            slaveSaRes.start(slaveXid, XAResource.TMNOFLAGS);

            slaveStmt.setString(1, db.getName());
            slaveStmt.setString(2, db.getHdfsscheme());
            slaveStmt.setString(3, db.getDescription());
            slaveStmt.setString(4, db.getOwner());
            slaveStmt.executeUpdate();

            slaveSaRes.end(slaveXid, XAResource.TMSUCCESS);

            int masterRet = masterSaRes.prepare(masterXid);
            int slaveRet = slaveSaRes.prepare(slaveXid);

            Warehouse wh = new Warehouse(hiveConf);
            Path databasePath = wh.getDefaultDatabasePath(db.getName(), db.getHdfsscheme());

            if (masterRet == XAResource.XA_OK && slaveRet == XAResource.XA_OK && wh.mkdirs(databasePath)) {
                masterSaRes.commit(masterXid, false);
                slaveSaRes.commit(slaveXid, false);

                success = true;
            }
        } catch (XAException e) {
            LOG.error("XAException create database error, db=" + db.getName() + ", msg=" + e.getMessage());
            e.printStackTrace();
            throw new MetaException(e.getMessage());
        }
    } catch (SQLException e) {
        LOG.error("SQLException create database error, db=" + db.getName() + ", msg=" + e.getMessage());
        e.printStackTrace();
        throw new MetaException(e.getMessage());
    } finally {
        if (!success) {
            try {
                masterSaRes.rollback(masterXid);
            } catch (Exception x) {

            }

            try {
                slaveSaRes.rollback(slaveXid);
            } catch (Exception x) {

            }
        }

        closeStatement(masterStmt);
        closeStatement(slaveStmt);

        closeConnection(masterConn);
        closeConnection(slaveConn);

        closeXAConnection(masterDSXaConn);
        closeXAConnection(slaveDSXaConn);
    }

    return success;
}

From source file:org.apache.hadoop.hive.metastore.MyXid.java

public boolean dropDatabaseByDistributeTransaction(String name) throws MetaException {
    boolean success = false;
    name = name.toLowerCase();/*from  w  w w.  j a v  a2 s  . c o m*/
    Connection masterConn = null;
    Connection slaveConn = null;

    PGXADataSource masterDS = null;
    PGXADataSource slaveDS = null;

    masterDS = getXADataSource(globalDbUrl, user, passwd);

    String slaveURL = getSegmentDBURL(name);
    slaveDS = getXADataSource(slaveURL, user, passwd);

    XAConnection masterDSXaConn = null;
    XAConnection slaveDSXaConn = null;

    int formatID = genFormatID();
    Xid masterXid = new MyXid(formatID, new byte[] { 0x01 }, new byte[] { 0x02 });
    Xid slaveXid = new MyXid(formatID, new byte[] { 0x11 }, new byte[] { 0x12 });

    XAResource masterSaRes = null;
    XAResource slaveSaRes = null;
    Statement masterStmt = null;
    Statement slaveStmt = null;

    try {
        masterDSXaConn = masterDS.getXAConnection();
        slaveDSXaConn = slaveDS.getXAConnection();

        masterSaRes = masterDSXaConn.getXAResource();
        slaveSaRes = slaveDSXaConn.getXAResource();

        masterConn = masterDSXaConn.getConnection();
        slaveConn = slaveDSXaConn.getConnection();

        masterStmt = masterConn.createStatement();
        slaveStmt = slaveConn.createStatement();

        try {
            masterSaRes.start(masterXid, XAResource.TMNOFLAGS);
            masterStmt.executeUpdate("delete from router where db_name='" + name + "'");
            masterStmt.executeUpdate("delete from dbpriv where db_name='" + name + "'");
            masterStmt.executeUpdate("delete from tblpriv where db_name='" + name + "'");
            masterSaRes.end(masterXid, XAResource.TMSUCCESS);

            slaveSaRes.start(slaveXid, XAResource.TMNOFLAGS);
            slaveStmt.executeUpdate("delete from dbs where name='" + name + "'");
            slaveSaRes.end(slaveXid, XAResource.TMSUCCESS);

            int masterRet = masterSaRes.prepare(masterXid);
            int slaveRet = slaveSaRes.prepare(slaveXid);

            Warehouse wh = new Warehouse(hiveConf);

            if (masterRet == XAResource.XA_OK && slaveRet == XAResource.XA_OK
                    && wh.deleteDir(wh.getDefaultDatabasePath(name), true)) {
                masterSaRes.commit(masterXid, false);
                slaveSaRes.commit(slaveXid, false);

                success = true;
            }
        } catch (XAException e) {
            LOG.error("drop database error, db=" + name + ", msg=" + e.getMessage());
            throw new MetaException(e.getMessage());
        }
    } catch (Exception e) {
        LOG.error("create database error, db=" + name + ", msg=" + e.getMessage());
        throw new MetaException(e.getMessage());
    } finally {
        if (!success) {
            try {
                masterSaRes.rollback(masterXid);
            } catch (Exception x) {

            }

            try {
                slaveSaRes.rollback(slaveXid);
            } catch (Exception x) {

            }
        }

        closeStatement(masterStmt);
        closeStatement(slaveStmt);

        closeConnection(masterConn);
        closeConnection(slaveConn);

        closeXAConnection(masterDSXaConn);
        closeXAConnection(slaveDSXaConn);
    }

    if (success) {
        Statement stmt = null;
        Connection con = null;
        try {
            con = getGlobalConnection();
            stmt = con.createStatement();
            String sql = "delete from dbsensitivity where db_name='" + name + "'";
            stmt.executeUpdate(sql);

            sql = "delete from tblsensitivity where db_name='" + name + "'";
            stmt.executeUpdate(sql);
        } catch (Exception e1) {
            LOG.error("update tblsenstivity table error, db=" + name + ", msg=" + e1.getMessage());
        } finally {
            closeStatement(stmt);
            closeConnection(con);
        }
    }

    return success;
}

From source file:org.apache.hadoop.hive.metastore.MyXid.java

public boolean dropUserByDistributeTransaction(String userName) throws NoSuchObjectException, MetaException {

    boolean success = false;

    Connection masterConn = null;

    PGXADataSource masterDS = null;/*from ww  w.  ja  v a2s .  co  m*/

    masterDS = getXADataSource(globalDbUrl, user, passwd);

    Set<String> slaveURLSet = getAllSegments();
    int size = slaveURLSet.size();

    PGXADataSource[] slaveDSArray = new PGXADataSource[size];
    XAConnection[] slaveDSXaConnArray = new XAConnection[size];
    XAResource[] slaveSaResArray = new XAResource[size];
    Connection[] slaveConArray = new Connection[size];
    Statement[] slaveStmtArray = new Statement[size];
    Xid[] slaveXidArray = new Xid[size];

    int index = 0;
    for (String slaveURL : slaveURLSet) {
        slaveDSArray[index] = getXADataSource(slaveURL, user, passwd);
        index++;
    }

    XAConnection masterDSXaConn = null;

    int formatID = genFormatID();

    try {
        masterDSXaConn = masterDS.getXAConnection();

        for (int i = 0; i < size; i++) {
            slaveDSXaConnArray[i] = slaveDSArray[i].getXAConnection();
            slaveSaResArray[i] = slaveDSXaConnArray[i].getXAResource();
            slaveConArray[i] = slaveDSXaConnArray[i].getConnection();
            slaveStmtArray[i] = slaveConArray[i].createStatement();

            byte id1 = (byte) ((i + 2) * 2);
            byte id2 = (byte) (id1 + 1);

            slaveXidArray[i] = new MyXid(formatID, new byte[] { id1 }, new byte[] { id2 });
        }

        XAResource masterSaRes = masterDSXaConn.getXAResource();
        masterConn = masterDSXaConn.getConnection();
        Statement masterStmt = masterConn.createStatement();
        Xid masterXid = new MyXid(formatID, new byte[] { 0x01 }, new byte[] { 0x02 });

        try {
            masterSaRes.start(masterXid, XAResource.TMNOFLAGS);
            masterStmt.executeUpdate("delete from tdwuser where user_name='" + userName.toLowerCase() + "'");
            masterSaRes.end(masterXid, XAResource.TMSUCCESS);

            for (int i = 0; i < size; i++) {
                slaveSaResArray[i].start(slaveXidArray[i], XAResource.TMNOFLAGS);
                slaveStmtArray[i]
                        .executeUpdate("delete from dbpriv where user_name='" + userName.toLowerCase() + "'");
                slaveStmtArray[i]
                        .executeUpdate("delete from tblpriv where user_name='" + userName.toLowerCase() + "'");
                slaveSaResArray[i].end(slaveXidArray[i], XAResource.TMSUCCESS);
            }

            boolean isAllPred = true;
            int masterRet = masterSaRes.prepare(masterXid);

            if (masterRet == XAResource.XA_OK) {
                int[] slaveRetArray = new int[size];
                for (int i = 0; i < size; i++) {
                    slaveRetArray[i] = slaveSaResArray[i].prepare(slaveXidArray[i]);

                    if (slaveRetArray[i] == XAResource.XA_OK) {
                        continue;
                    } else {
                        isAllPred = false;
                        break;
                    }
                }

                if (isAllPred) {
                    masterSaRes.commit(masterXid, false);
                    for (int i = 0; i < size; i++) {
                        slaveSaResArray[i].commit(slaveXidArray[i], false);
                    }

                    success = true;
                }
            }
        } catch (XAException e) {
            LOG.error("drop user error, user=" + userName + ", msg=" + e.getMessage());
            throw new MetaException(e.getMessage());
        }
    } catch (SQLException e) {
        LOG.error("drop user error, user=" + userName + ", msg=" + e.getMessage());
        throw new MetaException(e.getMessage());
    } finally {
        closeConnection(masterConn);
        closeXAConnection(masterDSXaConn);

        for (int i = 0; i < size; i++) {
            closeConnection(slaveConArray[i]);
            closeXAConnection(slaveDSXaConnArray[i]);
        }
    }

    return success;
}

From source file:org.apache.hadoop.hive.metastore.MyXid.java

public List<DbPriv> getAuthOnDbsByDistributeTransaction(String who) throws MetaException {
    boolean success = false;

    List<DbPriv> dbPrivs = new ArrayList<DbPriv>();

    Set<String> slaveURLSet = getAllSegments();
    int size = slaveURLSet.size();

    who = who.toLowerCase();/*w w  w.  j a v a 2s.co  m*/

    PGXADataSource[] slaveDSArray = new PGXADataSource[size];
    XAConnection[] slaveDSXaConnArray = new XAConnection[size];
    XAResource[] slaveSaResArray = new XAResource[size];
    Connection[] slaveConArray = new Connection[size];
    Statement[] slaveStmtArray = new Statement[size];
    Xid[] slaveXidArray = new Xid[size];

    int index = 0;
    for (String slaveURL : slaveURLSet) {
        slaveDSArray[index] = getXADataSource(slaveURL, user, passwd);
        index++;
    }

    int formatID = genFormatID();

    try {
        for (int i = 0; i < size; i++) {
            slaveDSXaConnArray[i] = slaveDSArray[i].getXAConnection();
            slaveSaResArray[i] = slaveDSXaConnArray[i].getXAResource();
            slaveConArray[i] = slaveDSXaConnArray[i].getConnection();
            slaveStmtArray[i] = slaveConArray[i].createStatement();

            byte id1 = (byte) ((i + 2) * 2);
            byte id2 = (byte) (id1 + 1);

            slaveXidArray[i] = new MyXid(formatID, new byte[] { id1 }, new byte[] { id2 });
        }

        try {
            for (int i = 0; i < size; i++) {
                slaveSaResArray[i].start(slaveXidArray[i], XAResource.TMNOFLAGS);

                ResultSet dbPrivSet = slaveStmtArray[i]
                        .executeQuery("select alter_priv, create_priv, createview_priv, "
                                + "delete_priv, drop_priv, index_priv, insert_priv, select_priv, "
                                + "showview_priv, update_priv, db_name from dbpriv where user_name='"
                                + who.toLowerCase() + "'");

                while (dbPrivSet.next()) {
                    DbPriv dbPriv = new DbPriv();
                    dbPriv.setAlterPriv(dbPrivSet.getBoolean(1));
                    dbPriv.setCreatePriv(dbPrivSet.getBoolean(2));
                    dbPriv.setCreateviewPriv(dbPrivSet.getBoolean(3));
                    dbPriv.setDeletePriv(dbPrivSet.getBoolean(4));
                    dbPriv.setDropPriv(dbPrivSet.getBoolean(5));
                    dbPriv.setIndexPriv(dbPrivSet.getBoolean(6));
                    dbPriv.setInsertPriv(dbPrivSet.getBoolean(7));
                    dbPriv.setSelectPriv(dbPrivSet.getBoolean(8));
                    dbPriv.setShowviewPriv(dbPrivSet.getBoolean(9));
                    dbPriv.setUpdatePriv(dbPrivSet.getBoolean(10));
                    dbPriv.setDb(dbPrivSet.getString(11));
                    dbPriv.setUser(who);
                    dbPrivs.add(dbPriv);
                }
                slaveSaResArray[i].end(slaveXidArray[i], XAResource.TMSUCCESS);
            }

            boolean isAllPred = true;

            int[] slaveRetArray = new int[size];
            for (int i = 0; i < size; i++) {
                slaveRetArray[i] = slaveSaResArray[i].prepare(slaveXidArray[i]);

                if (slaveRetArray[i] == XAResource.XA_OK) {
                    continue;
                } else {
                    isAllPred = false;
                    break;
                }
            }

            if (isAllPred) {
                for (int i = 0; i < size; i++) {
                    slaveSaResArray[i].commit(slaveXidArray[i], false);
                }

                success = true;
            }

        } catch (XAException e) {
            LOG.error("get user auth on dbs error, user=" + who + ", msg=" + e.getMessage());
            throw new MetaException(e.getMessage());
        }
    } catch (SQLException e) {
        LOG.error("get user auth on dbs error, user=" + who + ", msg=" + e.getMessage());
        throw new MetaException(e.getMessage());
    } finally {
        for (int i = 0; i < size; i++) {
            closeConnection(slaveConArray[i]);
            closeXAConnection(slaveDSXaConnArray[i]);
        }
    }

    if (success) {
        return dbPrivs;
    } else {
        return null;
    }
}

From source file:org.apache.hadoop.hive.metastore.MyXid.java

public List<DbPriv> getDbAuthAllByDistributeTransaction() throws MetaException {
    boolean success = false;
    List<DbPriv> dbPrivs = new ArrayList<DbPriv>();

    Set<String> slaveURLSet = getAllSegments();
    int size = slaveURLSet.size();

    PGXADataSource[] slaveDSArray = new PGXADataSource[size];
    XAConnection[] slaveDSXaConnArray = new XAConnection[size];
    XAResource[] slaveSaResArray = new XAResource[size];
    Connection[] slaveConArray = new Connection[size];
    Statement[] slaveStmtArray = new Statement[size];
    Xid[] slaveXidArray = new Xid[size];

    int index = 0;
    for (String slaveURL : slaveURLSet) {
        slaveDSArray[index] = getXADataSource(slaveURL, user, passwd);
        index++;//from  ww w.  j a  v a  2  s  .  c o  m
    }

    int formatID = genFormatID();

    try {
        for (int i = 0; i < size; i++) {
            slaveDSXaConnArray[i] = slaveDSArray[i].getXAConnection();
            slaveSaResArray[i] = slaveDSXaConnArray[i].getXAResource();
            slaveConArray[i] = slaveDSXaConnArray[i].getConnection();
            slaveStmtArray[i] = slaveConArray[i].createStatement();

            byte id1 = (byte) ((i + 2) * 2);
            byte id2 = (byte) (id1 + 1);

            slaveXidArray[i] = new MyXid(formatID, new byte[] { id1 }, new byte[] { id2 });
        }

        try {
            for (int i = 0; i < size; i++) {
                slaveSaResArray[i].start(slaveXidArray[i], XAResource.TMNOFLAGS);

                ResultSet dbPrivSet = slaveStmtArray[i]
                        .executeQuery("select alter_priv, create_priv, createview_priv, "
                                + "delete_priv, drop_priv, index_priv, insert_priv, select_priv, "
                                + "showview_priv, update_priv, db_name, user_name from dbpriv ");

                while (dbPrivSet.next()) {
                    DbPriv dbPriv = new DbPriv();
                    dbPriv.setAlterPriv(dbPrivSet.getBoolean(1));
                    dbPriv.setCreatePriv(dbPrivSet.getBoolean(2));
                    dbPriv.setCreateviewPriv(dbPrivSet.getBoolean(3));
                    dbPriv.setDeletePriv(dbPrivSet.getBoolean(4));
                    dbPriv.setDropPriv(dbPrivSet.getBoolean(5));
                    dbPriv.setIndexPriv(dbPrivSet.getBoolean(6));
                    dbPriv.setInsertPriv(dbPrivSet.getBoolean(7));
                    dbPriv.setSelectPriv(dbPrivSet.getBoolean(8));
                    dbPriv.setShowviewPriv(dbPrivSet.getBoolean(9));
                    dbPriv.setUpdatePriv(dbPrivSet.getBoolean(10));
                    dbPriv.setDb(dbPrivSet.getString(11));
                    dbPriv.setUser(dbPrivSet.getString(12));
                    dbPrivs.add(dbPriv);
                }
                slaveSaResArray[i].end(slaveXidArray[i], XAResource.TMSUCCESS);
            }

            boolean isAllPred = true;

            int[] slaveRetArray = new int[size];
            for (int i = 0; i < size; i++) {
                slaveRetArray[i] = slaveSaResArray[i].prepare(slaveXidArray[i]);

                if (slaveRetArray[i] == XAResource.XA_OK) {
                    continue;
                } else {
                    isAllPred = false;
                    break;
                }
            }

            if (isAllPred) {
                for (int i = 0; i < size; i++) {
                    slaveSaResArray[i].commit(slaveXidArray[i], false);
                }

                success = true;
            }

        } catch (XAException e) {
            LOG.error("get all user auth on dbs error, msg=" + e.getMessage());
            throw new MetaException(e.getMessage());
        }
    } catch (SQLException e) {
        LOG.error("get all user auth on dbs error, msg=" + e.getMessage());
        e.printStackTrace();
        throw new MetaException(e.getMessage());
    } finally {
        for (int i = 0; i < size; i++) {
            closeConnection(slaveConArray[i]);
            closeXAConnection(slaveDSXaConnArray[i]);
        }
    }

    if (success) {
        return dbPrivs;
    } else {
        return null;
    }
}

From source file:org.apache.hadoop.hive.metastore.MyXid.java

public boolean dropAuthInDbByDistributeTransaction(String who) throws MetaException {
    boolean success = false;

    Set<String> slaveURLSet = getAllSegments();
    int size = slaveURLSet.size();

    PGXADataSource[] slaveDSArray = new PGXADataSource[size];
    XAConnection[] slaveDSXaConnArray = new XAConnection[size];
    XAResource[] slaveSaResArray = new XAResource[size];
    Connection[] slaveConArray = new Connection[size];
    Statement[] slaveStmtArray = new Statement[size];
    Xid[] slaveXidArray = new Xid[size];

    who = who.toLowerCase();/*from  ww  w .  j a v  a2s .  c  o m*/

    int index = 0;
    for (String slaveURL : slaveURLSet) {
        slaveDSArray[index] = getXADataSource(slaveURL, user, passwd);
        index++;
    }

    int formatID = genFormatID();

    try {
        for (int i = 0; i < size; i++) {
            slaveDSXaConnArray[i] = slaveDSArray[i].getXAConnection();
            slaveSaResArray[i] = slaveDSXaConnArray[i].getXAResource();
            slaveConArray[i] = slaveDSXaConnArray[i].getConnection();
            slaveStmtArray[i] = slaveConArray[i].createStatement();

            byte id1 = (byte) ((i + 2) * 2);
            byte id2 = (byte) (id1 + 1);

            slaveXidArray[i] = new MyXid(formatID, new byte[] { id1 }, new byte[] { id2 });
        }

        try {
            for (int i = 0; i < size; i++) {
                slaveSaResArray[i].start(slaveXidArray[i], XAResource.TMNOFLAGS);
                slaveStmtArray[i]
                        .executeUpdate("delete from dbpriv where user_name='" + who.toLowerCase() + "'");
                slaveSaResArray[i].end(slaveXidArray[i], XAResource.TMSUCCESS);
            }

            boolean isAllPred = true;

            int[] slaveRetArray = new int[size];
            for (int i = 0; i < size; i++) {
                slaveRetArray[i] = slaveSaResArray[i].prepare(slaveXidArray[i]);

                if (slaveRetArray[i] == XAResource.XA_OK) {
                    continue;
                } else {
                    isAllPred = false;
                    break;
                }
            }

            if (isAllPred) {
                for (int i = 0; i < size; i++) {
                    slaveSaResArray[i].commit(slaveXidArray[i], false);
                }

                success = true;
            }

        } catch (XAException e) {
            LOG.error("drop auth in db error, who=" + who + ", msg=" + e.getMessage());
        }
    } catch (SQLException e) {
        LOG.error("drop auth in db error, who=" + who + ", msg=" + e.getMessage());
        throw new MetaException(e.getMessage());
    } finally {
        for (int i = 0; i < size; i++) {
            closeConnection(slaveConArray[i]);
            closeXAConnection(slaveDSXaConnArray[i]);
        }
    }

    return success;
}

From source file:org.apache.hadoop.hive.metastore.MyXid.java

public List<TblPriv> getAuthOnTblsByDistributeTransaction(String who) throws MetaException {
    boolean success = false;

    List<TblPriv> tblPrivs = new ArrayList<TblPriv>();

    Set<String> slaveURLSet = getAllSegments();
    int size = slaveURLSet.size();

    PGXADataSource[] slaveDSArray = new PGXADataSource[size];
    XAConnection[] slaveDSXaConnArray = new XAConnection[size];
    XAResource[] slaveSaResArray = new XAResource[size];
    Connection[] slaveConArray = new Connection[size];
    Statement[] slaveStmtArray = new Statement[size];
    Xid[] slaveXidArray = new Xid[size];

    who = who.toLowerCase();//  ww  w  .j a v a2 s  .c o  m

    int index = 0;
    for (String slaveURL : slaveURLSet) {
        slaveDSArray[index] = getXADataSource(slaveURL, user, passwd);
        index++;
    }

    int formatID = genFormatID();

    try {
        for (int i = 0; i < size; i++) {
            slaveDSXaConnArray[i] = slaveDSArray[i].getXAConnection();
            slaveSaResArray[i] = slaveDSXaConnArray[i].getXAResource();
            slaveConArray[i] = slaveDSXaConnArray[i].getConnection();
            slaveStmtArray[i] = slaveConArray[i].createStatement();

            byte id1 = (byte) ((i + 2) * 2);
            byte id2 = (byte) (id1 + 1);

            slaveXidArray[i] = new MyXid(formatID, new byte[] { id1 }, new byte[] { id2 });
        }

        try {
            for (int i = 0; i < size; i++) {
                slaveSaResArray[i].start(slaveXidArray[i], XAResource.TMNOFLAGS);

                ResultSet tblPrivSet = slaveStmtArray[i]
                        .executeQuery("select alter_priv, create_priv, delete_priv "
                                + ",drop_priv, index_priv, insert_priv, select_priv, update_priv, db_name, tbl_name"
                                + " from tblpriv where user_name='" + who.toLowerCase() + "'");

                while (tblPrivSet.next()) {
                    TblPriv tblPriv = new TblPriv();

                    tblPriv.setAlterPriv(tblPrivSet.getBoolean(1));
                    tblPriv.setCreatePriv(tblPrivSet.getBoolean(2));
                    tblPriv.setDeletePriv(tblPrivSet.getBoolean(3));
                    tblPriv.setDropPriv(tblPrivSet.getBoolean(4));
                    tblPriv.setIndexPriv(tblPrivSet.getBoolean(5));
                    tblPriv.setInsertPriv(tblPrivSet.getBoolean(6));
                    tblPriv.setSelectPriv(tblPrivSet.getBoolean(7));
                    tblPriv.setUpdatePriv(tblPrivSet.getBoolean(8));
                    tblPriv.setDb(tblPrivSet.getString(9));
                    tblPriv.setTbl(tblPrivSet.getString(10));
                    tblPriv.setUser(who);

                    tblPrivs.add(tblPriv);
                }
                slaveSaResArray[i].end(slaveXidArray[i], XAResource.TMSUCCESS);
            }

            boolean isAllPred = true;

            int[] slaveRetArray = new int[size];
            for (int i = 0; i < size; i++) {
                slaveRetArray[i] = slaveSaResArray[i].prepare(slaveXidArray[i]);

                if (slaveRetArray[i] == XAResource.XA_OK) {
                    continue;
                } else {
                    isAllPred = false;
                    break;
                }
            }

            if (isAllPred) {
                for (int i = 0; i < size; i++) {
                    slaveSaResArray[i].commit(slaveXidArray[i], false);
                }

                success = true;
            }

        } catch (XAException e) {
            LOG.error("get user auth on tbls error, user=" + who + ", msg=" + e.getMessage());
            throw new MetaException(e.getMessage());
        }
    } catch (SQLException e) {
        LOG.error("get user auth on tbls error, user=" + who + ", msg=" + e.getMessage());
        throw new MetaException(e.getMessage());
    } finally {
        for (int i = 0; i < size; i++) {
            closeConnection(slaveConArray[i]);
            closeXAConnection(slaveDSXaConnArray[i]);
        }
    }

    if (success) {
        return tblPrivs;
    } else {
        return null;
    }
}

From source file:org.apache.hadoop.hive.metastore.MyXid.java

public List<TblPriv> getAuthOnAllTblsByDistributeTransaction() throws MetaException {
    boolean success = false;

    List<TblPriv> tblPrivs = new ArrayList<TblPriv>();

    Set<String> slaveURLSet = getAllSegments();
    int size = slaveURLSet.size();

    PGXADataSource[] slaveDSArray = new PGXADataSource[size];
    XAConnection[] slaveDSXaConnArray = new XAConnection[size];
    XAResource[] slaveSaResArray = new XAResource[size];
    Connection[] slaveConArray = new Connection[size];
    Statement[] slaveStmtArray = new Statement[size];
    Xid[] slaveXidArray = new Xid[size];

    int index = 0;
    for (String slaveURL : slaveURLSet) {
        slaveDSArray[index] = getXADataSource(slaveURL, user, passwd);
        index++;/*from  w ww.  ja va  2s. c  o  m*/
    }

    int formatID = genFormatID();

    try {
        for (int i = 0; i < size; i++) {
            slaveDSXaConnArray[i] = slaveDSArray[i].getXAConnection();
            slaveSaResArray[i] = slaveDSXaConnArray[i].getXAResource();
            slaveConArray[i] = slaveDSXaConnArray[i].getConnection();
            slaveStmtArray[i] = slaveConArray[i].createStatement();

            byte id1 = (byte) ((i + 2) * 2);
            byte id2 = (byte) (id1 + 1);

            slaveXidArray[i] = new MyXid(formatID, new byte[] { id1 }, new byte[] { id2 });
        }

        try {
            for (int i = 0; i < size; i++) {
                slaveSaResArray[i].start(slaveXidArray[i], XAResource.TMNOFLAGS);

                ResultSet tblPrivSet = slaveStmtArray[i]
                        .executeQuery("select alter_priv, create_priv, delete_priv "
                                + ",drop_priv, index_priv, insert_priv, select_priv, update_priv, user_name, db_name, tbl_name"
                                + " from tblpriv");

                while (tblPrivSet.next()) {
                    TblPriv tblPriv = new TblPriv();

                    tblPriv.setAlterPriv(tblPrivSet.getBoolean(1));
                    tblPriv.setCreatePriv(tblPrivSet.getBoolean(2));
                    tblPriv.setDeletePriv(tblPrivSet.getBoolean(3));
                    tblPriv.setDropPriv(tblPrivSet.getBoolean(4));
                    tblPriv.setIndexPriv(tblPrivSet.getBoolean(5));
                    tblPriv.setInsertPriv(tblPrivSet.getBoolean(6));
                    tblPriv.setSelectPriv(tblPrivSet.getBoolean(7));
                    tblPriv.setUpdatePriv(tblPrivSet.getBoolean(8));
                    tblPriv.setUser(tblPrivSet.getString(9));
                    tblPriv.setDb(tblPrivSet.getString(10));
                    tblPriv.setTbl(tblPrivSet.getString(11));

                    tblPrivs.add(tblPriv);
                }
                slaveSaResArray[i].end(slaveXidArray[i], XAResource.TMSUCCESS);
            }

            boolean isAllPred = true;

            int[] slaveRetArray = new int[size];
            for (int i = 0; i < size; i++) {
                slaveRetArray[i] = slaveSaResArray[i].prepare(slaveXidArray[i]);

                if (slaveRetArray[i] == XAResource.XA_OK) {
                    continue;
                } else {
                    isAllPred = false;
                    break;
                }
            }

            if (isAllPred) {
                for (int i = 0; i < size; i++) {
                    slaveSaResArray[i].commit(slaveXidArray[i], false);
                }

                success = true;
            }

        } catch (XAException e) {
            LOG.error("get user auth on all tbls error, msg=" + e.getMessage());
            throw new MetaException(e.getMessage());
        }
    } catch (SQLException e) {
        LOG.error("get user auth on all tbls error, msg=" + e.getMessage());
        throw new MetaException(e.getMessage());
    } finally {
        for (int i = 0; i < size; i++) {
            closeConnection(slaveConArray[i]);
            closeXAConnection(slaveDSXaConnArray[i]);
        }
    }

    if (success) {
        return tblPrivs;
    } else {
        return null;
    }
}

From source file:org.apache.hadoop.hive.metastore.MyXid.java

public boolean dropAuthInTblByDistributeTransaction(String who) throws MetaException {
    boolean success = false;

    Set<String> slaveURLSet = getAllSegments();
    int size = slaveURLSet.size();

    PGXADataSource[] slaveDSArray = new PGXADataSource[size];
    XAConnection[] slaveDSXaConnArray = new XAConnection[size];
    XAResource[] slaveSaResArray = new XAResource[size];
    Connection[] slaveConArray = new Connection[size];
    Statement[] slaveStmtArray = new Statement[size];
    Xid[] slaveXidArray = new Xid[size];

    who = who.toLowerCase();//w w w.  j a va2  s  . c o  m

    int index = 0;
    for (String slaveURL : slaveURLSet) {
        slaveDSArray[index] = getXADataSource(slaveURL, user, passwd);
        index++;
    }

    int formatID = genFormatID();

    try {
        for (int i = 0; i < size; i++) {
            slaveDSXaConnArray[i] = slaveDSArray[i].getXAConnection();
            slaveSaResArray[i] = slaveDSXaConnArray[i].getXAResource();
            slaveConArray[i] = slaveDSXaConnArray[i].getConnection();
            slaveStmtArray[i] = slaveConArray[i].createStatement();

            byte id1 = (byte) ((i + 2) * 2);
            byte id2 = (byte) (id1 + 1);

            slaveXidArray[i] = new MyXid(formatID, new byte[] { id1 }, new byte[] { id2 });
        }

        try {
            for (int i = 0; i < size; i++) {
                slaveSaResArray[i].start(slaveXidArray[i], XAResource.TMNOFLAGS);
                slaveStmtArray[i]
                        .executeUpdate("delete from tblpriv where user_name='" + who.toLowerCase() + "'");
                slaveSaResArray[i].end(slaveXidArray[i], XAResource.TMSUCCESS);
            }

            boolean isAllPred = true;

            int[] slaveRetArray = new int[size];
            for (int i = 0; i < size; i++) {
                slaveRetArray[i] = slaveSaResArray[i].prepare(slaveXidArray[i]);

                if (slaveRetArray[i] == XAResource.XA_OK) {
                    continue;
                } else {
                    isAllPred = false;
                    break;
                }
            }

            if (isAllPred) {
                for (int i = 0; i < size; i++) {
                    slaveSaResArray[i].commit(slaveXidArray[i], false);
                }

                success = true;
            }

        } catch (XAException e) {
            LOG.error("drop auth in tbl error, who=" + who + ", msg=" + e.getMessage());
        }
    } catch (SQLException e) {
        LOG.error("drop auth in tbl error, who=" + who + ", msg=" + e.getMessage());
        throw new MetaException(e.getMessage());
    } finally {
        for (int i = 0; i < size; i++) {
            closeConnection(slaveConArray[i]);
            closeXAConnection(slaveDSXaConnArray[i]);
        }
    }

    return success;
}