[jboss-user] [Performance Tuning] - read-ahead cache invalidate before any data access

dchsalmon do-not-reply at jboss.com
Thu Jun 26 11:17:28 EDT 2008


I am trying to implement a read-ahead on-find strategy for a CMP bean using jboss 4.0.2.

The finder method appears to cache all the required data and return a collection of local objects with cached data as evidenced by log output like

2008-06-26 07:13:43,875 DEBUG [org.jboss.ejb.plugins.cmp.jdbc.JDBCEJBQLQuery.StockData#findByPing] Executing SQL: SELECT DISTINCT t0_o.id, t0_o.ticker, t0_o.name, t0_o.currency, t0_o.quote, t0_o.open, t0_o.high, t0_o.low, t0_o.delta, t0_o.volume, t0_o.marketcap, t0_o.range, t0_o.divdate, t0_o.divyield, t0_o.exchange, t0_o.divrate, t0_o.pubdate, t0_o.provider, t0_o.updated FROM stockdata t0_o LEFT OUTER JOIN stockping t1_o_ping ON t0_o.id=t1_o_ping.id WHERE t1_o_ping.ping > ? AND t0_o.quote IS  NOT NULL
2008-06-26 07:13:43,875 TRACE [org.jboss.ejb.plugins.cmp.jdbc.JDBCEJBQLQuery.StockData#findByPing] param: i=1, type=INTEGER, value=20240053
2008-06-26 07:13:43,875 TRACE [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBridge.StockData#id] result: i=1, type=java.lang.Integer, value=36
2008-06-26 07:13:43,875 TRACE [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBridge.StockData#ticker] result: i=2, type=java.lang.String, value=USTYN
2008-06-26 07:13:43,875 TRACE [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.StockData] Add preload data: entity=StockData pk=36 field=ticker

However, when I call the value method for each of the local objects in the collection I get:

2008-06-26 08:02:00,437 TRACE [org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.StockData] RESET PERSISTENCE CONTEXT: id=36
2008-06-26 08:02:00,437 TRACE [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.StockData] load data: entity=StockData pk=36
2008-06-26 08:02:00,437 TRACE [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.StockData] No preload data found: entity=StockData pk=36
2008-06-26 08:02:00,437 TRACE [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge.StockData] Default eager-load for entity: readahead=null
2008-06-26 08:02:00,437 DEBUG [org.jboss.ejb.plugins.cmp.jdbc.JDBCLoadEntityCommand.StockData] Executing SQL: SELECT ticker, name, currency, quote, open, high, low, delta, volume, marketcap, range, divdate, divyield, exchange, divrate, pubdate, provider, updated FROM stockdata WHERE (id=?)
2008-06-26 08:02:00,437 TRACE [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBridge.StockData#id] param: i=1, type=INTEGER, value=36

This indicates to me that all the cached data is tossed out and reloaded.

The method invoked is running as a transaction and consists essentially of

			Collection coll = StockDataUtil.getLocalHome().findByPing(currMinutes);
			for (Iterator i = coll.iterator(); i.hasNext(); )
				StockDataLocal sdl = (StockDataLocal)i.next();
				StockUpdateValue val = sdl.getUpdateValue();

Any help would be appreciated.

Dave Salmon
FreeRange Communications, Inc

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4160904#4160904

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4160904

More information about the jboss-user mailing list