April 29, 2010, 11:43 PM
This is one nasty exception I experienced today.
I execute one .executable file from java. Reading the inputstream and the error stream with two different threads (why). I wait till ‘join’ing the thread then I took the process exit value.
processLogThread.join();
errorLogThread.join();
try {
logger.info("Thread status:"+processLogThread.isAlive()+" "+errorLogThread.isAlive());
logger.info("Process exit value:"+p.exitValue());
} catch (Exception e) {
logger.error("Error while reading process exit value", e);
}
Unfortunately, it threw the following exception. The streams are closed. Threads are dead. But it says process has not exited. aaw!!
18:19:39,802 INFO Utilities:432 - Thread status:false false
18:19:39,805 ERROR Utilities:435 - Error while reading process exit value
java.lang.IllegalThreadStateException: process has not exited
at java.lang.ProcessImpl.exitValue(Native Method)
at com.eginnovations.license.util.Utilities.genLicense5(Utilities.java:433)
April 29, 2010, 6:51 PM
I have an POJO entity object which has two blob properties in it. The first property is nothing but string.
license.setViewCert(Hibernate.createBlob(sb.toString().getBytes()));
the second blob is a file stream
FileInputStream fileInputStream = new FileInputStream(file);
license.setLicenseFile(Hibernate.createBlob(fileInputStream)); //no lines beyond this
When I save this object using the method
@Transactional
public void save(Object entity){
logger.info("Saving object:"+entity);
HibernateTemplate hibernateTemplate = super.getHibernateTemplate();
Serializable save = hibernateTemplate.save(entity);
hibernateTemplate.flush();
hibernateTemplate.refresh(entity);
logger.info("Object save successful:"+entity+" "+save);
}
I got the following issue in hibernateTemplate.save(entity). I googled it but no solutions helped. I just save the blob entry. I am not opening the blob stream anywhere in my code. Any ideas why I am getting this?
org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not update: [com.testsite.license.entity.License#0]; uncategorized SQLException for SQL [update LICENSE_INFO set IP=?, ..... COMPANY_ID=? where ID=?]; SQL state [null]; error code [0]; could not reset reader; nested exception is java.sql.SQLException: could not reset reader
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:121)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:322)
at org.springframework.orm.hibernate3.HibernateAccessor.convertJdbcAccessException(HibernateAccessor.java:424)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:410)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:378)
at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:639)
at com.testsite.common.dao.BaseDAO.save(BaseDAO.java:39)
at com.testsite.license.service.LicenseService.addLicense(LicenseService.java:114)
at com.testsite.license.service.LicenseService.addLicense(LicenseService.java:151)
at com.testsite.license.view.LicenseUploadAction.execute(LicenseUploadAction.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:306)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: could not reset reader
at org.hibernate.lob.BlobImpl.getBinaryStream(BlobImpl.java:83)
at org.hibernate.type.BlobType.set(BlobType.java:46)
at org.hibernate.type.BlobType.nullSafeSet(BlobType.java:117)
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1997)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2371)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2307)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2607)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:92)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:374)
... 70 more
Environment:
Spring integrated with Hibernate
MySQL as backend
April 29, 2010, 5:23 PM
Category:
java |
Comments Off
April 28, 2010, 11:13 AM
I am re-factoring one of the internal applications, so that the development can be module based. So my schema has unique module names which has n number of menu items; one-to-many! Here is my hibernate mapping.
<class name="com.eginnovations.common.entity.Module" table="MODULE_INFO">
<id column="ID" name="id" type="java.lang.Long">
<generator />
</id>
<property name="moduleName" column="MODULE_NAME" type="java.lang.String"/>
<property name="enabled" column="ENABLED" type="java.lang.Boolean"/>
<set name="menuItemList" cascade="all" inverse="true" lazy="false">
<key column="MODULE_INFO_ID"></key>
<one-to-many/>
</set>
</class>
<class name="com.eginnovations.common.entity.MenuItem" table="COMMON_MENU">
<id column="ID" name="id" type="java.lang.Long">
<generator />
</id>
<property name="menuTitle" column="MENU_TITLE" type="java.lang.String"/>
<property name="parentId" column="PARENT_MENU_ID" type="java.lang.Long"/>
<property name="locationHref" column="LOCATION_HREF" type="java.lang.String"/>
<many-to-one name="module" column="MODULE_INFO_ID" cascade="all"></many-to-one>
</class>
But when I run the unit test to get the list of modules, I ended up with the exception
org.springframework.orm.hibernate3.HibernateSystemException: IllegalArgumentException
occurred while calling setter of com.eginnovations.common.entity.Module.menuItemList;
nested exception is org.hibernate.PropertyAccessException: IllegalArgumentException
occurred while calling setter of com.eginnovations.common.entity.Module.menuItemList
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:659)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
…
…
The problem is with data type, the menuItemList is mapped to a list instead of a set!!
Ref: http://forum.springsource.org/showthread.php?t=23090
April 27, 2010, 8:16 PM
I came across the following article on Clojure’s Approach to Polymorphism: Method Dispatch. Still I couldn’t understand how it is more advantageous against single dispatch in terms of complexity, resource consumption!!!
http://www.developer.com/lang/other/article.php/10942_3878656_1/Clojures-Approach-to-Polymorphism-Method-Dispatch.htm
Still I feel adding more rules will consume similar man hours! any comments?
Clojure’s Approach to Polymorphism: Method Dispatch