On 15/03/2007, at 12:15 AM, Andrus Adamchik wrote:
> One last try at guessing it. On the server you have to do some  
> magic to enable callbacks (hopefully eventually this will be more  
> transparent). See "Enabling Callbacks" chapter at the bottom of  
> this page:
>
> http://cayenne.apache.org/doc/lifecycle-callbacks.html
>
> if this doesn't help, please file a bug with code samples.
This is what we're doing... It seems to be in line with the above  
page. Any ideas?
public class DatabaseConnector {
        // Note: Maps is just a util class of mine that populates a HashMap
        private static final Map LIFECYCLE_CALLBACKS = Maps.asMap(
                new String[] {
                    "postLoad", "postPersist", "postRemove", "postUpdate",  
"prePersist", "preRemove", "preUpdate"
                },
                new Object[] {
                        new Integer( LifecycleListener.POST_LOAD ),
                        new Integer( LifecycleListener.POST_PERSIST ),
                        new Integer( LifecycleListener.POST_REMOVE ),
                        new Integer( LifecycleListener.POST_UPDATE ),
                        new Integer( LifecycleListener.PRE_PERSIST ),
                        new Integer( LifecycleListener.PRE_REMOVE ),
                        new Integer( LifecycleListener.PRE_UPDATE )
                }
        );
        private Number connectionStatus;
        private DataDomain dataDomain;
        private DataContext dataContext;
        public DatabaseConnector() {
                dataDomain = null;
                dataContext = null;
                setConnectionStatus( DB_CONNECTION_STATE_DISCONNECTED );
                try {
                        logger.info( "initializing configuration..." );
                        Configuration.initializeSharedConfiguration();
                        Configuration conf = Configuration.getSharedConfiguration();
                        dataDomain = conf.getDomain();
                        setupListeners();
                        // dataDomain.setTransactionDelegate(new
                        // DomainTransactionDelegate());
                        logger.info( "creating shared data context..." );
                        dataContext = dataDomain.createDataContext();
                        setConnectionStatus( DB_CONNECTION_STATE_ESTABLISHED );
                        logger.info( "Database connection established..." );
                }
                catch ( ConfigurationException e ) {
                        dataDomain = null;
                        dataContext = null;
                        setConnectionStatus( DB_CONNECTION_STATE_FAILED );
                        logger.error( "Configuration exception occured while connecting to  
database", e );
                        throw new RuntimeException( "Could not connect to database server.  
Please check the configuration." );
                }
                catch ( Exception e ) {
                        dataDomain = null;
                        dataContext = null;
                        setConnectionStatus( DB_CONNECTION_STATE_FAILED );
                        logger.error( "Exception occured while connecting to database", e );
                        throw new RuntimeException( "Could not connect to database server.  
Please check the logs." );
                }
        }
        protected void setupListeners()
        {
                LifecycleCallbackRegistry registry;
                Iterator callbacksIter;
                registry = dataDomain.getEntityResolver().getCallbackRegistry();
                callbacksIter = LIFECYCLE_CALLBACKS.keySet().iterator();
                while ( callbacksIter.hasNext() ) {
                        String aMethodName = ( String )callbacksIter.next();
                        Integer type = ( Integer )LIFECYCLE_CALLBACKS.get( aMethodName );
                        logger.debug( "add lifecycle callback:" + aMethodName + " type:" +  
type );
                        registry.addListener( type.intValue(),  
our.subclass.of.CayenneDataObject.class, aMethodName );
                }
                
        }
        <...>
}
with regards,
--Lachlan Deck
This archive was generated by hypermail 2.0.0 : Wed Mar 14 2007 - 21:53:39 EDT