java - Hibernate Illegal State Exception -


i new in hibernate , while using hibernate, encounters illegastateexception couple of times, exception not consistent don't know on particular condition happens, never happens happens, unable figure out how can resolved, please shed light on this.

may 14, 2013 5:32:40 pm org.apache.catalina.loader.webappclassloader loadclass info: illegal access: web application instance has been stopped already.  not load com.mysql.jdbc.profilereventhandlerfactory.  eventual following stack trace caused error thrown debugging purposes attempt terminate thread caused illegal access, , has no functional impact.  java.lang.illegalstateexception     @ org.apache.catalina.loader.webappclassloader.loadclass(webappclassloader.java:1600)     @ org.apache.catalina.loader.webappclassloader.loadclass(webappclassloader.java:1559)     @ com.mysql.jdbc.connectionimpl.realclose(connectionimpl.java:4412)     @ com.mysql.jdbc.connectionimpl.close(connectionimpl.java:1564)     @ org.hibernate.service.jdbc.connections.internal.drivermanagerconnectionproviderimpl.stop(drivermanagerconnectionproviderimpl.java:160)     @ org.hibernate.service.jdbc.connections.internal.drivermanagerconnectionproviderimpl.finalize(drivermanagerconnectionproviderimpl.java:229)     @ java.lang.ref.finalizer.invokefinalizemethod(native method)     @ java.lang.ref.finalizer.runfinalizer(finalizer.java:101)     @ java.lang.ref.finalizer.access$100(finalizer.java:32)     @ java.lang.ref.finalizer$finalizerthread.run  (finalizer.java:178) 

this upsetting. using 1 of created wrapper work sessions , sessionfactory. checked code used closesession() every time used in dao's working hibernate api internally.

this managersessionfactory(wrapper)

public class managersessionfactory {  private static sessionfactory sessionfactory; private static configuration configuration; protected static threadlocal<session> threadlocal = new threadlocal<session>();  static void initializesessionfactory(string configfilepath) {     try {         // create sessionfactory standard (hibernate.cfg.xml)          // config file.         configuration = new configuration();         sessionfactory = configuration.configure(configfilepath).buildsessionfactory();     } catch (throwable ex) {         // log exception.          system.err.println("initial sessionfactory creation failed." + ex.getmessage());         throw new exceptionininitializererror(ex);     } }  private static sessionfactory getsessionfactory() {     return sessionfactory; }  public static session createsession() {     return createsession(null); }  public static session createsession(string configfilepath) {      if (configfilepath == null || configfilepath.trim().equals("")) {         configfilepath = "/hibernate.cfg.xml";     }     sessionfactory localsessionfactory = managersessionfactory.getsessionfactory();     session session = managersessionfactory.threadlocal.get();      if (session == null || !session.isopen()) {          if (localsessionfactory == null) {             try {                 managersessionfactory.initializesessionfactory(configfilepath);                 localsessionfactory = managersessionfactory.getsessionfactory();             } catch (exception e) {                 system.err.println("%%%% error creating sessionfactory %%%% " + e.getmessage());             }         }         session = localsessionfactory.getcurrentsession();         system.out.println("session opened......");         managersessionfactory.threadlocal.set(session);     }        return session; }  public static void closesession(){     closesession((session)managersessionfactory.threadlocal.get());     return; }  public static void closesession(session session){      if (session != null && session.isopen()) {         session.close();         //managersessionfactory.threadlocal.     }     session = null;      return; } } 

and managetransaction extends functionalities of previous class :

public class managetransaction extends managersessionfactory {  private session session; private transaction transaction; private string configfilepath; private boolean tostarttransaction;  public managetransaction() {      this.session = managersessionfactory.createsession();     initmanagertransaction("", false, session); }  public managetransaction(boolean tostarttransaction) {     this.session = managersessionfactory.createsession();     if (tostarttransaction) {         this.transaction = this.session.gettransaction();         this.transaction = this.transaction.isactive() ? this.transaction : this.session.begintransaction();     }     initmanagertransaction("", tostarttransaction, session); }  public managetransaction(boolean tostarttransaction, string configfilepath) {      if (tostarttransaction) {         this.session = managersessionfactory.createsession();         this.transaction = this.transaction.isactive() ? this.transaction : this.session.begintransaction();     }     initmanagertransaction(configfilepath, tostarttransaction, this.session);  }  public managetransaction(string configfilepath, boolean tostarttransaction) {      managersessionfactory.initializesessionfactory(configfilepath);     if (tostarttransaction) {         this.session = managersessionfactory.createsession();         this.transaction = this.transaction.isactive() ? this.transaction : this.session.begintransaction();     }     initmanagertransaction(configfilepath, tostarttransaction, this.session); }  public threadlocal<session> getthreadlocal() {     return threadlocal; }  private void initmanagertransaction(string configfilepath, boolean tostarttransaction, session session) {     this.configfilepath = configfilepath == null ? "" : configfilepath;     this.tostarttransaction = tostarttransaction;     managetransaction.threadlocal.set(session); } public void closemanagetransaction() {         aftereveryoperation(true);         managersessionfactory.closesession(this.getsession());     }  } 

this hibernate.cfg.xml

<hibernate-configuration> <session-factory>     <property name="hibernate.dialect">org.hibernate.dialect.mysqldialect</property>     <property name="hibernate.connection.driver_class">com.mysql.jdbc.driver</property>     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/befundo?zerodatetimebehavior=converttonull</property>     <property name="hibernate.connection.username">root</property>     <property name="hibernate.connection.password">root</property>     <property name="hibernate.show_sql">false</property>     <property name="hibernate.hbm2ddl.auto">update</property>     <property name="hibernate.current_session_context_class">thread</property>     <!--mapping classes --> </session-factory> </hibernate-configuration> 

thanks in advance.

i think problem not closing sessonfactory. session factory creating connection pool. closed (connections released) when sessionfactory closed. since not explicitly closing close being called when object garbage collected (finalize method). after webapp has been undeployed.

a quick fix add servletcontextlistener , close session factory in destroy method.

your code looks complicated , have lot of issues it. better use spring or ejb sessions beans handle this.


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -