Code Search for Developers
 
 
  

FrontBaseTransactionTweaker.java from redshed at Krugle


Show FrontBaseTransactionTweaker.java syntax highlighted

// FrontBaseTransactionTweaker.java
//
// Copyright (c) 2002 Red Shed Software. All rights reserved.
// by Jonathan 'Wolf' Rentzsch (jon * redshed * net)
// 
// Fri May 24 2002 wolf: Created.
// Sun Jul 07 2002 wolf: Was incorrectly using EOAdapter.adapterWithName() instead of EOAdapter.adapterWithModel().

import com.webobjects.foundation.*;
import com.webobjects.appserver.*;
import com.webobjects.eocontrol.*;
import com.webobjects.eoaccess.*;
import com.webobjects.jdbcadaptor.JDBCAdaptor;
import com.webobjects.jdbcadaptor.JDBCPlugIn;
import com.webobjects.jdbcadaptor.FrontbasePlugIn;
import org.apache.log4j.Category;

public class FrontBaseTransactionTweaker {
	//    Isolation Levels
	public static interface IsolationLevel {
		public String toString();
	}
	public static class ReadUncommitted implements IsolationLevel {
		public String toString(){ return "READ UNCOMMITTED"; }
	}
	public static final ReadUncommitted readUncommitted = new ReadUncommitted();
	
	public static class ReadCommitted implements IsolationLevel {
		public String toString(){ return "READ COMMITTED"; }
	}
	public static final ReadCommitted readCommitted = new ReadCommitted();
	
	public static class RepeatableRead implements IsolationLevel {
		public String toString(){ return "REPEATABLE READ"; }
	}
	public static final RepeatableRead repeatableRead = new RepeatableRead();
	
	public static class Serializable implements IsolationLevel {
		public String toString(){ return "SERIALIZABLE"; }
	}
	public static final Serializable serializable = new Serializable();
	
	public static class Versioned implements IsolationLevel {
		public String toString(){ return "VERSIONED"; }
	}
	public static final Versioned versioned = new Versioned();
	
	//    Locking Discipline
	public static interface LockingDiscipline {
		public String toString();
	}
	public static class Pessimistic implements LockingDiscipline {
		public String toString(){ return "PESSIMISTIC"; }
	}
	public static final Pessimistic pessimistic = new Pessimistic();
	
	public static class Optimistic implements LockingDiscipline {
		public String toString(){ return "OPTIMISTIC"; }
	}
	public static final Optimistic optimistic = new Optimistic();
	
	public static class Deferred implements LockingDiscipline {
		public String toString(){ return "DEFERRED"; }
	}
	public static final Deferred deferred = new Deferred();
	
		public static void
	setDefaultModelGroupTransactionSettings(
			IsolationLevel isolation,
			LockingDiscipline locking ) {
		///JAssert.notNull( isolation );
		///JAssert.notNull( locking );
		EOEditingContext ec = null;
		
		NSArray models = modelsInDefaultModelGroupConnectingToFrontBase();
		for( java.util.Enumeration e = models.objectEnumerator(); e.hasMoreElements(); ) {
			EOModel model = (EOModel) e.nextElement();
			if( ec == null ) {
				ec = new EOEditingContext();
				ec.lock();
			}
			executeSQL( ec, model, isolation.toString(), locking.toString() );
			addManuallyTweakedModel( model );
			
			model = null;
		}
		
		if( ec != null ) {
			ec.unlock();
			ec.dispose();
			ec = null;
		}
	}
	
		public static void
	setModelTransactionSettings(
			EOModel model,
			IsolationLevel isolation,
			LockingDiscipline locking ) {
		EOEditingContext ec = new EOEditingContext();
		ec.lock();
		
		executeSQL( ec, model, isolation.toString(), locking.toString() );
		
		ec.unlock();
		ec.dispose();
		ec = null;
		
		addManuallyTweakedModel( model );
	}
	
	// = = = = = = = = = = = =
	// Private Implementation
	
	// Vars.
	private NSMutableArray _manuallyTweakedModels = new NSMutableArray();
	private static final FrontBaseTransactionTweaker _singleton = new FrontBaseTransactionTweaker();
	private static Category log = Category.getInstance( FrontBaseTransactionTweaker.class.getName() );
	
	// Methods.
		private static NSArray
	modelsInDefaultModelGroupConnectingToFrontBase() {
		NSMutableArray result = new NSMutableArray();
		
		NSArray models = EOModelGroup.defaultGroup().models();
		for( java.util.Enumeration e = models.objectEnumerator(); e.hasMoreElements(); ) {
			EOModel model = (EOModel) e.nextElement();
				///JAssert.notNull( model );
			if( log.isDebugEnabled() ) log.debug( "examining model "+model );
			EOAdaptor adaptor = EOAdaptor.adaptorWithModel( model );
			if( log.isDebugEnabled() ) log.debug( "got adaptor "+adaptor );
				///JAssert.notNull( adaptor );
			if( adaptor instanceof JDBCAdaptor ) {
				JDBCPlugIn plugin = ((JDBCAdaptor)adaptor).plugIn();
					///JAssert.notNull( plugIn );
				if( plugin instanceof FrontbasePlugIn ) {
					log.info( "adding model "+model.name()+" to the list of FrontBase-connected models" );
					result.addObject( model );
				}
				plugin = null;
			}
			adaptor = null;
			model = null;
		}
		
		return result;
	}
	
		public void
	initializeOnNotification(
			NSNotification notification ) {
		EOEditingContext ec = null;
		
		NSArray models = modelsInDefaultModelGroupConnectingToFrontBase();
		for( java.util.Enumeration e = models.objectEnumerator(); e.hasMoreElements(); ) {
			EOModel model = (EOModel) e.nextElement();
			if( !wasModelManuallyTweaked( model ) ) {
				String isolation = (String) model.userInfo().objectForKey( "isolation" );
				String locking = (String) model.userInfo().objectForKey( "locking" );
				if( isolation != null && locking != null ) {
					if( ec == null ) {
						ec = new EOEditingContext();
						ec.lock();
					}
					executeSQL( ec, model, isolation, locking );
				}
			}
		}
		
		if( ec != null ) {
			ec.unlock();
			ec.dispose();
			ec = null;
		}
	}
	
		private static void
	executeSQL(
			EOEditingContext ec,
			EOModel model,
			String isolation,
			String locking ) {
		if( log.isDebugEnabled() ) {
			log.debug( "model: "+model
				+" isolation: "+isolation
				+" locking: "+locking );
		}
		EOUtilities.rawRowsForSQL( ec, model.name(),
			"SET TRANSACTION ISOLATION LEVEL "+isolation
			+", LOCKING "+locking
			+", READ WRITE;" );
	}
	
		private static void
	addManuallyTweakedModel(
			EOModel model ) {
		log.debug( "adding model "+model.name()+" to manually tweaked list" );
		_singleton._manuallyTweakedModels.addObject( model );
	}
	
		private static boolean
	wasModelManuallyTweaked(
			EOModel model ) {
		return _singleton._manuallyTweakedModels.indexOfObject( model ) != NSArray.NotFound;
	}
	
	static {
		NSNotificationCenter.defaultCenter().addObserver(
			_singleton,
			new NSSelector( "initializeOnNotification",
				new Class[] { NSNotification.class } ),
			WOApplication.ApplicationWillFinishLaunchingNotification,
			null );
	}
}



See more files for this project here

redshed

Code for Mac+WebObjects.

Project homepage: http://sourceforge.net/projects/redshed
Programming language(s): C,Java,Objective C
License: other

  FrontBaseTransactionTweaker.pbproj/
    project.pbxproj
    wolf.pbxuser
  FrontBaseTransactionTweaker.java