You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by jb...@apache.org on 2005/05/02 08:26:03 UTC
svn commit: r165585 [2/42] - in
/incubator/derby/code/trunk/java/client/org/apache/derby: client/
client/am/ client/net/ client/resources/ jdbc/
Modified: incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientDataSourceFactory.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientDataSourceFactory.java?rev=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientDataSourceFactory.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientDataSourceFactory.java Sun May 1 23:25:59 2005
@@ -20,85 +20,74 @@
package org.apache.derby.client;
+import org.apache.derby.jdbc.ClientConnectionPoolDataSource;
import org.apache.derby.jdbc.ClientDataSource;
import org.apache.derby.jdbc.ClientXADataSource;
-import org.apache.derby.jdbc.ClientConnectionPoolDataSource;
/**
- * The data source factory currrently for ClientDataSource only.
- * This factory will support XA and pooling-enabled data sources in the future.
- * <p>
- * This factory reconstructs a DERBY simple data source object
- * when it is retrieved from JNDI.
- * References are needed since many naming services
- * don't have the ability to store Java objects in their serialized form.
- * When a data source object is bound in this type of naming service the
- * Reference for that object is actually stored by the JNDI implementation,
- * not the data source object itself.
- * <p>
- * A JNDI administrator is responsible for making sure that both the object factory and
- * data source implementation classes provided by a JDBC driver vendor are accessible to
- * the JNDI service provider at runtime.
- * <p>
- * An object factory implements the javax.naming.spi.ObjectFactory interface. This
- * interface contains a single method, getObjectInstance, which is called by a JNDI
- * service provider to reconstruct an object when that object is retrieved from JNDI. A
- * JDBC driver vendor should provide an object factory as part of their JDBC 2.0 product.
+ * The data source factory currrently for ClientDataSource only. This factory will support XA and pooling-enabled data
+ * sources in the future.
+ * <p/>
+ * This factory reconstructs a DERBY simple data source object when it is retrieved from JNDI. References are needed
+ * since many naming services don't have the ability to store Java objects in their serialized form. When a data source
+ * object is bound in this type of naming service the Reference for that object is actually stored by the JNDI
+ * implementation, not the data source object itself.
+ * <p/>
+ * A JNDI administrator is responsible for making sure that both the object factory and data source implementation
+ * classes provided by a JDBC driver vendor are accessible to the JNDI service provider at runtime.
+ * <p/>
+ * An object factory implements the javax.naming.spi.ObjectFactory interface. This interface contains a single method,
+ * getObjectInstance, which is called by a JNDI service provider to reconstruct an object when that object is retrieved
+ * from JNDI. A JDBC driver vendor should provide an object factory as part of their JDBC 2.0 product.
*
* @see ClientDataSource
- **/
-public class ClientDataSourceFactory implements javax.naming.spi.ObjectFactory
-{
- static final String className__ = "org.apache.derby.jdbc.ClientDataSourceFactory";
-
- public ClientDataSourceFactory ()
- { }
-
- /**
- * Reconstructs a ClientDataSource object from a JNDI data source reference.
- * <p>
- * The getObjectInstance() method is passed a reference that corresponds to the object
- * being retrieved as its first parameter. The other parameters are optional in the case of
- * JDBC data source objects. The object factory should use the information contained in
- * the reference to reconstruct the data source. If for some reason, a data source object cannot
- * be reconstructed from the reference, a value of null may be returned. This allows
- * other object factories that may be registered in JNDI to be tried. If an exception is
- * thrown then no other object factories are tried.
- *
- * @param refObj
- * The possibly null object containing location or reference information
- * that can be used in creating an object.
- * @param name
- * The name of this object relative to nameContext, or null if no name is specified.
- * @param nameContext
- * Context relative to which the name parameter is specified,
- * or null if name is relative to the default initial context.
- * @param environment
- * Possibly null environment that is used in creating the object.
- * @return
- * object created; null if an object cannot be created
- */
- public Object getObjectInstance (Object refObj,
- javax.naming.Name name,
- javax.naming.Context nameContext,
- java.util.Hashtable environment) throws java.lang.Exception
- {
- javax.naming.Reference ref = (javax.naming.Reference) refObj;
-
- // Create the proper data source object shell.
- ClientDataSource ds = null;
- if (ref.getClassName().equals (ClientDataSource.className__))
- ds = new ClientDataSource();
- else if (ref.getClassName().equals (ClientXADataSource.className__))
- ds = new ClientXADataSource();
- else if (ref.getClassName().equals (ClientConnectionPoolDataSource.className__))
- ds = new ClientConnectionPoolDataSource();
- else
- return null;
+ */
+public class ClientDataSourceFactory implements javax.naming.spi.ObjectFactory {
+ static final String className__ = "org.apache.derby.jdbc.ClientDataSourceFactory";
+
+ public ClientDataSourceFactory() {
+ }
+
+ /**
+ * Reconstructs a ClientDataSource object from a JNDI data source reference.
+ * <p/>
+ * The getObjectInstance() method is passed a reference that corresponds to the object being retrieved as its first
+ * parameter. The other parameters are optional in the case of JDBC data source objects. The object factory should
+ * use the information contained in the reference to reconstruct the data source. If for some reason, a data source
+ * object cannot be reconstructed from the reference, a value of null may be returned. This allows other object
+ * factories that may be registered in JNDI to be tried. If an exception is thrown then no other object factories
+ * are tried.
+ *
+ * @param refObj The possibly null object containing location or reference information that can be used in
+ * creating an object.
+ * @param name The name of this object relative to nameContext, or null if no name is specified.
+ * @param nameContext Context relative to which the name parameter is specified, or null if name is relative to the
+ * default initial context.
+ * @param environment Possibly null environment that is used in creating the object.
+ *
+ * @return object created; null if an object cannot be created
+ */
+ public Object getObjectInstance(Object refObj,
+ javax.naming.Name name,
+ javax.naming.Context nameContext,
+ java.util.Hashtable environment) throws java.lang.Exception {
+ javax.naming.Reference ref = (javax.naming.Reference) refObj;
+
+ // Create the proper data source object shell.
+ ClientDataSource ds = null;
+ if (ref.getClassName().equals(ClientDataSource.className__)) {
+ ds = new ClientDataSource();
+ } else if (ref.getClassName().equals(ClientXADataSource.className__)) {
+ ds = new ClientXADataSource();
+ } else if (ref.getClassName().equals(ClientConnectionPoolDataSource.className__)) {
+ ds = new ClientConnectionPoolDataSource();
+ } else {
+ return null;
+ }
- // Fill in the data source object shell with values from the jndi reference.
- ds.hydrateFromReference (ref);
+ // Fill in the data source object shell with values from the jndi reference.
+ ds.hydrateFromReference(ref);
- return ds;
- }
+ return ds;
+ }
}
Modified: incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientPooledConnection.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientPooledConnection.java?rev=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientPooledConnection.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientPooledConnection.java Sun May 1 23:25:59 2005
@@ -19,189 +19,193 @@
*/
package org.apache.derby.client;
-import org.apache.derby.client.net.NetLogWriter;
import org.apache.derby.client.am.SqlException;
+import org.apache.derby.client.net.NetLogWriter;
import org.apache.derby.jdbc.ClientDataSource;
-public class ClientPooledConnection implements javax.sql.PooledConnection
-{
- private boolean newPC_ = true;
-
- private java.util.Vector listeners_ = null;
- org.apache.derby.client.am.Connection physicalConnection_ = null;
- org.apache.derby.client.net.NetConnection netPhysicalConnection_ = null;
- org.apache.derby.client.net.NetXAConnection netXAPhysicalConnection_ = null;
-
- org.apache.derby.client.am.LogicalConnection logicalConnection_ = null;
-
- protected org.apache.derby.client.am.LogWriter logWriter_ = null;
-
- protected int rmId_ = 0;
-
- // Cached stuff from constructor
- private ClientDataSource ds_;
- private String user_;
- private String password_;
-
- // Constructor for Non-XA pooled connections.
- // Using standard Java APIs, a CPDS is passed in.
- // user/password overrides anything on the ds.
- public ClientPooledConnection (ClientDataSource ds,
- org.apache.derby.client.am.LogWriter logWriter,
- String user,
- String password) throws SqlException
- {
- logWriter_ = logWriter;
- ds_ = ds;
- user_ = user;
- password_ = password;
- listeners_ = new java.util.Vector();
-
- netPhysicalConnection_ = new org.apache.derby.client.net.NetConnection ((NetLogWriter) logWriter_,
- user,
- password,
- ds,
- -1,
- false);
- physicalConnection_ = netPhysicalConnection_;
- }
-
- // Constructor for XA pooled connections only.
- // Using standard Java APIs, a CPDS is passed in.
- // user/password overrides anything on the ds.
- public ClientPooledConnection (ClientDataSource ds,
- org.apache.derby.client.am.LogWriter logWriter,
- String user,
- String password,
- int rmId) throws SqlException
- {
- logWriter_ = logWriter;
- ds_ = ds;
- user_ = user;
- password_ = password;
- rmId_ = rmId;
- listeners_ = new java.util.Vector();
- netXAPhysicalConnection_ = new org.apache.derby.client.net.NetXAConnection ((NetLogWriter) logWriter_,
- user,
- password,
- ds,
- rmId,
- true);
- physicalConnection_ = netXAPhysicalConnection_;
- }
-
- public ClientPooledConnection (ClientDataSource ds,
- org.apache.derby.client.am.LogWriter logWriter
- ) throws SqlException
- {
- logWriter_ = logWriter;
- ds_ = ds;
- listeners_ = new java.util.Vector();
- netPhysicalConnection_ = new org.apache.derby.client.net.NetConnection ((NetLogWriter) logWriter_,
- null,
- null,
- ds,
- -1,
- false);
- physicalConnection_ = netPhysicalConnection_;
- }
-
- protected void finalize() throws java.lang.Throwable
- {
- if (logWriter_ != null) logWriter_.traceEntry (this, "finalize");
- close();
- }
-
- public synchronized void close() throws SqlException
- {
- if (logWriter_ != null) logWriter_.traceEntry (this, "close");
-
- if ( logicalConnection_ != null ) {
- logicalConnection_.nullPhysicalConnection();
- logicalConnection_ = null;
- }
-
- if (physicalConnection_ == null) return;
- try {
- // Even if the physcial connection is marked closed (in the pool),
- // this will close its underlying resources.
- physicalConnection_.closeResources();
- }
- finally {
- physicalConnection_ = null;
- }
- }
-
- // This is the standard API for getting a logical connection handle for a pooled connection.
- // No "resettable" properties are passed, so user, password, and all other properties may not change.
- public synchronized java.sql.Connection getConnection() throws SqlException
- {
- if (logWriter_ != null) logWriter_.traceEntry (this, "getConnection");
- createLogicalConnection ();
-
- if (!newPC_)
- physicalConnection_.reset (logWriter_, user_, password_, ds_, false); // false means do not recompute
- // properties from the dataSource
- // properties don't change
- else {
- physicalConnection_.lightReset(); //poolfix
- }
- newPC_ = false;
-
- if (logWriter_ != null) logWriter_.traceExit (this, "getConnection", logicalConnection_);
- return logicalConnection_;
- }
-
- private void createLogicalConnection () throws SqlException
- {
- if (physicalConnection_ == null)
- throw new SqlException (logWriter_, "getConnection() is not valid on a closed PooledConnection.");
- // Not the usual case, but if we have an existing logical connection, then we must close it by spec.
- // We close the logical connection without notifying the pool manager that this pooled connection is availabe for reuse.
- if (logicalConnection_ != null) logicalConnection_.closeWithoutRecyclingToPool();
- logicalConnection_ = new org.apache.derby.client.am.LogicalConnection (physicalConnection_, this);
- }
-
- public synchronized void addConnectionEventListener (javax.sql.ConnectionEventListener listener)
- {
- if (logWriter_ != null) logWriter_.traceEntry (this, "addConnectionEventListener", listener);
- listeners_.addElement (listener);
- }
-
- public synchronized void removeConnectionEventListener (javax.sql.ConnectionEventListener listener )
- {
- if (logWriter_ != null) logWriter_.traceEntry (this, "removeConnectionEventListener", listener);
- listeners_.removeElement( listener );
- }
-
- // Not public, but needs to be visible to am.LogicalConnection
- public void recycleConnection ()
- {
- if (physicalConnection_.agent_.loggingEnabled())
- physicalConnection_.agent_.logWriter_.traceEntry (this, "recycleConnection");
-
- for (java.util.Enumeration e = listeners_.elements(); e.hasMoreElements(); ) {
- javax.sql.ConnectionEventListener listener = (javax.sql.ConnectionEventListener) e.nextElement();
- javax.sql.ConnectionEvent event = new javax.sql.ConnectionEvent (this);
- listener.connectionClosed (event);
- }
- }
-
- // Not public, but needs to be visible to am.LogicalConnection
- public void trashConnection (SqlException exception)
- {
- for (java.util.Enumeration e = listeners_.elements(); e.hasMoreElements(); ) {
- javax.sql.ConnectionEventListener listener = (javax.sql.ConnectionEventListener) e.nextElement();
- javax.sql.ConnectionEvent event = new javax.sql.ConnectionEvent (this, exception);
- listener.connectionErrorOccurred (event);
- }
- }
-
- // Used by LogicalConnection close when it disassociates itself from the ClientPooledConnection
- public synchronized void nullLogicalConnection ()
- {
- logicalConnection_ = null;
- }
+public class ClientPooledConnection implements javax.sql.PooledConnection {
+ private boolean newPC_ = true;
+
+ private java.util.Vector listeners_ = null;
+ org.apache.derby.client.am.Connection physicalConnection_ = null;
+ org.apache.derby.client.net.NetConnection netPhysicalConnection_ = null;
+ org.apache.derby.client.net.NetXAConnection netXAPhysicalConnection_ = null;
+
+ org.apache.derby.client.am.LogicalConnection logicalConnection_ = null;
+
+ protected org.apache.derby.client.am.LogWriter logWriter_ = null;
+
+ protected int rmId_ = 0;
+
+ // Cached stuff from constructor
+ private ClientDataSource ds_;
+ private String user_;
+ private String password_;
+
+ // Constructor for Non-XA pooled connections.
+ // Using standard Java APIs, a CPDS is passed in.
+ // user/password overrides anything on the ds.
+ public ClientPooledConnection(ClientDataSource ds,
+ org.apache.derby.client.am.LogWriter logWriter,
+ String user,
+ String password) throws SqlException {
+ logWriter_ = logWriter;
+ ds_ = ds;
+ user_ = user;
+ password_ = password;
+ listeners_ = new java.util.Vector();
+
+ netPhysicalConnection_ = new org.apache.derby.client.net.NetConnection((NetLogWriter) logWriter_,
+ user,
+ password,
+ ds,
+ -1,
+ false);
+ physicalConnection_ = netPhysicalConnection_;
+ }
+
+ // Constructor for XA pooled connections only.
+ // Using standard Java APIs, a CPDS is passed in.
+ // user/password overrides anything on the ds.
+ public ClientPooledConnection(ClientDataSource ds,
+ org.apache.derby.client.am.LogWriter logWriter,
+ String user,
+ String password,
+ int rmId) throws SqlException {
+ logWriter_ = logWriter;
+ ds_ = ds;
+ user_ = user;
+ password_ = password;
+ rmId_ = rmId;
+ listeners_ = new java.util.Vector();
+ netXAPhysicalConnection_ = new org.apache.derby.client.net.NetXAConnection((NetLogWriter) logWriter_,
+ user,
+ password,
+ ds,
+ rmId,
+ true);
+ physicalConnection_ = netXAPhysicalConnection_;
+ }
+
+ public ClientPooledConnection(ClientDataSource ds,
+ org.apache.derby.client.am.LogWriter logWriter) throws SqlException {
+ logWriter_ = logWriter;
+ ds_ = ds;
+ listeners_ = new java.util.Vector();
+ netPhysicalConnection_ = new org.apache.derby.client.net.NetConnection((NetLogWriter) logWriter_,
+ null,
+ null,
+ ds,
+ -1,
+ false);
+ physicalConnection_ = netPhysicalConnection_;
+ }
+
+ protected void finalize() throws java.lang.Throwable {
+ if (logWriter_ != null) {
+ logWriter_.traceEntry(this, "finalize");
+ }
+ close();
+ }
+
+ public synchronized void close() throws SqlException {
+ if (logWriter_ != null) {
+ logWriter_.traceEntry(this, "close");
+ }
+
+ if (logicalConnection_ != null) {
+ logicalConnection_.nullPhysicalConnection();
+ logicalConnection_ = null;
+ }
+
+ if (physicalConnection_ == null) {
+ return;
+ }
+ try {
+ // Even if the physcial connection is marked closed (in the pool),
+ // this will close its underlying resources.
+ physicalConnection_.closeResources();
+ } finally {
+ physicalConnection_ = null;
+ }
+ }
+
+ // This is the standard API for getting a logical connection handle for a pooled connection.
+ // No "resettable" properties are passed, so user, password, and all other properties may not change.
+ public synchronized java.sql.Connection getConnection() throws SqlException {
+ if (logWriter_ != null) {
+ logWriter_.traceEntry(this, "getConnection");
+ }
+ createLogicalConnection();
+
+ if (!newPC_) {
+ physicalConnection_.reset(logWriter_, user_, password_, ds_, false); // false means do not recompute
+ }
+ // properties from the dataSource
+ // properties don't change
+ else {
+ physicalConnection_.lightReset(); //poolfix
+ }
+ newPC_ = false;
+
+ if (logWriter_ != null) {
+ logWriter_.traceExit(this, "getConnection", logicalConnection_);
+ }
+ return logicalConnection_;
+ }
+
+ private void createLogicalConnection() throws SqlException {
+ if (physicalConnection_ == null) {
+ throw new SqlException(logWriter_, "getConnection() is not valid on a closed PooledConnection.");
+ }
+ // Not the usual case, but if we have an existing logical connection, then we must close it by spec.
+ // We close the logical connection without notifying the pool manager that this pooled connection is availabe for reuse.
+ if (logicalConnection_ != null) {
+ logicalConnection_.closeWithoutRecyclingToPool();
+ }
+ logicalConnection_ = new org.apache.derby.client.am.LogicalConnection(physicalConnection_, this);
+ }
+
+ public synchronized void addConnectionEventListener(javax.sql.ConnectionEventListener listener) {
+ if (logWriter_ != null) {
+ logWriter_.traceEntry(this, "addConnectionEventListener", listener);
+ }
+ listeners_.addElement(listener);
+ }
+
+ public synchronized void removeConnectionEventListener(javax.sql.ConnectionEventListener listener) {
+ if (logWriter_ != null) {
+ logWriter_.traceEntry(this, "removeConnectionEventListener", listener);
+ }
+ listeners_.removeElement(listener);
+ }
+
+ // Not public, but needs to be visible to am.LogicalConnection
+ public void recycleConnection() {
+ if (physicalConnection_.agent_.loggingEnabled()) {
+ physicalConnection_.agent_.logWriter_.traceEntry(this, "recycleConnection");
+ }
+
+ for (java.util.Enumeration e = listeners_.elements(); e.hasMoreElements();) {
+ javax.sql.ConnectionEventListener listener = (javax.sql.ConnectionEventListener) e.nextElement();
+ javax.sql.ConnectionEvent event = new javax.sql.ConnectionEvent(this);
+ listener.connectionClosed(event);
+ }
+ }
+
+ // Not public, but needs to be visible to am.LogicalConnection
+ public void trashConnection(SqlException exception) {
+ for (java.util.Enumeration e = listeners_.elements(); e.hasMoreElements();) {
+ javax.sql.ConnectionEventListener listener = (javax.sql.ConnectionEventListener) e.nextElement();
+ javax.sql.ConnectionEvent event = new javax.sql.ConnectionEvent(this, exception);
+ listener.connectionErrorOccurred(event);
+ }
+ }
+
+ // Used by LogicalConnection close when it disassociates itself from the ClientPooledConnection
+ public synchronized void nullLogicalConnection() {
+ logicalConnection_ = null;
+ }
}
Modified: incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientXAConnection.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientXAConnection.java?rev=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientXAConnection.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientXAConnection.java Sun May 1 23:25:59 2005
@@ -19,120 +19,112 @@
*/
package org.apache.derby.client;
+import java.sql.Connection;
+import javax.sql.XAConnection;
+import javax.transaction.xa.XAResource;
+
import org.apache.derby.client.am.SqlException;
-import org.apache.derby.jdbc.ClientXADataSource;
-import org.apache.derby.client.net.NetXAConnection;
import org.apache.derby.client.net.NetLogWriter;
-import java.sql.*;
-import javax.sql.*;
-import javax.transaction.xa.*;
-
-public class ClientXAConnection extends ClientPooledConnection implements XAConnection
-{
- private static int rmIdSeed_ = 95688932; // semi-random starting value for rmId
-
- private ClientXADataSource derbyds_ = null;
- private XAResource xares_ = null;
- private org.apache.derby.client.net.NetXAResource netXares_ = null;
- private boolean fFirstGetConnection_ = true;
- private Connection logicalCon_; // logicalConnection_ is inherited from ClientPooledConnection
- // This connection is used to access the indoubt table
- private NetXAConnection controlCon_ = null;
-
- public ClientXAConnection (ClientXADataSource ds,
- org.apache.derby.client.net.NetLogWriter logWtr,
- String userId,
- String password) throws SqlException
- {
- super (ds,logWtr,userId, password, getUnigueRmId());
- derbyds_ = ds;
-
- // Have to instantiate a real connection here,
- // otherwise if XA function is called before the connect happens,
- // an error will be returned
- // Note: conApp will be set after this call
- logicalCon_ = super.getConnection();
-
- netXares_ = new org.apache.derby.client.net.NetXAResource( this,
- rmId_, userId, password, netXAPhysicalConnection_ );
- xares_ = netXares_;
- }
-
- public Connection getConnection() throws SqlException
- {
- if ( fFirstGetConnection_ )
- {
- // Since super.getConnection() has already been called once
- // in the constructor, we don't need to call it again for the
- // call of this method.
- fFirstGetConnection_ = false;
- }
- else
- {
- // A new connection object is required
- logicalCon_ = super.getConnection();
- if( this.physicalConnection_ != null )
- { // have a physical connection, check if a NetXAResource
- if( netXAPhysicalConnection_ != null )
- { // the XAResource is a NetXAResource, re-initialize it
- netXares_.initForReuse();
+import org.apache.derby.client.net.NetXAConnection;
+import org.apache.derby.jdbc.ClientXADataSource;
+
+public class ClientXAConnection extends ClientPooledConnection implements XAConnection {
+ private static int rmIdSeed_ = 95688932; // semi-random starting value for rmId
+
+ private ClientXADataSource derbyds_ = null;
+ private XAResource xares_ = null;
+ private org.apache.derby.client.net.NetXAResource netXares_ = null;
+ private boolean fFirstGetConnection_ = true;
+ private Connection logicalCon_; // logicalConnection_ is inherited from ClientPooledConnection
+ // This connection is used to access the indoubt table
+ private NetXAConnection controlCon_ = null;
+
+ public ClientXAConnection(ClientXADataSource ds,
+ org.apache.derby.client.net.NetLogWriter logWtr,
+ String userId,
+ String password) throws SqlException {
+ super(ds, logWtr, userId, password, getUnigueRmId());
+ derbyds_ = ds;
+
+ // Have to instantiate a real connection here,
+ // otherwise if XA function is called before the connect happens,
+ // an error will be returned
+ // Note: conApp will be set after this call
+ logicalCon_ = super.getConnection();
+
+ netXares_ = new org.apache.derby.client.net.NetXAResource(this,
+ rmId_, userId, password, netXAPhysicalConnection_);
+ xares_ = netXares_;
+ }
+
+ public Connection getConnection() throws SqlException {
+ if (fFirstGetConnection_) {
+ // Since super.getConnection() has already been called once
+ // in the constructor, we don't need to call it again for the
+ // call of this method.
+ fFirstGetConnection_ = false;
+ } else {
+ // A new connection object is required
+ logicalCon_ = super.getConnection();
+ if (this.physicalConnection_ != null) { // have a physical connection, check if a NetXAResource
+ if (netXAPhysicalConnection_ != null) { // the XAResource is a NetXAResource, re-initialize it
+ netXares_.initForReuse();
+ }
+ }
+ }
+ return logicalCon_;
+ }
+
+ private static synchronized int getUnigueRmId() {
+ rmIdSeed_ += 1;
+ return rmIdSeed_;
+ }
+
+ public int getRmId() {
+ return rmId_;
+ }
+
+ public XAResource getXAResource() throws SqlException {
+ if (logWriter_ != null) {
+ logWriter_.traceExit(this, "getXAResource", xares_);
+ }
+
+ return xares_;
+ }
+
+ public ClientXADataSource getDataSource() throws SqlException {
+ if (logWriter_ != null) {
+ logWriter_.traceExit(this, "getDataSource", derbyds_);
+ }
+
+ return derbyds_;
+ }
+
+ public NetXAConnection createControlConnection(NetLogWriter logWriter,
+ String user,
+ String password,
+ org.apache.derby.jdbc.ClientDataSource dataSource,
+ int rmId,
+ boolean isXAConn) throws SqlException {
+
+ controlCon_ = new NetXAConnection(logWriter,
+ user,
+ password,
+ dataSource,
+ rmId,
+ isXAConn);
+ controlCon_.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
+
+ if (logWriter_ != null) {
+ logWriter_.traceExit(this, "createControlConnection", controlCon_);
}
- }
+
+ return controlCon_;
}
- return logicalCon_;
- }
- private static synchronized int getUnigueRmId()
- {
- rmIdSeed_ += 1;
- return rmIdSeed_;
- }
-
- public int getRmId()
- {
- return rmId_;
- }
-
- public XAResource getXAResource() throws SqlException
- {
- if (logWriter_ != null) logWriter_.traceExit (this, "getXAResource", xares_);
-
- return xares_;
- }
-
- public ClientXADataSource getDataSource() throws SqlException
- {
- if (logWriter_ != null) logWriter_.traceExit (this, "getDataSource", derbyds_);
-
- return derbyds_;
- }
-
- public NetXAConnection createControlConnection(NetLogWriter logWriter,
- String user,
- String password,
- org.apache.derby.jdbc.ClientDataSource dataSource,
- int rmId,
- boolean isXAConn) throws SqlException
- {
-
- controlCon_ = new NetXAConnection (
- logWriter,
- user,
- password,
- dataSource,
- rmId,
- isXAConn);
- controlCon_.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
-
- if (logWriter_ != null) logWriter_.traceExit (this, "createControlConnection", controlCon_);
-
- return controlCon_;
- }
-
-
- public synchronized void close() throws SqlException
- {
- super.close();
- }
+
+ public synchronized void close() throws SqlException {
+ super.close();
+ }
}
Modified: incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientXid.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientXid.java?rev=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientXid.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/ClientXid.java Sun May 1 23:25:59 2005
@@ -19,202 +19,187 @@
*/
package org.apache.derby.client;
-import javax.transaction.xa.*;
+import javax.transaction.xa.Xid;
-public class ClientXid implements Xid
-{
- //
- // The format identifier for the Xid. A value of -1 indicates
- // that the NULLXid
- //
- private int formatID_;
-
- //
- // The number of bytes in the global transaction identfier
- //
- private int gtrid_length_;
-
- //
- // The number of bytes in the branch qualifier
- //
- private int bqual_length_;
-
- //
- // The data for the Xid.
- // <p> The Xid is made up of two contiguous parts. The first (of size
- // <b>gtrid_length</b>) is the global transaction identfier and the second
- // (of size <b>bqual_length</b>) is the branch qualifier.
- // <p>If the <b>formatID</b> is -1, indicating the NULLXid, the data is
- // ignored.
- //
- private byte data_[];
-
- //
- // The size of <b>data</b>.
- //
- static private final int XidDATASIZE = 128;
-
- //
- // The maximum size of the global transaction identifier.
- //
- static public final int MAXGTRIDSIZE= 64;
-
- //
- // The maximum size of the branch qualifier.
- //
- static public final int MAXBQUALSIZE= 64;
-
- static private final String hextab_= "0123456789ABCDEF";
-
-
- //
- // Constructs a new null Xid.
- // <p>After construction the data within the Xid should be initialized.
- //
- public ClientXid()
- {
- data_ = new byte[XidDATASIZE];
- gtrid_length_ = 0;
- bqual_length_ = 0;
- formatID_ = -1;
- }
-
- //
- // another contructor
- //
- public ClientXid( int formatID, byte[] gtrid, byte[] bqual )
- {
-
- formatID_ = formatID;
- gtrid_length_ = gtrid.length;
- bqual_length_ = bqual.length;
- data_ = new byte[XidDATASIZE];
- System.arraycopy(gtrid, 0, data_, 0, gtrid_length_);
- System.arraycopy(bqual, 0, data_, gtrid_length_, bqual_length_);
- }
-
- //
- // Return a string representing this Xid for debuging
- //
- // @return the string representation of this Xid
- //
- public String toString()
- {
- StringBuffer d; // Data String, in HeXidecimal
- String s; // Resultant String
- int i;
- int v;
- int L;
-
- L = gtrid_length_ + bqual_length_;
- d = new StringBuffer(L+L);
-
- for( i = 0; i < L; i++ )
- {
- // Convert data string to hex
- v = data_[i] & 0xff;
- d.append(hextab_.charAt(v/16));
- d.append(hextab_.charAt(v&15));
- if ( (i+1)%4 == 0 && (i+1) < L )
- d.append(" ");
- }
-
- s = "{ClientXid: " +
- "formatID(" + formatID_ + "), " +
- "gtrid_length(" + gtrid_length_ + "), " +
- "bqual_length(" + bqual_length_ + "), " +
- "data(" + d.toString() + ")" +
- "}" ;
- return s;
- }
-
- //
- // Returns the branch qualifier for this Xid.
- //
- // @return the branch qualifier
- //
- public byte[] getBranchQualifier()
- {
- byte[] bqual = new byte[bqual_length_];
- System.arraycopy(data_,gtrid_length_,bqual,0,bqual_length_);
- return bqual;
- }
-
- //
- // Set the branch qualifier for this Xid.
- //
- // @param qual a Byte array containing the branch qualifier to be set. If
- // the size of the array exceeds MAXBQUALSIZE, only the first MAXBQUALSIZE
- // elements of qual will be used.
- //
- public void setBranchQualifier( byte[] qual )
- {
- bqual_length_ = qual.length > MAXBQUALSIZE?MAXBQUALSIZE:qual.length;
- System.arraycopy(qual, 0, data_, gtrid_length_, bqual_length_);
- }
-
- //
- // Obtain the format identifier part of the Xid.
- //
- // @return Format identifier. -1 indicates a null Xid
- //
- public int getFormatId()
- {
- return formatID_;
- }
-
- //
- // Set the format identifier part of the Xid.
- //
- // @param Format identifier. -1 indicates a null Xid.
- //
- public void setFormatID(int formatID)
- {
- formatID_ = formatID;
- return;
- }
-
- //
- // Returns the global transaction identifier for this Xid.
- //
- // @return the global transaction identifier
- //
- public byte[] getGlobalTransactionId()
- {
- byte[] gtrid = new byte[gtrid_length_];
- System.arraycopy(data_, 0, gtrid, 0, gtrid_length_);
- return gtrid;
- }
-
- //
- // return fields of Xid
- //
- public byte[] getData()
- {
- return data_;
- }
-
- public int getGtridLength()
- {
- return gtrid_length_;
- }
-
- public int getBqualLength()
- {
- return bqual_length_;
- }
-
- public int hashCode()
- {
- if ( formatID_ == (-1) )
- {
- return (-1);
- }
- return formatID_ + gtrid_length_ - bqual_length_;
- }
-
- public boolean equals(Object obj)
- {
- return org.apache.derby.client.net.NetXAResource.xidsEqual(this, (javax.transaction.xa.Xid)obj);
- }
+public class ClientXid implements Xid {
+ //
+ // The format identifier for the Xid. A value of -1 indicates
+ // that the NULLXid
+ //
+ private int formatID_;
+
+ //
+ // The number of bytes in the global transaction identfier
+ //
+ private int gtrid_length_;
+
+ //
+ // The number of bytes in the branch qualifier
+ //
+ private int bqual_length_;
+
+ //
+ // The data for the Xid.
+ // <p> The Xid is made up of two contiguous parts. The first (of size
+ // <b>gtrid_length</b>) is the global transaction identfier and the second
+ // (of size <b>bqual_length</b>) is the branch qualifier.
+ // <p>If the <b>formatID</b> is -1, indicating the NULLXid, the data is
+ // ignored.
+ //
+ private byte data_[];
+
+ //
+ // The size of <b>data</b>.
+ //
+ static private final int XidDATASIZE = 128;
+
+ //
+ // The maximum size of the global transaction identifier.
+ //
+ static public final int MAXGTRIDSIZE = 64;
+
+ //
+ // The maximum size of the branch qualifier.
+ //
+ static public final int MAXBQUALSIZE = 64;
+
+ static private final String hextab_ = "0123456789ABCDEF";
+
+
+ //
+ // Constructs a new null Xid.
+ // <p>After construction the data within the Xid should be initialized.
+ //
+ public ClientXid() {
+ data_ = new byte[XidDATASIZE];
+ gtrid_length_ = 0;
+ bqual_length_ = 0;
+ formatID_ = -1;
+ }
+
+ //
+ // another contructor
+ //
+ public ClientXid(int formatID, byte[] gtrid, byte[] bqual) {
+
+ formatID_ = formatID;
+ gtrid_length_ = gtrid.length;
+ bqual_length_ = bqual.length;
+ data_ = new byte[XidDATASIZE];
+ System.arraycopy(gtrid, 0, data_, 0, gtrid_length_);
+ System.arraycopy(bqual, 0, data_, gtrid_length_, bqual_length_);
+ }
+
+ //
+ // Return a string representing this Xid for debuging
+ //
+ // @return the string representation of this Xid
+ //
+ public String toString() {
+ StringBuffer d; // Data String, in HeXidecimal
+ String s; // Resultant String
+ int i;
+ int v;
+ int L;
+
+ L = gtrid_length_ + bqual_length_;
+ d = new StringBuffer(L + L);
+
+ for (i = 0; i < L; i++) {
+ // Convert data string to hex
+ v = data_[i] & 0xff;
+ d.append(hextab_.charAt(v / 16));
+ d.append(hextab_.charAt(v & 15));
+ if ((i + 1) % 4 == 0 && (i + 1) < L) {
+ d.append(" ");
+ }
+ }
+
+ s = "{ClientXid: " +
+ "formatID(" + formatID_ + "), " +
+ "gtrid_length(" + gtrid_length_ + "), " +
+ "bqual_length(" + bqual_length_ + "), " +
+ "data(" + d.toString() + ")" +
+ "}";
+ return s;
+ }
+
+ //
+ // Returns the branch qualifier for this Xid.
+ //
+ // @return the branch qualifier
+ //
+ public byte[] getBranchQualifier() {
+ byte[] bqual = new byte[bqual_length_];
+ System.arraycopy(data_, gtrid_length_, bqual, 0, bqual_length_);
+ return bqual;
+ }
+
+ //
+ // Set the branch qualifier for this Xid.
+ //
+ // @param qual a Byte array containing the branch qualifier to be set. If
+ // the size of the array exceeds MAXBQUALSIZE, only the first MAXBQUALSIZE
+ // elements of qual will be used.
+ //
+ public void setBranchQualifier(byte[] qual) {
+ bqual_length_ = qual.length > MAXBQUALSIZE ? MAXBQUALSIZE : qual.length;
+ System.arraycopy(qual, 0, data_, gtrid_length_, bqual_length_);
+ }
+
+ //
+ // Obtain the format identifier part of the Xid.
+ //
+ // @return Format identifier. -1 indicates a null Xid
+ //
+ public int getFormatId() {
+ return formatID_;
+ }
+
+ //
+ // Set the format identifier part of the Xid.
+ //
+ // @param Format identifier. -1 indicates a null Xid.
+ //
+ public void setFormatID(int formatID) {
+ formatID_ = formatID;
+ return;
+ }
+
+ //
+ // Returns the global transaction identifier for this Xid.
+ //
+ // @return the global transaction identifier
+ //
+ public byte[] getGlobalTransactionId() {
+ byte[] gtrid = new byte[gtrid_length_];
+ System.arraycopy(data_, 0, gtrid, 0, gtrid_length_);
+ return gtrid;
+ }
+
+ //
+ // return fields of Xid
+ //
+ public byte[] getData() {
+ return data_;
+ }
+
+ public int getGtridLength() {
+ return gtrid_length_;
+ }
+
+ public int getBqualLength() {
+ return bqual_length_;
+ }
+
+ public int hashCode() {
+ if (formatID_ == (-1)) {
+ return (-1);
+ }
+ return formatID_ + gtrid_length_ - bqual_length_;
+ }
+
+ public boolean equals(Object obj) {
+ return org.apache.derby.client.net.NetXAResource.xidsEqual(this, (javax.transaction.xa.Xid) obj);
+ }
} // class Xid
Modified: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Agent.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Agent.java?rev=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Agent.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Agent.java Sun May 1 23:25:59 2005
@@ -20,275 +20,260 @@
package org.apache.derby.client.am;
-public abstract class Agent
-{
- public SqlException accumulatedReadExceptions_ = null;
-
- private boolean enableBatchedExceptionTracking_;
- private int batchedExceptionLabelIndex_;
- private boolean[] batchedExceptionGenerated_;
-
- Connection connection_; // made friendly for lobs only, refactor !!
- public SectionManager sectionManager_ = null; // temporarily public, make friendly at least !!
-
- public LogWriter logWriter_ = null;
-
- final CrossConverters crossConverters_;
-
- // Exceptions that occur on dnc's implementation of SqlException.getMessage() via stored proc
- // cannot be thrown on the getMessage() invocation because the signature of getMessage() does not
- // allow for throwing an exception.
- // Therefore, we must save the exception and throw it at our very first opportunity.
- SqlException deferredException_;
- void checkForDeferredExceptions() throws SqlException
- {
- if (deferredException_ != null) {
- SqlException temp = deferredException_;
- deferredException_ = null;
- throw temp;
- }
- }
- public void accumulateDeferredException (SqlException e)
- {
- if (deferredException_ == null)
- deferredException_ = e;
- else
- deferredException_.setNextException (e);
- }
-
- protected Agent (Connection connection, LogWriter logWriter)
- {
- connection_ = connection;
- logWriter_ = logWriter;
- crossConverters_ = new CrossConverters (this);
- }
-
- protected void resetAgent ( LogWriter logWriter)
- {
- // sectionManager_ is set elsewhere
- accumulatedReadExceptions_ = null;
- enableBatchedExceptionTracking_ = false;
- batchedExceptionLabelIndex_ = 0;
- batchedExceptionGenerated_ = null;
- logWriter_ = logWriter;
- deferredException_ = null;
- }
-
- public void resetAgent (Connection connection, LogWriter logWriter, int loginTimeout, String server,int port) throws SqlException
- {
- resetAgent (logWriter);
- resetAgent_ (logWriter, loginTimeout, server, port);
- }
-
- abstract protected void resetAgent_(LogWriter logWriter, int loginTimeout, String server,int port) throws SqlException;
-
- //-------------------- entry points ------------------------------------------
-
- public final boolean loggingEnabled () { return !org.apache.derby.client.am.Configuration.traceSuspended__ && logWriter_ != null; }
-
- public final void setLogWriter (LogWriter logWriter)
- {
- synchronized (connection_) {
- if (logWriter_ != null) logWriter_.close();
- logWriter_ = logWriter;
- }
- }
-
- public final java.io.PrintWriter getLogWriter ()
- { return (logWriter_ == null) ? null : logWriter_.printWriter_; }
-
- abstract public LogWriter newLogWriter_ (java.io.PrintWriter printWriter, int traceLevel);
-
- //----------------------------------------------------------------------------
-
-
- public final void accumulateReadException (SqlException e)
- {
- if (enableBatchedExceptionTracking_) {
- batchedExceptionGenerated_ [batchedExceptionLabelIndex_] = true;
- labelAsBatchedException (e, batchedExceptionLabelIndex_);
- }
- if (accumulatedReadExceptions_ == null)
- accumulatedReadExceptions_ = e;
- else
- accumulatedReadExceptions_.setNextException (e);
- }
-
- // Called only for disconnect event
- public final void accumulateDisconnectException (DisconnectException e)
- {
- if (enableBatchedExceptionTracking_) {
- batchedExceptionGenerated_ [batchedExceptionLabelIndex_] = true;
- labelAsBatchedException (e, batchedExceptionLabelIndex_);
- }
- if (accumulatedReadExceptions_ != null)
- e.setNextException (accumulatedReadExceptions_);
-
- accumulatedReadExceptions_ = null;
- }
-
- // For now, it looks like the only time we accumulate chain breaking exceptions
- // is for disconnect exceptions.
- public final void accumulateChainBreakingReadExceptionAndThrow (DisconnectException e) throws DisconnectException
- {
- accumulateDisconnectException (e); // tacks disconnect exc to end of chain
- markChainBreakingException_(); // sets a severity code in the NET agent
- throw e; // disconnect will be caught in Reply classes, and front of original chain thrown
- }
-
- abstract protected void markChainBreakingException_ ();
- abstract public void checkForChainBreakingException_ () throws SqlException;
-
- private final void enableBatchedExceptionTracking (int batchSize)
- {
- enableBatchedExceptionTracking_ = true;
- batchedExceptionGenerated_ = new boolean[batchSize];
- batchedExceptionLabelIndex_ = 0;
- }
-
- final void disableBatchedExceptionTracking()
- {
- enableBatchedExceptionTracking_ = false;
- }
-
- public final void setBatchedExceptionLabelIndex (int index)
- {
- batchedExceptionLabelIndex_ = index;
- }
-
- private final SqlException labelAsBatchedException (SqlException e, int index)
- {
- SqlException firstInChain = e;
- while (e != null) {
- e.setBatchPositionLabel (index);
- e = (SqlException) e.getNextException();
- }
- return firstInChain;
- }
-
- protected final void checkForExceptions () throws SqlException
- {
- if (accumulatedReadExceptions_ != null) {
- SqlException e = accumulatedReadExceptions_;
- accumulatedReadExceptions_ = null;
- throw e;
- }
- }
-
- // precondition: all batch execute reads have occurred
- final boolean batchUpdateExceptionGenerated ()
- {
- return batchedExceptionGenerated_ [batchedExceptionLabelIndex_];
- }
-
- public final void flow (Statement statement) throws SqlException
- {
- endWriteChain();
- flush_();
- beginReadChain (statement);
- }
-
- public final void flowBatch (Statement statement, int batchSize) throws SqlException
- {
- endBatchedWriteChain();
- flush_();
- beginBatchedReadChain (statement, batchSize);
- }
-
- public final void flowOutsideUOW () throws SqlException
- {
- endWriteChain();
- flush_();
- beginReadChainOutsideUOW ();
- }
-
- // flush() means to send all chained requests.
- abstract public void flush_() throws DisconnectException;
-
- // Close client resources associated with this agent, such as socket and streams for the net.
- abstract public void close_ () throws SqlException;
-
- public void close () throws SqlException
- {
- close_();
- if (logWriter_ != null) logWriter_.close();
- }
-
- public final void disconnectEvent ()
- {
- // closes client-side resources associated with database connection
- try { close(); } catch (SqlException doNothing) {}
- connection_.completeChainBreakingDisconnect ();
- }
-
- public void beginWriteChainOutsideUOW () throws SqlException
- {
- }
-
- public void beginWriteChain (Statement statement) throws SqlException
- {
- connection_.writeTransactionStart(statement);
- }
-
- public final void beginBatchedWriteChain (Statement statement) throws SqlException
- {
- beginWriteChain (statement);
- }
-
- protected void endWriteChain ()
- {
- }
-
- protected final void endBatchedWriteChain ()
- {
- }
-
- protected void beginReadChain (Statement statement) throws SqlException
- {
- connection_.readTransactionStart();
- }
-
- protected final void beginBatchedReadChain (Statement statement, int batchSize) throws SqlException
- {
- enableBatchedExceptionTracking (batchSize);
- beginReadChain (statement);
- }
-
- protected void beginReadChainOutsideUOW () throws SqlException
- {
- }
-
- public void endReadChain () throws SqlException
- {
- checkForExceptions();
- }
-
- public final void endBatchedReadChain (int[] updateCounts, SqlException accumulatedExceptions) throws BatchUpdateException
- {
- disableBatchedExceptionTracking();
- for (int i=0; i < batchedExceptionGenerated_.length; i++) {
- if (batchedExceptionGenerated_[i])
- updateCounts[i] = -3;
- }
- if (accumulatedExceptions == null) {
- try {
- endReadChain();
- }
- catch (SqlException e) {
- accumulatedExceptions = e;
- }
- }
- if (accumulatedExceptions != null) {
- BatchUpdateException bue =
- new BatchUpdateException (logWriter_,
- "Non-atomic batch failure. The batch was submitted, but " +
- "at least one exception occurred on an individual member of the batch. " +
- "Use getNextException() to retrieve the exceptions for specific batched elements.",
- updateCounts);
- bue.setNextException (accumulatedExceptions);
- throw bue;
+public abstract class Agent {
+ public SqlException accumulatedReadExceptions_ = null;
+
+ private boolean enableBatchedExceptionTracking_;
+ private int batchedExceptionLabelIndex_;
+ private boolean[] batchedExceptionGenerated_;
+
+ Connection connection_; // made friendly for lobs only, refactor !!
+ public SectionManager sectionManager_ = null; // temporarily public, make friendly at least !!
+
+ public LogWriter logWriter_ = null;
+
+ final CrossConverters crossConverters_;
+
+ // Exceptions that occur on dnc's implementation of SqlException.getMessage() via stored proc
+ // cannot be thrown on the getMessage() invocation because the signature of getMessage() does not
+ // allow for throwing an exception.
+ // Therefore, we must save the exception and throw it at our very first opportunity.
+ SqlException deferredException_;
+
+ void checkForDeferredExceptions() throws SqlException {
+ if (deferredException_ != null) {
+ SqlException temp = deferredException_;
+ deferredException_ = null;
+ throw temp;
+ }
+ }
+
+ public void accumulateDeferredException(SqlException e) {
+ if (deferredException_ == null) {
+ deferredException_ = e;
+ } else {
+ deferredException_.setNextException(e);
+ }
+ }
+
+ protected Agent(Connection connection, LogWriter logWriter) {
+ connection_ = connection;
+ logWriter_ = logWriter;
+ crossConverters_ = new CrossConverters(this);
+ }
+
+ protected void resetAgent(LogWriter logWriter) {
+ // sectionManager_ is set elsewhere
+ accumulatedReadExceptions_ = null;
+ enableBatchedExceptionTracking_ = false;
+ batchedExceptionLabelIndex_ = 0;
+ batchedExceptionGenerated_ = null;
+ logWriter_ = logWriter;
+ deferredException_ = null;
+ }
+
+ public void resetAgent(Connection connection, LogWriter logWriter, int loginTimeout, String server, int port) throws SqlException {
+ resetAgent(logWriter);
+ resetAgent_(logWriter, loginTimeout, server, port);
+ }
+
+ abstract protected void resetAgent_(LogWriter logWriter, int loginTimeout, String server, int port) throws SqlException;
+
+ //-------------------- entry points ------------------------------------------
+
+ public final boolean loggingEnabled() {
+ return !org.apache.derby.client.am.Configuration.traceSuspended__ && logWriter_ != null;
+ }
+
+ public final void setLogWriter(LogWriter logWriter) {
+ synchronized (connection_) {
+ if (logWriter_ != null) {
+ logWriter_.close();
+ }
+ logWriter_ = logWriter;
+ }
+ }
+
+ public final java.io.PrintWriter getLogWriter() {
+ return (logWriter_ == null) ? null : logWriter_.printWriter_;
+ }
+
+ abstract public LogWriter newLogWriter_(java.io.PrintWriter printWriter, int traceLevel);
+
+ //----------------------------------------------------------------------------
+
+
+ public final void accumulateReadException(SqlException e) {
+ if (enableBatchedExceptionTracking_) {
+ batchedExceptionGenerated_[batchedExceptionLabelIndex_] = true;
+ labelAsBatchedException(e, batchedExceptionLabelIndex_);
+ }
+ if (accumulatedReadExceptions_ == null) {
+ accumulatedReadExceptions_ = e;
+ } else {
+ accumulatedReadExceptions_.setNextException(e);
+ }
+ }
+
+ // Called only for disconnect event
+ public final void accumulateDisconnectException(DisconnectException e) {
+ if (enableBatchedExceptionTracking_) {
+ batchedExceptionGenerated_[batchedExceptionLabelIndex_] = true;
+ labelAsBatchedException(e, batchedExceptionLabelIndex_);
+ }
+ if (accumulatedReadExceptions_ != null) {
+ e.setNextException(accumulatedReadExceptions_);
+ }
+
+ accumulatedReadExceptions_ = null;
+ }
+
+ // For now, it looks like the only time we accumulate chain breaking exceptions
+ // is for disconnect exceptions.
+ public final void accumulateChainBreakingReadExceptionAndThrow(DisconnectException e) throws DisconnectException {
+ accumulateDisconnectException(e); // tacks disconnect exc to end of chain
+ markChainBreakingException_(); // sets a severity code in the NET agent
+ throw e; // disconnect will be caught in Reply classes, and front of original chain thrown
+ }
+
+ abstract protected void markChainBreakingException_();
+
+ abstract public void checkForChainBreakingException_() throws SqlException;
+
+ private final void enableBatchedExceptionTracking(int batchSize) {
+ enableBatchedExceptionTracking_ = true;
+ batchedExceptionGenerated_ = new boolean[batchSize];
+ batchedExceptionLabelIndex_ = 0;
+ }
+
+ final void disableBatchedExceptionTracking() {
+ enableBatchedExceptionTracking_ = false;
+ }
+
+ public final void setBatchedExceptionLabelIndex(int index) {
+ batchedExceptionLabelIndex_ = index;
+ }
+
+ private final SqlException labelAsBatchedException(SqlException e, int index) {
+ SqlException firstInChain = e;
+ while (e != null) {
+ e.setBatchPositionLabel(index);
+ e = (SqlException) e.getNextException();
+ }
+ return firstInChain;
+ }
+
+ protected final void checkForExceptions() throws SqlException {
+ if (accumulatedReadExceptions_ != null) {
+ SqlException e = accumulatedReadExceptions_;
+ accumulatedReadExceptions_ = null;
+ throw e;
+ }
+ }
+
+ // precondition: all batch execute reads have occurred
+ final boolean batchUpdateExceptionGenerated() {
+ return batchedExceptionGenerated_[batchedExceptionLabelIndex_];
+ }
+
+ public final void flow(Statement statement) throws SqlException {
+ endWriteChain();
+ flush_();
+ beginReadChain(statement);
+ }
+
+ public final void flowBatch(Statement statement, int batchSize) throws SqlException {
+ endBatchedWriteChain();
+ flush_();
+ beginBatchedReadChain(statement, batchSize);
+ }
+
+ public final void flowOutsideUOW() throws SqlException {
+ endWriteChain();
+ flush_();
+ beginReadChainOutsideUOW();
+ }
+
+ // flush() means to send all chained requests.
+ abstract public void flush_() throws DisconnectException;
+
+ // Close client resources associated with this agent, such as socket and streams for the net.
+ abstract public void close_() throws SqlException;
+
+ public void close() throws SqlException {
+ close_();
+ if (logWriter_ != null) {
+ logWriter_.close();
+ }
+ }
+
+ public final void disconnectEvent() {
+ // closes client-side resources associated with database connection
+ try {
+ close();
+ } catch (SqlException doNothing) {
+ }
+ connection_.completeChainBreakingDisconnect();
+ }
+
+ public void beginWriteChainOutsideUOW() throws SqlException {
+ }
+
+ public void beginWriteChain(Statement statement) throws SqlException {
+ connection_.writeTransactionStart(statement);
+ }
+
+ public final void beginBatchedWriteChain(Statement statement) throws SqlException {
+ beginWriteChain(statement);
+ }
+
+ protected void endWriteChain() {
+ }
+
+ protected final void endBatchedWriteChain() {
+ }
+
+ protected void beginReadChain(Statement statement) throws SqlException {
+ connection_.readTransactionStart();
+ }
+
+ protected final void beginBatchedReadChain(Statement statement, int batchSize) throws SqlException {
+ enableBatchedExceptionTracking(batchSize);
+ beginReadChain(statement);
+ }
+
+ protected void beginReadChainOutsideUOW() throws SqlException {
+ }
+
+ public void endReadChain() throws SqlException {
+ checkForExceptions();
+ }
+
+ public final void endBatchedReadChain(int[] updateCounts, SqlException accumulatedExceptions) throws BatchUpdateException {
+ disableBatchedExceptionTracking();
+ for (int i = 0; i < batchedExceptionGenerated_.length; i++) {
+ if (batchedExceptionGenerated_[i]) {
+ updateCounts[i] = -3;
+ }
+ }
+ if (accumulatedExceptions == null) {
+ try {
+ endReadChain();
+ } catch (SqlException e) {
+ accumulatedExceptions = e;
+ }
+ }
+ if (accumulatedExceptions != null) {
+ BatchUpdateException bue =
+ new BatchUpdateException(logWriter_,
+ "Non-atomic batch failure. The batch was submitted, but " +
+ "at least one exception occurred on an individual member of the batch. " +
+ "Use getNextException() to retrieve the exceptions for specific batched elements.",
+ updateCounts);
+ bue.setNextException(accumulatedExceptions);
+ throw bue;
+ }
}
- }
}
Modified: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/AsciiStream.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/AsciiStream.java?rev=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/AsciiStream.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/AsciiStream.java Sun May 1 23:25:59 2005
@@ -19,30 +19,28 @@
*/
package org.apache.derby.client.am;
-public class AsciiStream extends java.io.InputStream
-{
- private java.io.Reader reader_;
- private String materializedString_;
- private int charsRead_ = 0;
+public class AsciiStream extends java.io.InputStream {
+ private java.io.Reader reader_;
+ private String materializedString_;
+ private int charsRead_ = 0;
- public AsciiStream (String materializedString, java.io.Reader reader)
- {
- reader_ = reader;
- materializedString_ = materializedString;
- }
+ public AsciiStream(String materializedString, java.io.Reader reader) {
+ reader_ = reader;
+ materializedString_ = materializedString;
+ }
- public int read () throws java.io.IOException
- {
- int oneChar = reader_.read();
- ++charsRead_;
- if (oneChar != -1) // if not eos
- return 0x00ff & oneChar;
- else
- return -1; // end of stream
- }
+ public int read() throws java.io.IOException {
+ int oneChar = reader_.read();
+ ++charsRead_;
+ if (oneChar != -1) // if not eos
+ {
+ return 0x00ff & oneChar;
+ } else {
+ return -1; // end of stream
+ }
+ }
- public int available()
- {
- return materializedString_.length() - charsRead_;
- }
+ public int available() {
+ return materializedString_.length() - charsRead_;
+ }
}
Modified: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/BatchUpdateException.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/BatchUpdateException.java?rev=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/BatchUpdateException.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/BatchUpdateException.java Sun May 1 23:25:59 2005
@@ -23,69 +23,74 @@
import org.apache.derby.client.resources.ResourceKeys;
-public class BatchUpdateException extends java.sql.BatchUpdateException
-{
+public class BatchUpdateException extends java.sql.BatchUpdateException {
- //-----------------constructors-----------------------------------------------
+ //-----------------constructors-----------------------------------------------
- public BatchUpdateException (LogWriter logWriter, ErrorKey errorKey, int[] updateCounts)
- {
- super (ResourceUtilities.getResource (ResourceKeys.driverOriginationIndicator) +
- ResourceUtilities.getResource (errorKey.getResourceKey()),
- errorKey.getSQLState(),
- errorKey.getErrorCode(),
- updateCounts);
- if (logWriter != null) logWriter.traceDiagnosable (this);
- }
-
- public BatchUpdateException (LogWriter logWriter, ErrorKey errorKey, Object[] args, int[] updateCounts)
- {
- super (ResourceUtilities.getResource (ResourceKeys.driverOriginationIndicator) +
- ResourceUtilities.getResource (errorKey.getResourceKey(), args),
- errorKey.getSQLState(),
- errorKey.getErrorCode(),
- updateCounts);
- if (logWriter != null) logWriter.traceDiagnosable (this);
- }
-
- public BatchUpdateException (LogWriter logWriter, ErrorKey errorKey, Object arg, int[] updateCounts)
- {
- this (logWriter, errorKey, new Object[] {arg}, updateCounts);
- }
-
- // Temporary constructor until all error keys are defined.
- public BatchUpdateException (LogWriter logWriter)
- {
- super (null, null, -99999, null);
- if (logWriter != null) logWriter.traceDiagnosable (this);
- }
-
- // Temporary constructor until all error keys are defined.
- public BatchUpdateException (LogWriter logWriter, int[] updateCounts)
- {
- super (null, null, -99999, updateCounts);
- if (logWriter != null) logWriter.traceDiagnosable (this);
- }
-
- // Temporary constructor until all error keys are defined.
- public BatchUpdateException (LogWriter logWriter, String reason, int[] updateCounts)
- {
- super (reason, null, -99999, updateCounts);
- if (logWriter != null) logWriter.traceDiagnosable (this);
- }
-
- // Temporary constructor until all error keys are defined.
- public BatchUpdateException (LogWriter logWriter, String reason, String sqlState, int[] updateCounts)
- {
- super (reason, sqlState, -99999, updateCounts);
- if (logWriter != null) logWriter.traceDiagnosable (this);
- }
-
- // Temporary constructor until all error keys are defined.
- public BatchUpdateException (LogWriter logWriter, String reason, String sqlState, int errorCode, int[] updateCounts)
- {
- super (reason, sqlState, errorCode, updateCounts);
- if (logWriter != null) logWriter.traceDiagnosable (this);
- }
+ public BatchUpdateException(LogWriter logWriter, ErrorKey errorKey, int[] updateCounts) {
+ super(ResourceUtilities.getResource(ResourceKeys.driverOriginationIndicator) +
+ ResourceUtilities.getResource(errorKey.getResourceKey()),
+ errorKey.getSQLState(),
+ errorKey.getErrorCode(),
+ updateCounts);
+ if (logWriter != null) {
+ logWriter.traceDiagnosable(this);
+ }
+ }
+
+ public BatchUpdateException(LogWriter logWriter, ErrorKey errorKey, Object[] args, int[] updateCounts) {
+ super(ResourceUtilities.getResource(ResourceKeys.driverOriginationIndicator) +
+ ResourceUtilities.getResource(errorKey.getResourceKey(), args),
+ errorKey.getSQLState(),
+ errorKey.getErrorCode(),
+ updateCounts);
+ if (logWriter != null) {
+ logWriter.traceDiagnosable(this);
+ }
+ }
+
+ public BatchUpdateException(LogWriter logWriter, ErrorKey errorKey, Object arg, int[] updateCounts) {
+ this(logWriter, errorKey, new Object[]{arg}, updateCounts);
+ }
+
+ // Temporary constructor until all error keys are defined.
+ public BatchUpdateException(LogWriter logWriter) {
+ super(null, null, -99999, null);
+ if (logWriter != null) {
+ logWriter.traceDiagnosable(this);
+ }
+ }
+
+ // Temporary constructor until all error keys are defined.
+ public BatchUpdateException(LogWriter logWriter, int[] updateCounts) {
+ super(null, null, -99999, updateCounts);
+ if (logWriter != null) {
+ logWriter.traceDiagnosable(this);
+ }
+ }
+
+ // Temporary constructor until all error keys are defined.
+ public BatchUpdateException(LogWriter logWriter, String reason, int[] updateCounts) {
+ super(reason, null, -99999, updateCounts);
+ if (logWriter != null) {
+ logWriter.traceDiagnosable(this);
+ }
+ }
+
+ // Temporary constructor until all error keys are defined.
+ public BatchUpdateException(LogWriter logWriter, String reason, String sqlState, int[] updateCounts) {
+ super(reason, sqlState, -99999, updateCounts);
+ if (logWriter != null) {
+ logWriter.traceDiagnosable(this);
+ }
+ }
+
+ // Temporary constructor until all error keys are defined.
+ public BatchUpdateException(LogWriter logWriter, String reason, String sqlState, int errorCode, int[] updateCounts) {
+ super(reason, sqlState, errorCode, updateCounts);
+ if (logWriter != null) {
+ logWriter.traceDiagnosable(this);
+ }
+ }
}
Modified: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Blob.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Blob.java?rev=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Blob.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Blob.java Sun May 1 23:25:59 2005
@@ -20,257 +20,283 @@
package org.apache.derby.client.am;
-public class Blob extends Lob implements java.sql.Blob
-{
- //-----------------------------state------------------------------------------
-
- byte[] binaryString_ = null;
-
- // Only used for input purposes. For output, each getBinaryStream call
- // must generate an independent stream.
- java.io.InputStream binaryStream_ = null;
- int dataOffset_;
-
- //---------------------constructors/finalizer---------------------------------
-
- public Blob (byte[] binaryString,
- Agent agent,
- int dataOffset)
- {
- super (agent);
- binaryString_ = binaryString;
- dataType_ |= BINARY_STRING;
- sqlLength_ = binaryString.length - dataOffset;
- lengthObtained_ = true;
- dataOffset_ = dataOffset;
- }
-
- // CTOR for input:
- public Blob (Agent agent,
- java.io.InputStream binaryStream,
- int length)
- {
- super (agent);
- binaryStream_ = binaryStream;
- dataType_ |= BINARY_STREAM;
- sqlLength_ = length;
- lengthObtained_ = true;
- }
-
- // ---------------------------jdbc 2------------------------------------------
-
- public long length () throws SqlException
- {
- synchronized (agent_.connection_) {
- if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "length");
- long retVal = super.sqlLength();
- if (agent_.loggingEnabled()) agent_.logWriter_.traceExit (this, "length", retVal);
- return retVal;
- }
- }
-
- // can return an array that may be have a length shorter than the supplied
- // length (no padding occurs)
- public byte[] getBytes (long pos, int length) throws SqlException
- {
- synchronized (agent_.connection_) {
- if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getBytes", (int) pos, length);
- if ((pos <= 0) || (length < 0))
- throw new SqlException (agent_.logWriter_, "Invalid position " + pos +" or length " + length);
- byte[] retVal = getBytesX (pos, length);
- if (agent_.loggingEnabled()) agent_.logWriter_.traceExit (this, "getBytes", retVal);
- return retVal;
- }
- }
-
- private byte[] getBytesX (long pos, int length) throws SqlException
- {
- checkForClosedConnection ();
-
- // we may need to check for overflow on this cast
- long actualLength = Math.min (this.length() - pos + 1, (long) length);
-
- byte[] retVal = new byte[(int) actualLength];
- System.arraycopy (binaryString_, (int) pos + dataOffset_ - 1, retVal, 0, (int) actualLength);
- return retVal;
- }
-
-
- public java.io.InputStream getBinaryStream () throws SqlException
- {
- synchronized (agent_.connection_) {
- if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getBinaryStream");
- java.io.InputStream retVal = getBinaryStreamX();
- if (agent_.loggingEnabled()) agent_.logWriter_.traceExit (this, "getBinaryStream", retVal);
- return retVal;
- }
- }
-
- private java.io.InputStream getBinaryStreamX () throws SqlException
- {
- checkForClosedConnection ();
-
- if (isBinaryStream ()) // this Lob is used for input
- return binaryStream_;
-
- return new java.io.ByteArrayInputStream (binaryString_, dataOffset_, binaryString_.length - dataOffset_);
- }
-
- public long position (byte[] pattern, long start) throws SqlException
- {
- synchronized (agent_.connection_) {
- if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "position(byte[], long)", pattern, start);
- if (pattern == null) throw new SqlException (agent_.logWriter_, "Search pattern cannot be null.");
- long pos = positionX (pattern, start);
- if (agent_.loggingEnabled()) agent_.logWriter_.traceExit (this, "position(byte[], long)", pos);
- return pos;
- }
- }
-
- private long positionX (byte[] pattern, long start) throws SqlException
- {
- checkForClosedConnection ();
-
- return binaryStringPosition(pattern, start);
- }
-
- public long position (java.sql.Blob pattern, long start) throws SqlException
- {
- synchronized (agent_.connection_) {
- if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "position(Blob, long)", pattern, start);
- if (pattern == null) throw new SqlException (agent_.logWriter_, "Search pattern cannot be null.");
- long pos = positionX (pattern, start);
- if (agent_.loggingEnabled()) agent_.logWriter_.traceExit (this, "position(Blob, long)", pos);
- return pos;
- }
- }
-
- private long positionX (java.sql.Blob pattern, long start) throws SqlException
- {
- checkForClosedConnection ();
+public class Blob extends Lob implements java.sql.Blob {
+ //-----------------------------state------------------------------------------
- try {
- return binaryStringPosition(pattern.getBytes(1L, (int)pattern.length()) , start);
- }
- catch (java.sql.SQLException e) {
- throw new SqlException (agent_.logWriter_, e.getMessage());
+ byte[] binaryString_ = null;
+
+ // Only used for input purposes. For output, each getBinaryStream call
+ // must generate an independent stream.
+ java.io.InputStream binaryStream_ = null;
+ int dataOffset_;
+
+ //---------------------constructors/finalizer---------------------------------
+
+ public Blob(byte[] binaryString,
+ Agent agent,
+ int dataOffset) {
+ super(agent);
+ binaryString_ = binaryString;
+ dataType_ |= BINARY_STRING;
+ sqlLength_ = binaryString.length - dataOffset;
+ lengthObtained_ = true;
+ dataOffset_ = dataOffset;
+ }
+
+ // CTOR for input:
+ public Blob(Agent agent,
+ java.io.InputStream binaryStream,
+ int length) {
+ super(agent);
+ binaryStream_ = binaryStream;
+ dataType_ |= BINARY_STREAM;
+ sqlLength_ = length;
+ lengthObtained_ = true;
+ }
+
+ // ---------------------------jdbc 2------------------------------------------
+
+ public long length() throws SqlException {
+ synchronized (agent_.connection_) {
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceEntry(this, "length");
+ }
+ long retVal = super.sqlLength();
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceExit(this, "length", retVal);
+ }
+ return retVal;
+ }
+ }
+
+ // can return an array that may be have a length shorter than the supplied
+ // length (no padding occurs)
+ public byte[] getBytes(long pos, int length) throws SqlException {
+ synchronized (agent_.connection_) {
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceEntry(this, "getBytes", (int) pos, length);
+ }
+ if ((pos <= 0) || (length < 0)) {
+ throw new SqlException(agent_.logWriter_, "Invalid position " + pos + " or length " + length);
+ }
+ byte[] retVal = getBytesX(pos, length);
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceExit(this, "getBytes", retVal);
+ }
+ return retVal;
+ }
+ }
+
+ private byte[] getBytesX(long pos, int length) throws SqlException {
+ checkForClosedConnection();
+
+ // we may need to check for overflow on this cast
+ long actualLength = Math.min(this.length() - pos + 1, (long) length);
+
+ byte[] retVal = new byte[(int) actualLength];
+ System.arraycopy(binaryString_, (int) pos + dataOffset_ - 1, retVal, 0, (int) actualLength);
+ return retVal;
+ }
+
+
+ public java.io.InputStream getBinaryStream() throws SqlException {
+ synchronized (agent_.connection_) {
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceEntry(this, "getBinaryStream");
+ }
+ java.io.InputStream retVal = getBinaryStreamX();
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceExit(this, "getBinaryStream", retVal);
+ }
+ return retVal;
+ }
+ }
+
+ private java.io.InputStream getBinaryStreamX() throws SqlException {
+ checkForClosedConnection();
+
+ if (isBinaryStream()) // this Lob is used for input
+ {
+ return binaryStream_;
+ }
+
+ return new java.io.ByteArrayInputStream(binaryString_, dataOffset_, binaryString_.length - dataOffset_);
+ }
+
+ public long position(byte[] pattern, long start) throws SqlException {
+ synchronized (agent_.connection_) {
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceEntry(this, "position(byte[], long)", pattern, start);
+ }
+ if (pattern == null) {
+ throw new SqlException(agent_.logWriter_, "Search pattern cannot be null.");
+ }
+ long pos = positionX(pattern, start);
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceExit(this, "position(byte[], long)", pos);
+ }
+ return pos;
+ }
+ }
+
+ private long positionX(byte[] pattern, long start) throws SqlException {
+ checkForClosedConnection();
+
+ return binaryStringPosition(pattern, start);
+ }
+
+ public long position(java.sql.Blob pattern, long start) throws SqlException {
+ synchronized (agent_.connection_) {
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceEntry(this, "position(Blob, long)", pattern, start);
+ }
+ if (pattern == null) {
+ throw new SqlException(agent_.logWriter_, "Search pattern cannot be null.");
+ }
+ long pos = positionX(pattern, start);
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceExit(this, "position(Blob, long)", pos);
+ }
+ return pos;
+ }
+ }
+
+ private long positionX(java.sql.Blob pattern, long start) throws SqlException {
+ checkForClosedConnection();
+
+ try {
+ return binaryStringPosition(pattern.getBytes(1L, (int) pattern.length()), start);
+ } catch (java.sql.SQLException e) {
+ throw new SqlException(agent_.logWriter_, e.getMessage());
+ }
}
- }
// -------------------------- JDBC 3.0 -----------------------------------
- public int setBytes (long pos, byte[] bytes) throws SqlException
- {
- synchronized (agent_.connection_) {
- if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "setBytes", (int) pos, bytes);
- int length = setBytesX (pos, bytes, 0, bytes.length);
- if (agent_.loggingEnabled()) agent_.logWriter_.traceExit (this, "setBytes", length);
- return length;
- }
- }
-
- public int setBytes (long pos, byte[] bytes, int offset, int len) throws SqlException
- {
- synchronized (agent_.connection_) {
- if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "setBytes", (int) pos, bytes, offset, len);
- int length = setBytesX (pos, bytes, offset, len);
- if (agent_.loggingEnabled()) agent_.logWriter_.traceExit (this, "setBytes", length);
- return length;
- }
- }
+ public int setBytes(long pos, byte[] bytes) throws SqlException {
+ synchronized (agent_.connection_) {
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceEntry(this, "setBytes", (int) pos, bytes);
+ }
+ int length = setBytesX(pos, bytes, 0, bytes.length);
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceExit(this, "setBytes", length);
+ }
+ return length;
+ }
+ }
+
+ public int setBytes(long pos, byte[] bytes, int offset, int len) throws SqlException {
+ synchronized (agent_.connection_) {
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceEntry(this, "setBytes", (int) pos, bytes, offset, len);
+ }
+ int length = setBytesX(pos, bytes, offset, len);
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceExit(this, "setBytes", length);
+ }
+ return length;
+ }
+ }
+
+ public int setBytesX(long pos, byte[] bytes, int offset, int len) throws SqlException {
+ int length = 0;
+ if ((int) pos <= 0 || pos > binaryString_.length - dataOffset_) {
+ throw new SqlException(agent_.logWriter_, "Invalid position " + pos
+ + " , offset " + offset + " or length " + len);
+ }
+ if ((offset < 0) || offset > bytes.length || len < 0) {
+ throw new SqlException(agent_.logWriter_, "Invalid position " + pos
+ + " , offset " + offset + " or length " + len);
+ }
+ if (len == 0) {
+ return 0;
+ }
+ length = Math.min((bytes.length - offset), len);
+ if ((binaryString_.length - dataOffset_ - (int) pos + 1) < length) {
+ byte newbuf[] = new byte[(int) pos + length + dataOffset_ - 1];
+ System.arraycopy(binaryString_, 0, newbuf, 0, binaryString_.length);
+ binaryString_ = newbuf;
+ }
- public int setBytesX (long pos, byte[] bytes, int offset, int len) throws SqlException
- {
- int length = 0;
- if ( (int) pos <= 0 || pos > binaryString_.length - dataOffset_)
- throw new SqlException(agent_.logWriter_, "Invalid position " + pos
- + " , offset " + offset + " or length " + len);
- if ( (offset < 0) || offset > bytes.length || len < 0 )
- throw new SqlException(agent_.logWriter_, "Invalid position " + pos
- + " , offset " + offset + " or length " + len);
- if (len == 0)
- return 0;
- length = Math.min((bytes.length - offset ),len);
- if ((binaryString_.length - dataOffset_ - (int) pos + 1) < length) {
- byte newbuf[] = new byte[(int)pos + length + dataOffset_-1];
- System.arraycopy(binaryString_,0,newbuf,0,binaryString_.length);
- binaryString_ = newbuf;
- }
-
- System.arraycopy(bytes,offset, binaryString_, (int)pos + dataOffset_ -1, length);
- binaryStream_ = new java.io.ByteArrayInputStream(binaryString_);
- sqlLength_ = binaryString_.length - dataOffset_;
- return length;
- }
-
- public java.io.OutputStream setBinaryStream (long pos) throws SqlException
- {
- synchronized (agent_.connection_) {
- if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "setBinaryStream", (int) pos);
- BlobOutputStream outStream = new BlobOutputStream (this,pos);
-
- if (agent_.loggingEnabled()) agent_.logWriter_.traceExit (this, "setBinaryStream", outStream);
- return outStream;
- }
- }
-
- public void truncate (long len) throws SqlException
- {
- synchronized (agent_.connection_) {
- if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, " truncate", (int) len);
- if (len < 0 || len > this.length())
- throw new SqlException (agent_.logWriter_, "Invalid length " + len);
- if (len == this.length())
- return;
- long newLength = (int)len + dataOffset_;
- byte newbuf[] = new byte[(int)len + dataOffset_];
- System.arraycopy(binaryString_,0,newbuf,0,(int)newLength);
- binaryString_ = newbuf;
+ System.arraycopy(bytes, offset, binaryString_, (int) pos + dataOffset_ - 1, length);
binaryStream_ = new java.io.ByteArrayInputStream(binaryString_);
sqlLength_ = binaryString_.length - dataOffset_;
- }
+ return length;
}
- //------------------ Material layer event callback methods -------------------
+ public java.io.OutputStream setBinaryStream(long pos) throws SqlException {
+ synchronized (agent_.connection_) {
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceEntry(this, "setBinaryStream", (int) pos);
+ }
+ BlobOutputStream outStream = new BlobOutputStream(this, pos);
+
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceExit(this, "setBinaryStream", outStream);
+ }
+ return outStream;
+ }
+ }
+
+ public void truncate(long len) throws SqlException {
+ synchronized (agent_.connection_) {
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceEntry(this, " truncate", (int) len);
+ }
+ if (len < 0 || len > this.length()) {
+ throw new SqlException(agent_.logWriter_, "Invalid length " + len);
+ }
+ if (len == this.length()) {
+ return;
+ }
+ long newLength = (int) len + dataOffset_;
+ byte newbuf[] = new byte[(int) len + dataOffset_];
+ System.arraycopy(binaryString_, 0, newbuf, 0, (int) newLength);
+ binaryString_ = newbuf;
+ binaryStream_ = new java.io.ByteArrayInputStream(binaryString_);
+ sqlLength_ = binaryString_.length - dataOffset_;
+ }
+ }
+
+ //------------------ Material layer event callback methods -------------------
+
+ //---------------------------- helper methods --------------------------------
+ public boolean isBinaryString() {
+ return ((dataType_ & BINARY_STRING) == BINARY_STRING);
+ }
+
+ public boolean isBinaryStream() {
+ return ((dataType_ & BINARY_STREAM) == BINARY_STREAM);
+ }
+
+ public byte[] getBinaryString() {
+ return binaryString_;
+ }
+
+ protected long binaryStringPosition(byte[] pattern, long start) {
+ // perform a local byte string search, starting at start
+ // check that the range of comparison is valid
+ int index = (int) start + dataOffset_ - 1; // api start begins at 1
+
+ while (index + pattern.length <= binaryString_.length) {
+ if (isSubString(pattern, index)) {
+ return (long) (index - dataOffset_ + 1); // readjust for api indexing
+ }
+ index++;
+ }
+ return -1L; // not found
+ }
+
+ // precondition: binaryString_ is long enough for the comparison
+ protected boolean isSubString(byte[] pattern, int index) {
+ for (int i = 0; i < pattern.length; i++, index++) {
+ if (pattern[i] != binaryString_[index]) {
+ return false;
+ }
+ }
- //---------------------------- helper methods --------------------------------
- public boolean isBinaryString ()
- {
- return ((dataType_ & BINARY_STRING) == BINARY_STRING);
- }
-
- public boolean isBinaryStream ()
- {
- return ((dataType_ & BINARY_STREAM) == BINARY_STREAM);
- }
-
- public byte[] getBinaryString ()
- {
- return binaryString_;
- }
-
- protected long binaryStringPosition (byte[] pattern, long start)
- {
- // perform a local byte string search, starting at start
- // check that the range of comparison is valid
- int index = (int) start + dataOffset_ - 1; // api start begins at 1
-
- while (index + pattern.length <= binaryString_.length) {
- if (isSubString (pattern, index))
- return (long)(index - dataOffset_ + 1); // readjust for api indexing
- index++;
- }
- return -1L; // not found
- }
-
- // precondition: binaryString_ is long enough for the comparison
- protected boolean isSubString (byte[] pattern, int index)
- {
- for (int i = 0; i < pattern.length; i++, index++)
- if (pattern[i] != binaryString_[index])
- return false;
-
- return true;
- }
+ return true;
+ }
}