From: thomas at tada.se (Thomas Hallgren) Date: Sat, 25 Mar 2006 21:15:40 +0100 Subject: [Pljava-dev] Cannot find dynamic class In-Reply-To: <44257C46.6070701@metadapt.com> References: <4424C5C3.4000500@metadapt.com> <4424F664.7060105@tada.se> <44257C46.6070701@metadapt.com> Message-ID: <4425A4EC.6000101@tada.se> Hi Darren, Now I see what's going on. You're using an old version of PL/Java that had issues when classes where loaded using threads different from the main thread. The backend doesn't understand the concept of threads at all so it assumes that a stack overflow has occurred when the thread (and thus the stack) has changed. Please upgrade to PL/Java 1.2.0. Regards, Thomas Hallgren Darren Govoni wrote: > Hi Thomas, > Thanks for responding. :) Here is my stack trace. > > INFO: 24 Mar 06 23:06:59 org.postgresql.pljava.sqlj.Loader Failed to > load class > org.postgresql.pljava.internal.ServerException: stack depth > limit exceeded > at > org.postgresql.pljava.internal.ExecutionPlan._cursorOpen(Native Method) > at > org.postgresql.pljava.internal.ExecutionPlan.cursorOpen(ExecutionPlan.java:136) > > at > org.postgresql.pljava.jdbc.SPIStatement.executePlan(SPIStatement.java:114) > > at > org.postgresql.pljava.jdbc.SPIPreparedStatement.execute(SPIPreparedStatement.java:263) > > at > org.postgresql.pljava.jdbc.SPIPreparedStatement.executeQuery(SPIPreparedStatement.java:72) > > at > org.postgresql.pljava.sqlj.Loader.findClass(Loader.java:171) > at java.lang.ClassLoader.loadClass(ClassLoader.java:289) > at java.lang.ClassLoader.loadClass(ClassLoader.java:235) > at > java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) > at > com.echomine.net.SocketConnector$1.run(SocketConnector.java:285) > at java.lang.Thread.run(Thread.java:534) > > java.lang.NoClassDefFoundError: alt/java/net/SocketImpl > at > com.echomine.net.SocketConnector$1.run(SocketConnector.java:285) > at java.lang.Thread.run(Thread.java:534) > > ---------- > > > Here is the code generating it. > > Class: SocketConnector.java > > .... > import alt.java.net.SocketImpl; > ..... > > public void aconnect(final SocketHandler socketHandler, final > ConnectionModel connectionModel) { > Thread thread = new Thread(new Runnable() { > public void run() { > alt.java.net.Socket socket = null; > try { > ConnectionEvent event = new > ConnectionEvent(connectionModel, ConnectionEvent.CONNECTION_STARTING > ); > ConnectionEvent vetoEvent = new > ConnectionEvent(connectionModel, ConnectionEvent.CONNECTION_VETO > ED); > fireConnectionStarting(event, vetoEvent); > socketHandler.start(); > if (connectionModel.isSSL()) { > socket = new > SocketImpl(negotiateSSLConnection(connectionModel)); > } else { > --->>> socket = new SocketImpl(new > Socket(connectionModel.getHost(), connectionModel.getPort())); > } > > > It appears the class in question is indeed in the jar I load. > > Thank you!!! > > Darren > > > Thomas Hallgren wrote: >> Hi Darren, >> What do you mean when you say 'dynamically loaded'? Do you load it >> using an explicit ClassLoader.loadClass() call? And that succeeds? >> Also, when you say 'statically initializes', you you mean that the >> class in question has a static attribute of class SocketImpl, does it >> extend that class, or does it use an explicit ClassLoader inside of a >> static initializer? >> >> Is it a ClassNotFoundException or a NoClassDefFoundError that you are >> experiencing? Can you provide a stack trace? >> >> Regards, >> Thomas Hallgren >> >> >> Darren Govoni wrote: >>> Hi, >>> >>> Running pljava 1.1 with postgres 8.0.3. >>> >>> I have a single jar that contains all my classes. One class >>> 'SocketImpl', is dynamically loaded, however >>> pljava throws a class not found exception when I try to execute a >>> function on a class that statically initializes >>> with 'SocketImpl'. Any tips very appreciated! >>> >>> Cheers, >>> Darren >>> _______________________________________________ >>> Pljava-dev mailing list >>> Pljava-dev at gborg.postgresql.org >>> http://gborg.postgresql.org/mailman/listinfo/pljava-dev >>> >> >