📄 xaconnectionfactory.java
字号:
public void setPSCacheSize(int size) { psCacheSize = size; } /** * Gets the number of PreparedStatements to be cached for each * Connection. The default value is 10. */ public int getPSCacheSize() { return psCacheSize; } /** * Gets the transaction isolation level of connections. This defaults to * whatever the connection's default iso level is. */ public int getTransactionIsolation() { return transactionIsolation; } public void setTransactionIsolation(int iso) { this.transactionIsolation = iso; } public void setTransactionIsolation(String iso) { if (iso.equals("TRANSACTION_NONE")) { this.transactionIsolation = Connection.TRANSACTION_NONE; } else if (iso.equals("TRANSACTION_READ_COMMITTED")) { this.transactionIsolation = Connection.TRANSACTION_READ_COMMITTED; } else if (iso.equals("TRANSACTION_READ_UNCOMMITTED")) { this.transactionIsolation = Connection.TRANSACTION_READ_UNCOMMITTED; } else if (iso.equals("TRANSACTION_REPEATABLE_READ")) { this.transactionIsolation = Connection.TRANSACTION_REPEATABLE_READ; } else if (iso.equals("TRANSACTION_SERIALIZABLE")) { this.transactionIsolation = Connection.TRANSACTION_SERIALIZABLE; } else { throw new IllegalArgumentException("Setting Isolation level to unknown state: " + iso); } } /** * Sets the XADataSource used to generate XAConnections. This may be * supplied by the vendor, or it may use the wrappers for non-compliant * drivers (see XADataSourceImpl). * @see org.ofbiz.minerva.pool.jdbc.xa.wrapper.XADataSourceImpl */ public void setDataSource(XADataSource dataSource) { source = dataSource; } /** * Gets the XADataSource used to generate XAConnections. */ public XADataSource getDataSource() { return source; } /** * Sets the TransactionManager. */ public void setTransactionManager(TransactionManager tm) { this.tm = tm; } /** * Gets the TransactionManager. */ public TransactionManager getTransactionManager() { return this.tm; } /** * Have XAClientConnections save a stack trace on creation * This is useful for debugging non-closed connections. * It must be used with ReleaseOnCommit option */ public boolean getSaveStackTrace() { return saveStackTrace; } public void setSaveStackTrace(boolean save) { saveStackTrace = save; } /** * Verifies that the data source and transaction manager are accessible. */ public void poolStarted(ObjectPool pool) { if (log.isDebugEnabled()) log.debug("Starting"); super.poolStarted(pool); this.pool = pool; if (source == null) throw new IllegalStateException("Must specify XADataSource to " + getClass().getName()); if (source instanceof XADataSourceImpl) { ((XADataSourceImpl) source).setSaveStackTrace(saveStackTrace); } /* if(tmJndiName == null) throw new IllegalStateException("Must specify TransactionManager JNDI Name to "+getClass().getName()); if(ctx == null) throw new IllegalStateException("Must specify InitialContext to "+getClass().getName()); try { tm = (TransactionManager)ctx.lookup(tmJndiName); } catch(NamingException e) { throw new IllegalStateException("Cannot lookup TransactionManager using specified context and name!"); } */ } /** * Creates a new XAConnection from the provided XADataSource. */ public Object createObject(Object parameters) throws Exception { log.debug("Opening new XAConnection"); Object obj = null; try { if (parameters != null) { String credentials[] = (String[]) parameters; if (credentials.length == 2) obj = source.getXAConnection(credentials[0], credentials[1]); } else if (userName != null && userName.length() > 0) obj = source.getXAConnection(userName, password); else obj = source.getXAConnection(); } catch (SQLException e) { log.error("Can't get an XAConnection", e); throw e; } return obj; } /** * Registers the XAConnection's XAResource with the current transaction (if * there is one). Sets listeners that will handle deregistering and * returning the XAConnection to the pool via callbacks. */ public Object prepareObject(Object pooledObject) { boolean trace = log.isDebugEnabled(); XAConnection con = (XAConnection) pooledObject; con.addConnectionEventListener(listener); Transaction trans = null; try { if (tm.getStatus() != Status.STATUS_NO_TRANSACTION) { trans = tm.getTransaction(); XAResource res = con.getXAResource(); rms.put(con, res); trans.enlistResource(res); if (trace) log.debug("Resource '" + res + "' enlisted for '" + con + "'."); } else { if (trace) log.debug("No transaction right now."); } } catch (Exception e) { //System.out.println("error in prepareObject!!!!!"); e.printStackTrace(); log.error("Unable to register with TransactionManager", e); con.removeConnectionEventListener(listener); throw new RuntimeException("Unable to register with TransactionManager: " + e); } if (con instanceof XAConnectionImpl) { ((XAConnectionImpl) con).setTransactionListener(transListener); ((XAConnectionImpl) con).setPSCacheSize(psCacheSize); if (transactionIsolation != DEFAULT_ISOLATION) { try { ((XAConnectionImpl) con).setTransactionIsolation(transactionIsolation); } catch (SQLException sex) { throw new RuntimeException("Unable to setTransactionIsolation: " + sex.getMessage()); } } if (trans != null) { //System.out.println("inserting con: " + con + "into wrapperTx, tx: " + trans); wrapperTx.put(con, trans); // For JDBC 1/2 wrappers, remember which wrapperTx.put(trans, con); // connection goes with a given transaction } } return con; } /** * Closes a connection. */ public void deleteObject(Object pooledObject) { XAConnection con = (XAConnection) pooledObject; try { con.close(); } catch (SQLException e) { } } /** * If a new object is requested and it is a JDBC 1/2 wrapper connection * in the same Transaction as an existing connection, return that same * connection. */ public Object isUniqueRequest() { try { if (tm.getStatus() != Status.STATUS_NO_TRANSACTION) { Transaction trans = tm.getTransaction(); //System.out.println("isUniqueRequest returning conn: " + wrapperTx.get(trans) + " attached to tx: " + trans); return wrapperTx.get(trans); } } catch (Exception e) { } return null; } /** For XAConnectionImpl check that parameters = String[2]{username, password} and that these match the the source connection user and password. Return true for non-XAConnectionImpl sources */ public boolean checkValidObject(Object source, Object parameters) { boolean validObject = true; if (parameters != null && source instanceof XAConnectionImpl) { XAConnectionImpl con = (XAConnectionImpl) source; String credentials[] = (String[]) parameters; if (credentials.length == 2) { String user = con.getUser(); String password = con.getPassword(); boolean validUser = ((user == null) && (credentials[0] == null)) || ((user != null) && user.equals(credentials[0])); boolean validPassword = ((password == null) && (credentials[1] == null)) || ((password != null) && password.equals(credentials[1])); validObject = validUser && validPassword; } } return validObject; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -