Hey guys. I'm deploying Hibernate 3.2.1 within an ear folder in a JBoss 3.2
installation. This works well, except I've run into a problem I can't figure out.
I have a hot deployed service that uses the following code to truncate a table prior to
loading data:
public void clearData(Logger pLog)
{
Session session = CommonHibernateUtil.currentSession();
String hql = "delete from HibernateBean";
Query query = session.createQuery(hql);
int rowCount = query.executeUpdate();
pLog.info("Truncating table: " + String.valueOf(rowCount) + " rows
deleted.");
CommonHibernateUtil.closeSession();
}
This works beautifully upon initial deployment, but if I redeploy without rebooting the
server, I get the following error:
java.lang.ClassCastException
at org.hibernate.hql.ast.HqlLexer.makeToken(HqlLexer.java:39)
at org.hibernate.hql.antlr.HqlBaseLexer.mIDENT(HqlBaseLexer.java:580)
at org.hibernate.hql.antlr.HqlBaseLexer.nextToken(HqlBaseLexer.java:264)
at antlr.TokenBuffer.fill(TokenBuffer.java:69)
at antlr.TokenBuffer.LA(TokenBuffer.java:80)
at antlr.LLkParser.LA(LLkParser.java:52)
at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:139)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:248)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:157)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
at
com.tamalesoftware.reporting.etl.tradehistory.TradeHistoryHibernateBeanFacade.clearData(Unknown
Source)
at com.tamalesoftware.reporting.etl.tradehistory.TradeHistoryLoader.truncateTable(Unknown
Source)
at
com.tamalesoftware.reporting.etl.tradehistory.TradeHistoryLoader.preLoadActions(Unknown
Source)
at com.tamalesoftware.reporting.etl.tradehistory.TradeHistoryLoader.startLoader(Unknown
Source)
at com.tamalesoftware.reporting.etl.tradehistory.TradeHistoryLoader.(Unknown Source)
at com.tamalesoftware.reporting.etl.loaders.TradeHistoryScheduler.perform(Unknown
Source)
at org.jboss.varia.scheduler.Scheduler$Listener.handleNotification(Scheduler.java:1236)
at
org.jboss.mx.server.NotificationListenerProxy.handleNotification(NotificationListenerProxy.java:71)
at
javax.management.NotificationBroadcasterSupport.sendNotification(NotificationBroadcasterSupport.java:84)
at javax.management.timer.Timer.sendNotifications(Timer.java:441)
at javax.management.timer.Timer.access$000(Timer.java:31)
at javax.management.timer.Timer$RegisteredNotification.doRun(Timer.java:612)
at org.jboss.mx.util.SchedulableRunnable.run(SchedulableRunnable.java:164)
at org.jboss.mx.util.ThreadPool$Worker.run(ThreadPool.java:225)
I have played with this for hours; I focused on the hql caching in hibernate as JBoss
class cast exceptions usually occur when an object isn't released from memory when
undeployed. Even turning off Hibernate query cache and adding a
'.setCacheable(false)' to the end of the createQuery() statement does not solve
the problem. I have commented code out, and by process of elimination I have determined
that the 'Query query = session.createQuery(hql);' is what causes the problem-
even with an empty string for 'hql'. If I use a direct sql truncate statement
rather than an hql statement (far less desirable), everything works correctly. Anyone have
any suggestions? Thanks.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3989521#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...