/* * Copyright (c) 2004, 2005, 2006 TADA AB - Taby Sweden * Distributed under the terms shown in the file COPYRIGHT * found in the root folder of this project or at * http://eng.tada.se/osprojects/COPYRIGHT.html */ package org.postgresql.pljava; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.SQLException; /** * The SessionManager makes the current {@link Session} available to the * caller. * @author Thomas Hallgren */ public class SessionManager { private static Method s_getSession; /** * Returns the current session. */ public static Session current() throws SQLException { try { if(s_getSession == null) { String sp = System.getProperty( "org.postgresql.pljava.sessionprovider", "org.postgresql.pljava.internal.Backend"); Class spc = Class.forName(sp); s_getSession = spc.getMethod("getSession", null); } return (Session)s_getSession.invoke(null, null); } catch (RuntimeException e) { throw e; } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if(t instanceof SQLException) throw (SQLException)t; if(t instanceof RuntimeException) throw (RuntimeException)t; throw new SQLException(t.getMessage()); } catch (Exception e) { throw new SQLException(e.getMessage()); } } }