[Persistence, JBoss/CMP, Hibernate, Database] - Persist of @Lob fails with
by Lupson
Lots of googling and searching of these forums havn't solved my problem, so here comes a question with a rather lengthy description:
Environment:
Windows XP
JBoss 4.0.5.GA
JBoss-Seam 1.2.1GA
Oracle 9 (ojdbc14.jar)
(Note: This problem might also be related to JBoss Seam or the EJB3 timer service)
Basic problem: I schedule a report using the TimerService, when @Timeout hits, the report is assembled and stored in a @Lob. As long as the JBoss isn't restarted before the "job" has run, this works as a charm. If I stop and start the server, the actual generation of the report happens just fine (since the Timer is persistent and resumes after startup), BUT - Hibernate fails with classloading errors when it tries to write that resulting POJO into the @Lob field. The full stacktrace is posted at the end of this post.
And oh - the POJO stored in the @Lob is read by a Seam Component and then displayed as PDF using the seam-pdf stuff in a JSF page if someone wonders...
| @Stateless
| @Name("reportTimerBean")
| public class ReportTimerBean implements ReportTimer {
|
| private static final String BEAN_JNDI = "myApp/ScheduledReportProcessorBean/local";
|
| @Resource
| TimerService timerService;
| public void startReportTimer(Schedulable schedulableReport)
| GregorianCalendar startTime= new GregorianCalendar();
| startTime.add(GregorianCalendar.MINUTE, 3);
| timerService.createTimer(startTime.getTime(), schedulableReport);
| }
|
| @Timeout
| public void createScheduledReport(Timer timer) {
| try {
| Context ctx = new InitialContext();
| ScheduledReportProcessor scheduledReportProcessor =
| (ScheduledReportProcessor)
| ctx.lookup(REPORT_PROCESSOR_BEAN_JNDI);
| scheduledReportProcessor.processReport(
| (Schedulable) timer.getInfo());
| } catch (NamingException e) {
| throw e;
| }
| }
|
At time of timeout, @Timeout methid is invoked which calls the ScheduledReportProcessor EJB which generates the report data into a POJO using Hibernate queries. This POJO (which implements Serializable) is then set into an @Entity bean field, i.e:
| @Column(name="DATAMODEL")
| @Lob @Basic(fetch = FetchType.EAGER)
| private Serializable data;
|
and is persisted using a normal EntityManager
| @AutoCreate
| @Name("scheduledReportProcessor")
| @Scope(ScopeType.APPLICATION)
| @Stateless
| public class ScheduledReportProcessorBean implements ScheduledReportProcessor {
| @PersistenceContext(unitName="myApp")
| private EntityManager entityManager;
|
| public void processReport(Schedulable schedulableReport) {
| schedulableReport.doReport(entityManager);
| }
| }
|
As seen, the Schedulable instance contains its own report creation code in command-pattern style.
The supplied EntityManager is first used to assemble the data from the database, and is then used to insert the resulting data into the Serializable field shown further up.
| private int createAndPersistReportDataModel(MyAppReportDataModel reportDataModel, EntityManager entityManager) {
|
|
| ReportDataModel dataModel = new ReportDataModel();
| dataModel.setData(reportDataModel);
| dataModel.setCreated(new java.util.Date());
| entityManager.persist(dataModel); // HERE IT CAN GO WRONG!
| }
|
The class MyAppReportDataModel normally contains a lot of fields, but in order to narrow possible causes, it is a simple POJO now containing only 2 simple strings.
The stacktrace below, I repeat, happens AFTER all of the data has been assembled, the only thing left is to write it to the database. Also, I repeat - as long as a scheduled report runs before any server stop/start, this works perfectly.
17:00:29,834 ERROR [STDERR] javax.persistence.PersistenceException: org.hibernate.type.SerializationException: could not deserialize
17:00:29,834 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:647)
17:00:29,834 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:218)
17:00:29,834 ERROR [STDERR] at org.jboss.ejb3.entity.TransactionScopedEntityManager.persist(TransactionScopedEntityManager.java:175)
17:00:29,834 ERROR [STDERR] at org.jboss.seam.persistence.EntityManagerProxy.persist(EntityManagerProxy.java:128)
17:00:29,834 ERROR [STDERR] at com.myapp.reports.MyReportPojo.createAndPersistReportDataModel(MyReportPojoPojo.java:209)
17:00:29,834 ERROR [STDERR] at com.myapp.reports.MyReportPojo.doReport(MyReportPojo.java:167)
17:00:29,834 ERROR [STDERR] at com.myapp.reports.ScheduledReportProcessorBean.processReport(ScheduledReportProcessorBean.java:27)
17:00:29,834 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
17:00:29,834 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
17:00:29,834 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
17:00:29,834 ERROR [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
17:00:29,834 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
17:00:29,834 ERROR [STDERR] at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
17:00:29,834 ERROR [STDERR] at org.jboss.seam.intercept.EJBInvocationContext.proceed(EJBInvocationContext.java:37)
17:00:29,834 ERROR [STDERR] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:57)
17:00:29,834 ERROR [STDERR] at org.jboss.seam.interceptors.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:27)
17:00:29,834 ERROR [STDERR] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
17:00:29,834 ERROR [STDERR] at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:113)
17:00:29,844 ERROR [STDERR] at org.jboss.seam.intercept.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:53)
17:00:29,844 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
17:00:29,844 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
17:00:29,844 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
17:00:29,844 ERROR [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:118)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:46)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
17:00:29,844 ERROR [STDERR] at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:102)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:211)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:79)
17:00:29,844 ERROR [STDERR] at $Proxy131.processReport(Unknown Source)
17:00:29,844 ERROR [STDERR] at com.myapp.action.ReportTimerBean.createScheduledReport(ReportTimerBean.java:55)
17:00:29,844 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
17:00:29,844 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
17:00:29,844 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
17:00:29,844 ERROR [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:46)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
17:00:29,844 ERROR [STDERR] at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:102)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
17:00:29,844 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessContainer.callTimeout(StatelessContainer.java:150)
17:00:29,844 ERROR [STDERR] at org.jboss.ejb.txtimer.TimerImpl$TimerTaskImpl.run(TimerImpl.java:524)
17:00:29,844 ERROR [STDERR] at java.util.TimerThread.mainLoop(Unknown Source)
17:00:29,844 ERROR [STDERR] at java.util.TimerThread.run(Unknown Source)
17:00:29,844 ERROR [STDERR] Caused by: org.hibernate.type.SerializationException: could not deserialize
17:00:29,844 ERROR [STDERR] at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:214)
17:00:29,844 ERROR [STDERR] at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:240)
17:00:29,844 ERROR [STDERR] at org.hibernate.type.SerializableType.fromBytes(SerializableType.java:78)
17:00:29,844 ERROR [STDERR] at org.hibernate.type.SerializableType.deepCopyNotNull(SerializableType.java:70)
17:00:29,844 ERROR [STDERR] at org.hibernate.type.MutableType.deepCopy(MutableType.java:25)
17:00:29,844 ERROR [STDERR] at org.hibernate.type.SerializableToBlobType.deepCopy(SerializableToBlobType.java:102)
17:00:29,844 ERROR [STDERR] at org.hibernate.type.TypeFactory.deepCopy(TypeFactory.java:329)
17:00:29,844 ERROR [STDERR] at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:274)
17:00:29,844 ERROR [STDERR] at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:180)
17:00:29,844 ERROR [STDERR] at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
17:00:29,844 ERROR [STDERR] at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131)
17:00:29,844 ERROR [STDERR] at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87)
17:00:29,844 ERROR [STDERR] at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
17:00:29,844 ERROR [STDERR] at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618)
17:00:29,844 ERROR [STDERR] at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592)
17:00:29,844 ERROR [STDERR] at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596)
17:00:29,844 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:212)
17:00:29,895 ERROR [STDERR] ... 76 more
17:00:29,895 ERROR [STDERR] Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: com.myapp.jpa.MyAppReportDataModel
17:00:29,895 ERROR [STDERR] at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:212)
17:00:29,895 ERROR [STDERR] at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:511)
17:00:29,895 ERROR [STDERR] at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:405)
17:00:29,895 ERROR [STDERR] at java.lang.ClassLoader.loadClass(Unknown Source)
17:00:29,895 ERROR [STDERR] at java.lang.ClassLoader.loadClassInternal(Unknown Source)
17:00:29,895 ERROR [STDERR] at java.lang.Class.forName0(Native Method)
17:00:29,895 ERROR [STDERR] at java.lang.Class.forName(Unknown Source)
17:00:29,895 ERROR [STDERR] at java.io.ObjectInputStream.resolveClass(Unknown Source)
17:00:29,895 ERROR [STDERR] at org.hibernate.util.SerializationHelper$CustomObjectInputStream.resolveClass(SerializationHelper.java:268)
17:00:29,895 ERROR [STDERR] at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
17:00:29,895 ERROR [STDERR] at java.io.ObjectInputStream.readClassDesc(Unknown Source)
17:00:29,895 ERROR [STDERR] at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
17:00:29,895 ERROR [STDERR] at java.io.ObjectInputStream.readObject0(Unknown Source)
17:00:29,895 ERROR [STDERR] at java.io.ObjectInputStream.readObject(Unknown Source)
17:00:29,895 ERROR [STDERR] at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:210)
17:00:29,895 ERROR [STDERR] ... 92 more
So, any ideas? Any help will be greatly appreciated! Thanks in advance.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4121359#4121359
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4121359
18 years, 5 months
[Beginners Corner] - Re: Using Solaris JDK
by PeterJ
I don't have Solaris so I am just venturing a guess. Considering that Sun develops Solaris and Java, I would guess that SUNWj5rt is an official JRE (Java Runtime Environment), that is, the say JRE you would download from the Sun Java web site. This is in contrast to Linux distributions which come a pseudo-JVM that is not fit to run JBossAS (in which case you need the JDK from Sun).
The error your got is because JBossAS really prefers to run with a JDK (which includes the compilers and tools). In ancient times (say 3 or 4 years ago), web containers (such as Tomcat) required a JDK to compile the JSPs found in web applications, and the check for a JDK is still in the startup scripts. You should not have any problem using the JRE unless you are using, in one of your applications, a Java library that needs it.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4121353#4121353
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4121353
18 years, 5 months