You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by pn...@apache.org on 2005/01/19 16:19:02 UTC
cvs commit: jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/common XContentHandler.java
pnever 2005/01/19 07:19:02
Modified: proposals/tamino/src/store/org/apache/slide/store/tamino/datastore
XAuthenticator.java XConnection.java
XConnectionPool.java XDbHandler.java
proposals/tamino/src/store/org/apache/slide/store/tamino/common
XContentHandler.java
Log:
Fixed some problems with Tamino connection handling
Revision Changes Path
1.4 +10 -5 jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/XAuthenticator.java
Index: XAuthenticator.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/XAuthenticator.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XAuthenticator.java 30 Jul 2004 06:51:54 -0000 1.3
+++ XAuthenticator.java 19 Jan 2005 15:19:01 -0000 1.4
@@ -212,7 +212,12 @@
String command = "ino:ShowServerParameter(\"" + para + "\")";
value = (String)issueAdminCommandCache.get (getIssueAdminCommandKey (xCon));
- if (value != null) return value;
+
+ // if (value != null) return value;
+ if (value != null) {
+ xCon.close();
+ return value;
+ }
TConnection tCon = xCon.getTConnection();
TAdministrationAccessor adminAccessor = tCon.newAdministrationAccessor();
1.4 +40 -37 jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/XConnection.java
Index: XConnection.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/XConnection.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XConnection.java 30 Jul 2004 06:51:54 -0000 1.3
+++ XConnection.java 19 Jan 2005 15:19:01 -0000 1.4
@@ -45,6 +45,7 @@
import org.apache.slide.store.tamino.common.XDatastoreException;
import org.apache.slide.util.ClassName;
import org.apache.slide.util.XAssertionFailed;
+import org.apache.slide.common.Domain;
/**
* XConnection wraps a connection to tamino. It provides methods to get
@@ -63,35 +64,35 @@
*
*/
public class XConnection {
-
+
private static final String LOGNAME = LoggerUtil.getThisClassName();
private static final String CLASSNAME = new ClassName(LOGNAME).getPlainName();
private static Logger logger = LoggerFactory.getLogger(LOGNAME);
-
+
private TConnection tConnection;
private TLocalTransaction tTransaction;
-
+
/** the pool id */
private XConnectionKey dbKey;
-
-
+
+
/** set to false when closed */
private boolean isActive = true;
-
+
/**
* constructs a new XConnection. Only called from XConnectionPool.
*/
public XConnection (TConnection tConnection) {
if (logger.isLoggable (Level.FINE) )
logger.entering (CLASSNAME, "<init>", new Object[] {tConnection} );
-
+
this.tConnection = tConnection;
this.tConnection.setLockwaitMode (TLockwaitMode.YES);
-
+
if (logger.isLoggable(Level.FINE) )
logger.exiting (CLASSNAME, "<init>" );
}
-
+
/**
* Sets this connections id within the connection pool
*
@@ -106,7 +107,7 @@
XConnectionKey getPoolId () {
return dbKey;
}
-
+
/**
* Closes an XConnection. If this xConnection is used by more than one
* dbSession, the first one will close and remove from connection pool,
@@ -126,13 +127,16 @@
tConnection.close();
// debug only
// ConnectionChecker.remove (this);
-
+
+ if ("true".equalsIgnoreCase(Domain.getParameter("debug_tamino", "false"))) {
+ System.out.println(" === ["+Thread.currentThread().getName()+"] '''''CLOSE "+dbKey);
+ }
} catch (TConnectionCloseException e) {
throw new XDatastoreException (e);
}
}
}
-
+
/**
* Returns a newNonXMLObjectAccessor for a specific location
*
@@ -145,7 +149,7 @@
ensureActive();
return tConnection.newNonXMLObjectAccessor (location);
}
-
+
/**
* Method newStreamAccessor
*
@@ -158,7 +162,7 @@
return newStreamAccessor
(TAccessLocation.newInstance (collection));
}
-
+
/**
* returns a newStreamAccessor for a specific location
*
@@ -171,8 +175,8 @@
ensureActive();
return tConnection.newStreamAccessor (location);
}
-
-
+
+
/**
* Method newXMLObjectAccessor
*
@@ -183,16 +187,15 @@
*
*/
public TXMLObjectAccessor newXMLObjectAccessor (String collection,
- TXMLObjectModel objectModel)
- {
+ TXMLObjectModel objectModel) {
return newXMLObjectAccessor (
TAccessLocation.newInstance (collection), objectModel);
}
-
+
public TXMLObjectAccessor newXMLJObjectAccessor (String collection) {
return newXMLObjectAccessor (collection, TJDOMObjectModel.getInstance());
}
-
+
/**
* returns a newXMLObjectAccessor for a specific object model and location!
*
@@ -207,14 +210,14 @@
ensureActive();
return tConnection.newXMLObjectAccessor (location, objectModel);
}
-
+
public void ensureActive() {
if (!isActive) {
// System.out.println (this);
throw new IllegalStateException ("connection already closed");
}
}
-
+
/**
* Starts a transaction for this connection. If already done, the call is
* ignored.
@@ -233,7 +236,7 @@
// System.out.println ("opened transaction " + tTransaction.toString());
}
}
-
+
/**
* Commits this transaction. If more than one dbSession share this
* connection, the commit is done for the first call, the next calls are
@@ -244,17 +247,17 @@
*/
public void commit () throws TException {
if (isActive) {
-
+
if (tTransaction != null) {
tTransaction.commit();
tConnection.useAutoCommitMode();
-
+
// System.out.println ("committed transaction " + tTransaction.toString());
tTransaction = null;
}
}
}
-
+
/**
* Rollback this transaction. If more than one dbSession share this
* connection, the commit is done for the first call, the next calls are
@@ -268,13 +271,13 @@
if (tTransaction != null) {
tTransaction.rollback();
tConnection.useAutoCommitMode();
-
+
// System.out.println ("rolled back transaction " + tTransaction.toString());
tTransaction = null;
}
}
}
-
+
/**
* Return the version of the Tamino server this connection points to
*
@@ -287,9 +290,9 @@
ensureActive();
return tConnection.newSystemAccessor().getServerVersion();
}
-
-
-
+
+
+
/**
* Return the wrapped Tconnection
*
@@ -300,11 +303,11 @@
public TConnection getTConnection() {
return tConnection;
}
-
+
public boolean isActive () {
return isActive;
}
-
+
public String toString () {
return
super.toString() + "; active: " + isActive;
1.6 +54 -45 jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/XConnectionPool.java
Index: XConnectionPool.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/XConnectionPool.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XConnectionPool.java 7 Jan 2005 14:58:17 -0000 1.5
+++ XConnectionPool.java 19 Jan 2005 15:19:01 -0000 1.6
@@ -39,6 +39,7 @@
import org.apache.slide.store.tamino.common.XDatastoreException;
import org.apache.slide.util.ClassName;
import org.apache.slide.util.XAssertionFailed;
+import org.apache.slide.common.Domain;
import com.softwareag.tamino.db.api.connection.TConnectionNotAvailableException;
/**
@@ -51,35 +52,35 @@
* @version $Revision$
*/
public class XConnectionPool {
-
+
private static final String LOGNAME = LoggerUtil.getThisClassName();
private static final String CLASSNAME = new ClassName(LOGNAME).getPlainName();
private static Logger logger = LoggerFactory.getLogger(LOGNAME);
-
+
/** connection pool manager */
private TConnectionPoolManager theCpManager;
-
+
/** the pool name */
private String poolName;
-
+
/** number of tries if DB not available */
private int tryConnect = 1;
-
+
/** base delay for retry */
private int tryConnectDelay = 2000;
-
+
/** use TConnectionPool? */
private boolean useTConnectionPool = true;
-
+
/** holds current active xconnections. Key is url, db, user and threadname */
private Map xConnections = Collections.synchronizedMap (new HashMap());
-
+
/** singleton instance of XConnectionPool */
private static XConnectionPool theOneAndOnly = new XConnectionPool ();
-
+
/** cache for failed connections */
private Map failedConnections = new HashMap();
-
+
/**
* Method getInstance
*
@@ -89,7 +90,7 @@
public static XConnectionPool getInstance () {
return theOneAndOnly;
}
-
+
/**
* Release the Tamino connection pool
*
@@ -111,8 +112,8 @@
}
}
}
-
-
+
+
/**
* Method close
*
@@ -121,9 +122,9 @@
if (useTConnectionPool)
theCpManager.release();
}
-
-
-
+
+
+
/**
* creates a TConnectionPool for a specific tamino database and adds it to
* the Map tConnectionPools.
@@ -135,15 +136,15 @@
private void createTConnectionPool (XConnectionKey conKey) throws TException {
if( logger.isLoggable(Level.FINE) )
logger.entering( CLASSNAME, "createTConnectionPool", new Object[] {conKey} );
-
+
String poolName = conKey.getTPoolName();
-
+
// should be set from outside via setX...() as attributes
// of XConnectionPool???
int maxConnection = 200;
int initConnection = 10;
int connTimeout = 10;
-
+
if (useTConnectionPool) {
TConnectionPoolDescriptor descriptor = new TConnectionPoolDescriptor();
@@ -152,7 +153,7 @@
descriptor.setUser (conKey.getUser());
if (mydomain != null && ("".equals (mydomain) == false)) descriptor.setDomain(conKey.getDomain());
else {
- if (conKey.getUser() != null) descriptor.setDomain("");
+ if (conKey.getUser() != null) descriptor.setDomain("");
}
descriptor.setPassword (conKey.getPwd());
descriptor.setInitConnections (initConnection);
@@ -161,14 +162,14 @@
descriptor.setIsolationDegree (TIsolationDegree.COMMITTED_COMMAND);
//descriptor.setNonActivityTimeout(30);
descriptor.setLockwaitMode (TLockwaitMode.YES);
-
+
theCpManager.addConnectionPool (poolName, descriptor);
}
if( logger.isLoggable(Level.FINE) )
logger.exiting( CLASSNAME, "createTConnectionPool" );
}
-
+
/**
* Method createXConnection. It is in the responsibility of the caller to
* close the XConnection after use!
@@ -186,14 +187,14 @@
throws XDatastoreException {
if( logger.isLoggable(Level.FINE) )
logger.entering( CLASSNAME, "createXConnection", new Object [] {conKey});
-
+
TConnection tCon;
int invalidTries = 0;
TException tException;
-
+
// TPreference pref = TPreference.getInstance();
// pref.setUseRetryHandler (false);
-
+
while (true) {
try {
if (useTConnectionPool) {
@@ -226,13 +227,13 @@
tException = e.getRootTCause();
else
tException = e;
-
+
if (++invalidTries == tryConnect) {
failedConnections.put(
conKey.getDatabaseUri(), new FailedConnection(System.currentTimeMillis()+FailedConnection.EXPIRE, tException.getMessage()) );
throw new XDatastoreException ("Error getting connection for " + conKey, tException);
}
-
+
else {
try {
int delay = tryConnectDelay * invalidTries;
@@ -243,15 +244,15 @@
}
}
}
-
+
XConnection xCon = new XConnection (tCon);
if( logger.isLoggable(Level.FINE) )
logger.exiting( CLASSNAME, "createXConnection", xCon);
-
+
return xCon;
}
-
-
+
+
/**
* Method getXConnection
*
@@ -261,12 +262,16 @@
public XConnection getXConnection (XConnectionKey conKey) throws XDatastoreException {
if( logger.isLoggable(Level.FINE) )
logger.entering( CLASSNAME, "getXConnection", new Object [] {conKey});
-
+
XConnection xCon = null;
-
+
synchronized (xConnections) {
if (xConnections.containsKey (conKey)) {
xCon = (XConnection)xConnections.get (conKey);
+
+ if ("true".equalsIgnoreCase(Domain.getParameter("debug_tamino", "false"))) {
+ System.out.println(" === ["+Thread.currentThread().getName()+"] -----REUSE "+conKey);
+ }
if (logger.isLoggable (Level.FINE)) logger.fine ("use existing xConnection: " + xCon);
}
else {
@@ -277,9 +282,13 @@
}
if( fcon == null ) {
xCon = createXConnection (conKey);
-
+
xCon.setPoolId (conKey);
xConnections.put (conKey, xCon);
+
+ if ("true".equalsIgnoreCase(Domain.getParameter("debug_tamino", "false"))) {
+ System.out.println(" === ["+Thread.currentThread().getName()+"] ,,,,,CREATE "+conKey);
+ }
}
else {
throw new XDatastoreException(fcon.reason);
@@ -292,7 +301,7 @@
// ConnectionChecker.add (xCon);
return xCon;
}
-
+
/**
* Method removeXConnection
*
@@ -302,22 +311,22 @@
void removeXConnection (XConnectionKey key) {
if( logger.isLoggable(Level.FINE) )
logger.entering( CLASSNAME, "removeXConnection", new Object [] {key});
-
+
synchronized (xConnections) {
xConnections.remove (key);
}
-
+
if( logger.isLoggable(Level.FINE) )
logger.exiting( CLASSNAME, "removeXConnection");
}
-
-
-
+
+
+
private static class FailedConnection {
static final long EXPIRE = 20000;
long expires;
String reason;
-
+
FailedConnection( long expires, String reason ) {
this.expires = expires;
this.reason = reason;
1.4 +5 -5 jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/XDbHandler.java
Index: XDbHandler.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/XDbHandler.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XDbHandler.java 30 Jul 2004 06:51:54 -0000 1.3
+++ XDbHandler.java 19 Jan 2005 15:19:01 -0000 1.4
@@ -84,7 +84,7 @@
private Map sessions = Collections.synchronizedMap (new HashMap());
/** adminDbSession **/
- XUtilDbSession adminDbSession = null;
+ private XUtilDbSession adminDbSession = null;
/** The slide accessor */
ISlideAccessor parentStore;
1.4 +17 -10 jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/common/XContentHandler.java
Index: XContentHandler.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/common/XContentHandler.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XContentHandler.java 30 Jul 2004 06:51:52 -0000 1.3
+++ XContentHandler.java 19 Jan 2005 15:19:02 -0000 1.4
@@ -268,14 +268,21 @@
if( logger.isLoggable(Level.FINE) )
logger.entering( CLASSNAME, "commit", new Object[] {new Boolean(onePhase)} );
- IDbSession dbSession = getDbHandler().getDbSession();
- if( dbSession != null ) {
- // commit and remove db session
- dbSession.commit(onePhase);
- getDbHandler().removeDbSession();
+ IDbSession dbSession = null;
+ try {
+ dbSession = getDbHandler().getDbSession();
+ if( dbSession != null ) {
+ // commit and remove db session
+ dbSession.commit(onePhase);
+ }
+ }
+ finally {
+ if (dbSession != null) {
+ getDbHandler().removeDbSession();
+ }
}
}
-
+
/**
* <p>Roll back work done on behalf of a transaction branch.
* <p>If database session is still available: rollback database and clean-up session.
---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org