[Squirrel-sql-commits] sql12/plugins/hibernate/src/net/sourceforge/squirrel_sql/plugins/hibernate
A Java SQL client for any JDBC compliant database
Brought to you by:
colbell,
gerdwagner
From: Rob M. <man...@us...> - 2007-07-25 07:51:17
|
Update of /cvsroot/squirrel-sql/sql12/plugins/hibernate/src/net/sourceforge/squirrel_sql/plugins/hibernate In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv23717/plugins/hibernate/src/net/sourceforge/squirrel_sql/plugins/hibernate Modified Files: HQLTabController.java HibnerateConnector.java Log Message: Hibernate plugin - initial attempt to use current Session for database connection part of Configuration. To use, omit the custom SessionFactoryProviderImpl. Currently this throws a ClassCastException when loading the dialect within Hibernate. Index: HibnerateConnector.java =================================================================== RCS file: /cvsroot/squirrel-sql/sql12/plugins/hibernate/src/net/sourceforge/squirrel_sql/plugins/hibernate/HibnerateConnector.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** HibnerateConnector.java 21 May 2007 21:13:58 -0000 1.2 --- HibnerateConnector.java 25 Jul 2007 07:51:14 -0000 1.3 *************** *** 1,7 **** --- 1,12 ---- package net.sourceforge.squirrel_sql.plugins.hibernate; + import net.sourceforge.squirrel_sql.client.session.ISession; import net.sourceforge.squirrel_sql.plugins.hibernate.configuration.HibernateConfiguration; + import net.sourceforge.squirrel_sql.plugins.hibernate.util.SessionFactoryImplFromSquirrelSessionProvider; import javax.swing.*; + + import org.hibernate.impl.SessionFactoryImpl; + import java.io.File; import java.lang.reflect.Method; *************** *** 18,22 **** } ! public void connect(final HibernateConfiguration cfg) { Runnable runnable = new Runnable() --- 23,27 ---- } ! public void connect(final HibernateConfiguration cfg, final ISession session) { Runnable runnable = new Runnable() *************** *** 24,28 **** public void run() { ! doConnect(cfg); } }; --- 29,33 ---- public void run() { ! doConnect(cfg, session); } }; *************** *** 42,46 **** } ! private void doConnect(HibernateConfiguration cfg) { try --- 47,51 ---- } ! private void doConnect(HibernateConfiguration cfg, ISession session) { try *************** *** 48,83 **** String provider = cfg.getProvider(); - String[] classpath = cfg.getClassPathEntries(); - - URL[] classpathUrls = new URL[classpath.length]; - - for (int i = 0; i < classpathUrls.length; i++) - { - classpathUrls[i] = new File(classpath[i]).toURL(); - } - - URLClassLoader cl = new URLClassLoader(classpathUrls, null); - - Thread.currentThread().setContextClassLoader(cl); ! ! Class<?> providerClass = cl.loadClass(provider); ! ! Object sessionFactoryProviderImpl = providerClass.newInstance(); ! ! Method meth = providerClass.getMethod("getSessionFactoryImpl", new Class[0]); ! Object sessionFactoryImpl = meth.invoke(sessionFactoryProviderImpl, new Object[0]); ! ! final HibernateConnection con = new HibernateConnection(sessionFactoryImpl, cl); ! ! ! SwingUtilities.invokeLater(new Runnable() ! { ! public void run() ! { ! _hibnerateConnectorListener.connected(con); ! } ! }); ! Thread.currentThread().setContextClassLoader(null); --- 53,86 ---- String provider = cfg.getProvider(); ! URLClassLoader cl = getClassLoader(cfg); ! ! ! ! HibernateConnection con = null; ! Object sessionFactoryImpl = null; ! ! if (provider == null) { ! //TODO: ! // When I attempt to use the user-specified classpath, for some ! // reason Hibernate internally cannot cast it's Oracle9Dialect ! // to Dialect which is the abstract base class - it throws a ! // ClassCastException. Yet without this, the user would be ! // forced to package up their app and stick it into SQuirreL's ! // classpath somehow - lib or script. ! Thread.currentThread().setContextClassLoader(cl); ! sessionFactoryImpl = doConnectUsingSession(cfg, session); ! } else { ! Thread.currentThread().setContextClassLoader(cl); ! Class<?> providerClass = cl.loadClass(provider); ! ! Object sessionFactoryProviderImpl = providerClass.newInstance(); ! ! Method meth = providerClass.getMethod("getSessionFactoryImpl", new Class[0]); ! sessionFactoryImpl = meth.invoke(sessionFactoryProviderImpl, new Object[0]); ! } ! con = new HibernateConnection(sessionFactoryImpl, cl); ! sendConnection(con); ! Thread.currentThread().setContextClassLoader(null); *************** *** 94,96 **** --- 97,135 ---- } } + + private void sendConnection(final HibernateConnection con) { + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + _hibnerateConnectorListener.connected(con); + } + }); + } + + private SessionFactoryImpl doConnectUsingSession(HibernateConfiguration cfg, + ISession session) { + SessionFactoryImplFromSquirrelSessionProvider prov = + new SessionFactoryImplFromSquirrelSessionProvider(); + prov.setHibernateConfig(cfg); + prov.setSession(session); + return prov.getSessionFactoryImpl(); + } + + private URLClassLoader getClassLoader(HibernateConfiguration cfg) + throws Exception + { + String[] classpath = cfg.getClassPathEntries(); + + URL[] classpathUrls = new URL[classpath.length]; + + for (int i = 0; i < classpathUrls.length; i++) + { + classpathUrls[i] = new File(classpath[i]).toURL(); + } + + URLClassLoader cl = new URLClassLoader(classpathUrls, null); + + return cl; + } } Index: HQLTabController.java =================================================================== RCS file: /cvsroot/squirrel-sql/sql12/plugins/hibernate/src/net/sourceforge/squirrel_sql/plugins/hibernate/HQLTabController.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** HQLTabController.java 25 Jun 2007 21:40:41 -0000 1.9 --- HQLTabController.java 25 Jul 2007 07:51:13 -0000 1.10 *************** *** 128,132 **** _panel.btnConnected.setDisabledSelectedIcon(_resource.getIcon(HibernatePluginResources.IKeys.CONNECTING_IMAGE)); _panel.btnConnected.repaint(); ! _hibnerateConnector.connect((HibernateConfiguration)_panel.cboConfigurations.getSelectedItem()); } else --- 128,132 ---- _panel.btnConnected.setDisabledSelectedIcon(_resource.getIcon(HibernatePluginResources.IKeys.CONNECTING_IMAGE)); _panel.btnConnected.repaint(); ! _hibnerateConnector.connect((HibernateConfiguration)_panel.cboConfigurations.getSelectedItem(), _session); } else *************** *** 180,184 **** _session.showErrorMessage(t); s_log.error(t); ! _con = null; _hqlPanelController.setConnection(null); --- 180,187 ---- _session.showErrorMessage(t); s_log.error(t); ! if (s_log.isDebugEnabled()) { ! t.printStackTrace(); ! } ! _con = null; _hqlPanelController.setConnection(null); |