Monday, 15 March 2010

spring - Java Standalone (Console) Application - org.hibernate.LazyInitializationException: could not initialize proxy - no Session -



spring - Java Standalone (Console) Application - org.hibernate.LazyInitializationException: could not initialize proxy - no Session -

i have searched stackoverflow site , google, , 99.9% of questions web application, i've not found solution java standalone application (runs in linux terminal "java -jar myapp.jar") classic exception "org.hibernate.lazyinitializationexception: not initialize proxy - no session"

my project using spring 4.0.7 + hibernate 4.3.6.final + log4j 1.2.17 + bonecp 0.8.0

i have tried next solutions:

@service , @transactional annotation in client class, , in classes client class calls; @service , @transactional(propagation = propagation.required) annotation in client class, , in classes client class; switched @service @component , retried items 1 , 2 above; tried using transactiontemplate , executing client.start() method within transactioncallback.dointransaction() method; i have tried removing @service , @transactional client class , removing classes called client class.

i've tried , still getting org.hibernate.lazyinitializationexception: not initialize proxy - no session

the comments in code have tried too.

important note: project uses facade class, contains methods used application.

spring configuration loaded next xml:

<beans> <context:annotation-config /> <context:component-scan base-package="com.mycompany" /> <context:property-placeholder location="classpath:persistence.properties" /> <tx:annotation-driven transaction-manager="transactionmanager" /> <!-- bonecp --> <bean id="datasource" class="com.jolbox.bonecp.bonecpdatasource" destroy-method="close"> <property name="driverclass" value="${jdbc.driverclassname}"/> <property name="jdbcurl" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="idleconnectiontestperiodinminutes" value="60"/> <property name="idlemaxageinminutes" value="240"/> <property name="maxconnectionsperpartition" value="30"/> <property name="minconnectionsperpartition" value="10"/> <property name="partitioncount" value="3"/> <property name="acquireincrement" value="5"/> <property name="statementscachesize" value="100"/> <property name="releasehelperthreads" value="3"/> </bean> <bean id="sessionfactory" class="org.springframework.orm.hibernate4.localsessionfactorybean"> <property name="datasource" ref="datasource" /> <property name="packagestoscan" value="com.mycompany.domain.entity" /> <property name="hibernateproperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.default_schema">${hibernate.default_schema}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop> <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop> <prop key="hibernate.cache.region.factory_class">${hibernate.cache.region.factory_class}</prop> <!-- have tried setting "current_session_context_class", still getting "org.hibernate.lazyinitializationexception: not initialize proxy - no session" --> <!-- <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.springsessioncontext</prop> --> </props> </property> </bean> <bean id="transactionmanager" class="org.springframework.orm.hibernate4.hibernatetransactionmanager"> <property name="sessionfactory" ref="sessionfactory" /> <property name="datasource" ref="datasource" /> </bean> <bean id="transactiontemplate" class="org.springframework.transaction.support.transactiontemplate"> <property name="transactionmanager" ref="transactionmanager"/> </bean> <bean id="persistenceexceptiontranslationpostprocessor" class="org.springframework.dao.annotation.persistenceexceptiontranslationpostprocessor"/> <bean id="client" class="com.mycompany.console.client" /> </beans>

project main class:

bundle com.mycompany.console; import org.springframework.context.applicationcontext; import org.springframework.context.support.classpathxmlapplicationcontext; import org.springframework.stereotype.service; import org.springframework.transaction.annotation.propagation; import org.springframework.transaction.annotation.transactional; @service @transactional(propagation = propagation.required) public class client { private static final logger logger = logger.getlogger(client.class); public static void main(string args[]) { applicationcontext applicationcontext = null; // load spring application context seek { applicationcontext = new classpathxmlapplicationcontext("springhibernateconfig.xml"); final client client = applicationcontext.getbean("client"); // or applicationcontext.getbean(client.class) // tried using transactiontemplate, still getting "org.hibernate.lazyinitializationexception: not initialize proxy - no session" // transactiontemplate transactiontemplate = (transactiontemplate) applicationcontext.getbean("transactiontemplate"); // transactiontemplate.execute(new transactioncallback() { // @override // public object dointransaction(transactionstatus status) { // client.start(args); // homecoming null; // } // }); client.start(args); } grab (exception e) { system.err.println("error loading spring application context: " + e.getmessage()); e.printstacktrace(); system.exit(1); } } private void start(string args[]) { // list, save, update, delete entities // // calls facade.instance().getuserbyid(1l), illustration // // [...] } }

facade class (abdomain):

bundle com.mycompany.domain.facade; @service @transactional(propagation = propagation.required) public class abdomain { public static abdomain instance() { // springutil implements applicationcontextaware homecoming springutil.getapplicationcontext().getbean(abdomain.class); } public user getuserbyid(long id) { /* usuariodao interface, , implementation usuariodaoimpl extends abstracthibernatedao */ homecoming registry.getuserdao().findbyid(id); } }

registry class:

bundle com.mycompany.domain.registry; @component @transactional public class registry { private static applicationcontext applicationcontext; @autowired(required = true) public registry(applicationcontext appcontext) { applicationcontext = appcontext; } public static userdao getuserdao() { homecoming applicationcontext.getbean(userdao.class); } }

edit:

adding stack trace improve understanding.

note:

abdomain application facade (mentioned above). inbox class called client class org.springframework.orm.hibernate4.hibernatesystemexception: not initialize proxy - no session; nested exception org.hibernate.lazyinitializationexception: not initialize proxy - no session @ org.springframework.orm.hibernate4.sessionfactoryutils.converthibernateaccessexception(sessionfactoryutils.java:216) @ org.springframework.orm.hibernate4.hibernateexceptiontranslator.converthibernateaccessexception(hibernateexceptiontranslator.java:57) @ org.springframework.orm.hibernate4.hibernateexceptiontranslator.translateexceptionifpossible(hibernateexceptiontranslator.java:44) @ org.springframework.dao.support.chainedpersistenceexceptiontranslator.translateexceptionifpossible(chainedpersistenceexceptiontranslator.java:59) @ org.springframework.dao.support.dataaccessutils.translateifnecessary(dataaccessutils.java:213) @ org.springframework.dao.support.persistenceexceptiontranslationinterceptor.invoke(persistenceexceptiontranslationinterceptor.java:147) @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:179) @ org.springframework.aop.framework.jdkdynamicaopproxy.invoke(jdkdynamicaopproxy.java:207) @ com.sun.proxy.$proxy120.findlastposition(unknown source) @ com.mycompany.domain.facade.abdomain.findlastposition(abdomain.java:832) @ com.mycompany.domain.facade.abdomain$$fastclassbyspringcglib$$f56e1d49.invoke() @ org.springframework.cglib.proxy.methodproxy.invoke(methodproxy.java:204) @ org.springframework.aop.framework.cglibaopproxy$cglibmethodinvocation.invokejoinpoint(cglibaopproxy.java:708) @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:157) @ org.springframework.transaction.interceptor.transactioninterceptor$1.proceedwithinvocation(transactioninterceptor.java:98) @ org.springframework.transaction.interceptor.transactionaspectsupport.invokewithintransaction(transactionaspectsupport.java:262) @ org.springframework.transaction.interceptor.transactioninterceptor.invoke(transactioninterceptor.java:95) @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:179) @ org.springframework.aop.framework.cglibaopproxy$dynamicadvisedinterceptor.intercept(cglibaopproxy.java:644) @ com.mycompany.domain.facade.abdomain$$enhancerbyspringcglib$$4c071cee.findlastposition() @ com.mycompany.cpr.client.inbox.updatelastposition(inbox.java:714) @ com.mycompany.cpr.client.inbox.processmessage(inbox.java:604) @ com.mycompany.cpr.client.inbox$3.run(inbox.java:934) @ java.lang.thread.run(thread.java:745) caused by: org.hibernate.lazyinitializationexception: not initialize proxy - no session @ org.hibernate.proxy.abstractlazyinitializer.initialize(abstractlazyinitializer.java:165) @ org.hibernate.proxy.abstractlazyinitializer.getimplementation(abstractlazyinitializer.java:286) @ org.hibernate.proxy.pojo.javassist.javassistlazyinitializer.invoke(javassistlazyinitializer.java:185) @ com.mycompany.domain.entity.vehicle_$$_jvst374_1e.getid(vehicle_$$_jvst374_1e.java) @ com.mycompany.domain.dao.impl.lastpositiondaoimpl.findlastposition(lastpositiondaoimpl.java:34) @ sun.reflect.generatedmethodaccessor1487.invoke(unknown source) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:483) @ org.springframework.aop.support.aoputils.invokejoinpointusingreflection(aoputils.java:317) @ org.springframework.aop.framework.reflectivemethodinvocation.invokejoinpoint(reflectivemethodinvocation.java:190) @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:157) @ org.springframework.dao.support.persistenceexceptiontranslationinterceptor.invoke(persistenceexceptiontranslationinterceptor.java:136)

edit 2:

inbox class called client class (the main class). inbox has no annotation, tried @service @transactional or @component @transactional annotations. i'm looking solution opensessioninviewfilter commonly used in web projects.

after analyzing stack trace, see transactioninterceptor called, possible explication if seek initiale eneityt loaded in diffreent session current one:

so, method call: @ com.mycompany.domain.dao.impl.lastpositiondaoimpl.findlastposition(lastpositiondaoimpl.java:34)

is vehicle entity loaded in different thread/transaction/session , sent in message intercept with:

at com.mycompany.cpr.client.inbox.processmessage(inbox.java:604)

if case, need initialize wanted associations in producer transaction (the 1 fetches vehicle , sends it).

java spring hibernate console-application

No comments:

Post a Comment