Return-Path: Delivered-To: apmail-openjpa-dev-archive@www.apache.org Received: (qmail 14187 invoked from network); 19 Jun 2009 11:26:42 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 19 Jun 2009 11:26:42 -0000 Received: (qmail 98703 invoked by uid 500); 19 Jun 2009 11:26:53 -0000 Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org Received: (qmail 98639 invoked by uid 500); 19 Jun 2009 11:26:53 -0000 Mailing-List: contact dev-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openjpa.apache.org Delivered-To: mailing list dev@openjpa.apache.org Received: (qmail 98629 invoked by uid 99); 19 Jun 2009 11:26:53 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 19 Jun 2009 11:26:53 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of mtylenda@o2.pl designates 193.17.41.76 as permitted sender) Received: from [193.17.41.76] (HELO rekin26.go2.pl) (193.17.41.76) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 19 Jun 2009 11:26:41 +0000 Received: from rekin26.go2.pl (d4 [127.0.0.1]) by rekin26.go2.pl (Postfix) with ESMTP id 2A12A5BE79 for ; Fri, 19 Jun 2009 13:26:21 +0200 (CEST) Received: from o2.pl (unknown [10.0.0.36]) by rekin26.go2.pl (Postfix) with SMTP for ; Fri, 19 Jun 2009 13:26:21 +0200 (CEST) Subject: =?UTF-8?Q?Re:_Hang-ups_with_-javaagent?= From: =?UTF-8?Q?Mi=C5=82osz_Tylenda?= To: dev@openjpa.apache.org In-Reply-To: <1764e10f.423d777d.4a3a6c49.28580@o2.pl> References: <3c5b0300.443f6f2b.4a33a4d0.287c0@o2.pl> <1244912306858-3072866.post@n2.nabble.com> <1245075146262-3080441.post@n2.nabble.com> <1764e10f.423d777d.4a3a6c49.28580@o2.pl> Mime-Version: 1.0 Message-ID: <39bf52d8.5c6225f6.4a3b75dc.ed1b@o2.pl> Date: Fri, 19 Jun 2009 13:26:20 +0200 X-Originator: 192.156.102.6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Virus-Checked: Checked by ClamAV on apache.org Hi! Some=20more=20info.=20I=20gave=20it=20a=20try=20with=20the=20following=20= JDK/JREs: -=20Sun=205 -=20Sun=206 -=20IBM=205 -=20IBM=206 Only=20with=20IBM=206=20I=20was=20not=20able=20to=20reproduce=20the=20han= g-up.=20All=20other=20JVMs=20hang=20with=20the=20same=20pattern.=20The=20= Finalizer=20thread=20blocks=20in=20Class.forName=20-=20the=20requested=20= class=20is=20different=20for=20each=20JVM=20but=20always=20come=20from=20= sun.*=20package.=20The=20main=20thread=20also=20blocks=20in=20Class.forNa= me=20-=20the=20requested=20class=20varies=20across=20runs,=20usually=20(a= lways?)=20it=20is=20an=20OpenJPA=20class. The=20hang-up=20vanishes=20if=20I=20add=20Class.forName=20statements=20to= =20load=20the=20mentioned=20sun.*=20classes=20in=20setUp()=20of=20the=20t= est=20case. Greetings, Milosz >=20Rick, >=20 >=20Setting=20openjpa.DynamicEnhancementAgent=20to=20false=20did=20not=20= have=20any=20effect. >=20 >=20I=20have=20figured=20out=20that=20the=20issue=20depends=20on=20the=20= database=20connected.=20I=20can=20reproduce=20it=20with=20MySQL=20and=20P= ostgreSQL=20but=20not=20with=20DB2.=20Even=20with=20the=20first=20two=20d= atabases=20the=20reproducibility=20is=20"not=20always".=20Below=20I=20hav= e=20included=20suspended=20thread=20dumps=20from=20Eclipse=20(Windows)=20= -=20the=20first=20one=20is=20from=20PostgreSQL,=20the=20other=20one=20is=20= from=20MySQL.=20As=20you=20can=20see,=20this=20seems=20to=20be=20related=20= to=20executing=20finalize()=20on=20driver's=20Connection=20implementation= s.=20If=20I=20can=20read=20that=20stuff=20correctly,=20a=20hang-up=20occu= rs=20in=20TemporaryClassLoader,=20line=2059,=20in=20Class.forName: >=20 >=20=20=20=20=20=20=20=20=20//=20bug=20#283.=20defer=20to=20system=20if=20= the=20name=20is=20a=20protected=20name. >=20=20=20=20=20=20=20=20=20//=20"sun."=20is=20required=20for=20JDK=201.4= ,=20which=20has=20an=20access=20check=20for >=20=20=20=20=20=20=20=20=20//=20sun.reflect.GeneratedSerializationConstr= uctorAccessor1 >=20=20=20=20=20=20=20=20=20if=20(name.startsWith("java.")=20||=20name.st= artsWith("javax.") >=20=20=20=20=20=20=20=20=20=20=20=20=20||=20name.startsWith("sun.")) >=20=20=20=20=20=20=20=20=20=20=20=20=20return=20Class.forName(name,=20re= solve,=20getClass().getClassLoader()); >=20 >=20The=20name=20variable=20has=20a=20value=20of=20"sun.net.ConnectionRes= etException".=20The=20hang-up=20vanishes=20when=20I=20remove=20"||=20name= .startsWith("sun.")".=20Does=20someone=20understand=20what's=20going=20on= ? >=20 >=20Regards, >=20Milosz >=20 >=20PGSQL: >=20 >=20 >=20org.eclipse.jdt.internal.junit.runner.RemoteTestRunner=20at=20localho= st:1950 >=20(Suspended)=09 >=20=09System=20Thread=20[Finalizer]=20(Suspended)=09 >=20=09=09Class.forName0(String,=20boolean,=20ClassLoader)=20line:=20not=20= available >=20[native=20method]=09 >=20=09=09Class.forName(String,=20boolean,=20ClassLoader)=20line:=20not=20= available=09 >=20=09=09TemporaryClassLoader.loadClass(String,=20boolean)=20line:=2059=09= >=20=09=09TemporaryClassLoader.loadClass(String)=20line:=2044=09 >=20=09=09TemporaryClassLoader(ClassLoader).loadClassInternal(String)=20l= ine:=20not >=20available=09 >=20=09=09Class.forName0(String,=20boolean,=20ClassLoader)=20line:=20not=20= available >=20[native=20method]=09 >=20=09=09Class.forName(String,=20boolean,=20ClassLoader)=20line:=20not=20= available=09 >=20=09=09PCClassFileTransformer.needsEnhance(String,=20Class,=20byte[])=20= line:=20186=09 >=20=09=09PCClassFileTransformer.transform0(String,=20Class,=20byte[])=20= line:=20132=09 >=20=09=09PCClassFileTransformer.transform(ClassLoader,=20String,=20Class= , >=20ProtectionDomain,=20byte[])=20line:=20120=09 >=20=09=09TransformerManager.transform(ClassLoader,=20String,=20Class,=20= ProtectionDomain, >=20byte[])=20line:=20not=20available=09 >=20=09=09InstrumentationImpl.transform(ClassLoader,=20String,=20Class, >=20ProtectionDomain,=20byte[])=20line:=20not=20available=09 >=20=09=09SocketOutputStream.socketWrite(byte[],=20int,=20int)=20line:=20= not=20available=09 >=20=09=09SocketOutputStream.write(byte[],=20int,=20int)=20line:=20not=20= available=09 >=20=09=09BufferedOutputStream.flushBuffer()=20line:=20not=20available=09= >=20=09=09BufferedOutputStream.flush()=20line:=20not=20available=09 >=20=09=09PGStream.flush()=20line:=20508=09 >=20=09=09ProtocolConnectionImpl.close()=20line:=20138=09 >=20=09=09Jdbc3Connection(AbstractJdbc2Connection).close()=20line:=20516=09= >=20=09=09Jdbc3Connection(AbstractJdbc2Connection).finalize()=20line:=208= 34=09 >=20=09=09Finalizer.invokeFinalizeMethod(Object)=20line:=20not=20availabl= e=20[native >=20method]=09 >=20=09=09Finalizer.runFinalizer()=20line:=20not=20available=09 >=20=09=09Finalizer.access$100(Finalizer)=20line:=20not=20available=09 >=20=09=09Finalizer$FinalizerThread.run()=20line:=20not=20available=09 >=20=09System=20Thread=20[Reference=20Handler]=20(Suspended)=09 >=20=09Thread=20[main]=20(Suspended)=09 >=20=09=09ClassLoader.findBootstrapClass(String)=20line:=20not=20availabl= e=20[native >=20method]=09 >=20=09=09Launcher$ExtClassLoader(ClassLoader).findBootstrapClass0(String= )=20line:=20not >=20available=09 >=20=09=09Launcher$ExtClassLoader(ClassLoader).loadClass(String,=20boolea= n)=20line:=20not >=20available=09 >=20=09=09Launcher$AppClassLoader(ClassLoader).loadClass(String,=20boolea= n)=20line:=20not >=20available=09 >=20=09=09Launcher$AppClassLoader.loadClass(String,=20boolean)=20line:=20= not=20available=09 >=20=09=09Launcher$AppClassLoader(ClassLoader).loadClass(String)=20line:=20= not >=20available=09 >=20=09=09Launcher$AppClassLoader(ClassLoader).loadClassInternal(String)=20= line:=20not >=20available=09 >=20=09=09Class.forName0(String,=20boolean,=20ClassLoader)=20line:=20not=20= available >=20[native=20method]=09 >=20=09=09Class.forName(String,=20boolean,=20ClassLoader)=20line:=20not=20= available=09 >=20=09=09Package.getPackageInfo()=20line:=20not=20available=09 >=20=09=09Package.getDeclaredAnnotations()=20line:=20not=20available=09 >=20=09=09AnnotationPersistenceMetaDataParser.parsePackageAnnotations()=20= line:=20451=09 >=20=09=09AnnotationPersistenceMetaDataParser.parse(Class)=20line:=20415=09= >=20=09=09PersistenceMetaDataFactory.load(Class,=20int,=20ClassLoader)=20= line:=20231=09 >=20=09=09MetaDataRepository.getMetaDataInternal(Class,=20ClassLoader)=20= line:=20489=09 >=20=09=09MetaDataRepository.getMetaData(Class,=20ClassLoader,=20boolean)= =20line:=20309=09 >=20=09=09PCClassFileTransformer.needsEnhance(String,=20Class,=20byte[])=20= line:=20188=09 >=20=09=09PCClassFileTransformer.transform0(String,=20Class,=20byte[])=20= line:=20132=09 >=20=09=09PCClassFileTransformer.transform(ClassLoader,=20String,=20Class= , >=20ProtectionDomain,=20byte[])=20line:=20120=09 >=20=09=09TransformerManager.transform(ClassLoader,=20String,=20Class,=20= ProtectionDomain, >=20byte[])=20line:=20not=20available=09 >=20=09=09InstrumentationImpl.transform(ClassLoader,=20String,=20Class, >=20ProtectionDomain,=20byte[])=20line:=20not=20available=09 >=20=09=09ClassLoader.defineClass1(String,=20byte[],=20int,=20int,=20Prot= ectionDomain, >=20String)=20line:=20not=20available=20[native=20method]=09 >=20=09=09Launcher$AppClassLoader(ClassLoader).defineClass(String,=20byte= [],=20int,=20int, >=20ProtectionDomain)=20line:=20not=20available=09 >=20=09=09Launcher$AppClassLoader(SecureClassLoader).defineClass(String,=20= byte[], >=20int,=20int,=20CodeSource)=20line:=20not=20available=09 >=20=09=09Launcher$AppClassLoader(URLClassLoader).defineClass(String,=20R= esource) >=20line:=20not=20available=09 >=20=09=09URLClassLoader.access$100(URLClassLoader,=20String,=20Resource)= =20line:=20not >=20available=09 >=20=09=09URLClassLoader$1.run()=20line:=20not=20available=09 >=20=09=09AccessController.doPrivileged(PrivilegedExceptionAction, >=20AccessControlContext)=20line:=20not=20available=20[native=20method]=09= >=20=09=09Launcher$AppClassLoader(URLClassLoader).findClass(String)=20lin= e:=20not >=20available=09 >=20=09=09Launcher$AppClassLoader(ClassLoader).loadClass(String,=20boolea= n)=20line:=20not >=20available=09 >=20=09=09Launcher$AppClassLoader.loadClass(String,=20boolean)=20line:=20= not=20available=09 >=20=09=09Launcher$AppClassLoader(ClassLoader).loadClass(String)=20line:=20= not >=20available=09 >=20=09=09Launcher$AppClassLoader(ClassLoader).loadClassInternal(String)=20= line:=20not >=20available=09 >=20=09=09JDBCBrokerFactory.newStoreManager()=20line:=20106=09 >=20=09=09JDBCBrokerFactory(AbstractBrokerFactory).initializeBroker(boole= an,=20int, >=20BrokerImpl,=20boolean)=20line:=20224=09 >=20=09=09JDBCBrokerFactory(AbstractBrokerFactory).newBroker(String,=20St= ring, >=20boolean,=20int,=20boolean)=20line:=20205=09 >=20=09=09DelegatingBrokerFactory.newBroker(String,=20String,=20boolean,=20= int,=20boolean) >=20line:=20160=09 >=20=09=09EntityManagerFactoryImpl.createEntityManager(Map)=20line:=20212= =09 >=20=09=09EntityManagerFactoryImpl.createEntityManager()=20line:=20165=09= >=20=09=09TestBasicAnnotation.testEagerFetchType()=20line:=2044=09 >=20=09=09NativeMethodAccessorImpl.invoke0(Method,=20Object,=20Object[])=20= line:=20not >=20available=20[native=20method]=09 >=20=09=09NativeMethodAccessorImpl.invoke(Object,=20Object[])=20line:=20n= ot=20available=09 >=20=09=09DelegatingMethodAccessorImpl.invoke(Object,=20Object[])=20line:= =20not >=20available=09 >=20=09=09Method.invoke(Object,=20Object...)=20line:=20not=20available=09= >=20=09=09TestBasicAnnotation(TestCase).runTest()=20line:=20154=09 >=20=09=09TestBasicAnnotation(TestCase).runBare()=20line:=20127=09 >=20=09=09TestBasicAnnotation(PersistenceTestCase).runBare()=20line:=2046= 6=09 >=20=09=09TestResult$1.protect()=20line:=20106=09 >=20=09=09TestResult.runProtected(Test,=20Protectable)=20line:=20124=09 >=20=09=09TestResult.run(TestCase)=20line:=20109=09 >=20=09=09TestBasicAnnotation(TestCase).run(TestResult)=20line:=20118=09 >=20=09=09TestBasicAnnotation(PersistenceTestCase).run(TestResult)=20line= :=20181=09 >=20=09=09TestSuite.runTest(Test,=20TestResult)=20line:=20208=09 >=20=09=09TestSuite.run(TestResult)=20line:=20203=09 >=20=09=09JUnit3TestReference.run(TestExecution)=20line:=20128=09 >=20=09=09TestExecution.run(ITestReference[])=20line:=2038=09 >=20=09=09RemoteTestRunner.runTests(String[],=20String,=20TestExecution)=20= line:=20460=09 >=20=09=09RemoteTestRunner.runTests(TestExecution)=20line:=20673=09 >=20=09=09RemoteTestRunner.run()=20line:=20386=09 >=20=09=09RemoteTestRunner.main(String[])=20line:=20196=09 >=20=09System=20Thread=20[Signal=20Dispatcher]=20(Suspended)=09 >=20=09Thread=20[ReaderThread]=20(Suspended)=09 >=20 >=20 >=20MySQL: >=20 >=20 >=20org.eclipse.jdt.internal.junit.runner.RemoteTestRunner=20at=20localho= st:2016 >=20(Suspended)=09 >=20=09System=20Thread=20[Finalizer]=20(Suspended)=09 >=20=09=09Class.forName0(String,=20boolean,=20ClassLoader)=20line:=20not=20= available >=20[native=20method]=09 >=20=09=09Class.forName(String,=20boolean,=20ClassLoader)=20line:=20not=20= available=09 >=20=09=09TemporaryClassLoader.loadClass(String,=20boolean)=20line:=2059=09= >=20=09=09TemporaryClassLoader.loadClass(String)=20line:=2044=09 >=20=09=09TemporaryClassLoader(ClassLoader).loadClassInternal(String)=20l= ine:=20not >=20available=09 >=20=09=09Class.forName0(String,=20boolean,=20ClassLoader)=20line:=20not=20= available >=20[native=20method]=09 >=20=09=09Class.forName(String,=20boolean,=20ClassLoader)=20line:=20not=20= available=09 >=20=09=09PCClassFileTransformer.needsEnhance(String,=20Class,=20byte[])=20= line:=20186=09 >=20=09=09PCClassFileTransformer.transform0(String,=20Class,=20byte[])=20= line:=20132=09 >=20=09=09PCClassFileTransformer.transform(ClassLoader,=20String,=20Class= , >=20ProtectionDomain,=20byte[])=20line:=20120=09 >=20=09=09TransformerManager.transform(ClassLoader,=20String,=20Class,=20= ProtectionDomain, >=20byte[])=20line:=20not=20available=09 >=20=09=09InstrumentationImpl.transform(ClassLoader,=20String,=20Class, >=20ProtectionDomain,=20byte[])=20line:=20not=20available=09 >=20=09=09SocketOutputStream.socketWrite(byte[],=20int,=20int)=20line:=20= not=20available=09 >=20=09=09SocketOutputStream.write(byte[],=20int,=20int)=20line:=20not=20= available=09 >=20=09=09BufferedOutputStream.flushBuffer()=20line:=20not=20available=09= >=20=09=09BufferedOutputStream.flush()=20line:=20not=20available=09 >=20=09=09MysqlIO.send(Buffer,=20int)=20line:=203251=09 >=20=09=09MysqlIO.quit()=20line:=201659=09 >=20=09=09ConnectionImpl.realClose(boolean,=20boolean,=20boolean,=20Throw= able)=20line: >=204296=09 >=20=09=09ConnectionImpl.cleanup(Throwable)=20line:=201265=09 >=20=09=09ConnectionImpl.finalize()=20line:=202667=09 >=20=09=09Finalizer.invokeFinalizeMethod(Object)=20line:=20not=20availabl= e=20[native >=20method]=09 >=20=09=09Finalizer.runFinalizer()=20line:=20not=20available=09 >=20=09=09Finalizer.access$100(Finalizer)=20line:=20not=20available=09 >=20=09=09Finalizer$FinalizerThread.run()=20line:=20not=20available=09 >=20=09System=20Thread=20[Reference=20Handler]=20(Suspended)=09 >=20=09Thread=20[main]=20(Suspended)=09 >=20=09=09ClassLoader.findBootstrapClass(String)=20line:=20not=20availabl= e=20[native >=20method]=09 >=20=09=09Launcher$ExtClassLoader(ClassLoader).findBootstrapClass0(String= )=20line:=20not >=20available=09 >=20=09=09Launcher$ExtClassLoader(ClassLoader).loadClass(String,=20boolea= n)=20line:=20not >=20available=09 >=20=09=09Launcher$AppClassLoader(ClassLoader).loadClass(String,=20boolea= n)=20line:=20not >=20available=09 >=20=09=09Launcher$AppClassLoader.loadClass(String,=20boolean)=20line:=20= not=20available=09 >=20=09=09Launcher$AppClassLoader(ClassLoader).loadClass(String)=20line:=20= not >=20available=09 >=20=09=09Launcher$AppClassLoader(ClassLoader).loadClassInternal(String)=20= line:=20not >=20available=09 >=20=09=09ConnectionImpl.rollback()=20line: >=204628=09 >=20=09=09LoggingConnectionDecorator$LoggingConnection=5F(DelegatingConne= ction).rollback()=20line: >=20234=09 >=20=09=09LoggingConnectionDecorator$LoggingConnection=5F(LoggingConnecti= onDecorator$LoggingConnection).rollback()=20line: >=20398=09 >=20=09=09ConfiguringConnectionDecorator$ConfiguringConnection=5F(Delegat= ingConnection).rollback()=20line: >=20234=09 >=20=09=09ConfiguringConnectionDecorator$ConfiguringConnection=5F(Configu= ringConnectionDecorator$ConfiguringConnection).rollback()=20line:=20148=09= >=20=09=09SchemaTool.executeSQL(String[])=20line:=201196=09 >=20=09=09SchemaTool.deleteTableContents()=20line:=20427=09 >=20=09=09SchemaTool.run()=20line:=20335=09 >=20=09=09MappingTool.record(MappingTool$Flags)=20line:=20501=09 >=20=09=09MappingTool.record()=20line:=20453=09 >=20=09=09JDBCBrokerFactory.synchronizeMappings(ClassLoader,=20JDBCConfig= uration) >=20line:=20159=09 >=20=09=09JDBCBrokerFactory.synchronizeMappings(ClassLoader)=20line:=2016= 3=09 >=20=09=09JDBCBrokerFactory.newBrokerImpl(String,=20String)=20line:=20119= =09 >=20=09=09JDBCBrokerFactory(AbstractBrokerFactory).newBroker(String,=20St= ring, >=20boolean,=20int,=20boolean)=20line:=20204=09 >=20=09=09DelegatingBrokerFactory.newBroker(String,=20String,=20boolean,=20= int,=20boolean) >=20line:=20160=09 >=20=09=09EntityManagerFactoryImpl.createEntityManager(Map)=20line:=20212= =09 >=20=09=09EntityManagerFactoryImpl.createEntityManager()=20line:=20165=09= >=20=09=09TestBasicAnnotation.testEagerFetchType()=20line:=2044=09 >=20=09=09NativeMethodAccessorImpl.invoke0(Method,=20Object,=20Object[])=20= line:=20not >=20available=20[native=20method]=09 >=20=09=09NativeMethodAccessorImpl.invoke(Object,=20Object[])=20line:=20n= ot=20available=09 >=20=09=09DelegatingMethodAccessorImpl.invoke(Object,=20Object[])=20line:= =20not >=20available=09 >=20=09=09Method.invoke(Object,=20Object...)=20line:=20not=20available=09= >=20=09=09TestBasicAnnotation(TestCase).runTest()=20line:=20154=09 >=20=09=09TestBasicAnnotation(TestCase).runBare()=20line:=20127=09 >=20=09=09TestBasicAnnotation(PersistenceTestCase).runBare()=20line:=2046= 6=09 >=20=09=09TestResult$1.protect()=20line:=20106=09 >=20=09=09TestResult.runProtected(Test,=20Protectable)=20line:=20124=09 >=20=09=09TestResult.run(TestCase)=20line:=20109=09 >=20=09=09TestBasicAnnotation(TestCase).run(TestResult)=20line:=20118=09 >=20=09=09TestBasicAnnotation(PersistenceTestCase).run(TestResult)=20line= :=20181=09 >=20=09=09TestSuite.runTest(Test,=20TestResult)=20line:=20208=09 >=20=09=09TestSuite.run(TestResult)=20line:=20203=09 >=20=09=09JUnit3TestReference.run(TestExecution)=20line:=20128=09 >=20=09=09TestExecution.run(ITestReference[])=20line:=2038=09 >=20=09=09RemoteTestRunner.runTests(String[],=20String,=20TestExecution)=20= line:=20460=09 >=20=09=09RemoteTestRunner.runTests(TestExecution)=20line:=20673=09 >=20=09=09RemoteTestRunner.run()=20line:=20386=09 >=20=09=09RemoteTestRunner.main(String[])=20line:=20196=09 >=20=09System=20Thread=20[Signal=20Dispatcher]=20(Suspended)=09 >=20=09Thread=20[ReaderThread]=20(Suspended)=09 >=20=09Thread=20[MySQL=20Statement=20Cancellation=20Timer]=20(Suspended)=09= >=20 >=20 >=20>=20 >=20>=20Milosz=20- >=20>=20 >=20>=20Setting=20openjpa.DynamicEnhancementAgent=20to=20false=20should=20= not=20have=20any=20affect >=20>=20on=20your=20scenario=20for=20two=20reasons.=20First,=20when=20you= =20are=20using=20the=20javaagent >=20>=20for=20enhancement=20the=20dynamic=20enhancer=20detects=20that=20a= nd=20will=20not=20do=20any=20work. >=20>=20Second,=20the=20dynamic=20enhancer=20depends=20on=20an=20API=20th= at=20exists=20ONLY=20on=20the=20Sun >=20>=201.6=20JDK.=20 >=20>=20 >=20>=20Let=20me=20know=20if=20you=20have=20any=20more=20debug=20info=20a= s=20I'd=20be=20interested=20in=20getting >=20>=20to=20the=20bottom=20of=20the=20hang=20that=20you're=20observing. >=20>=20 >=20>=20-Rick >=20>=20--=20 >=20>=20View=20this=20message=20in=20context:=20http://n2.nabble.com/Hang= -ups-with--javaagent-tp3072225p3080441.html >=20>=20Sent=20from=20the=20OpenJPA=20Developers=20mailing=20list=20archi= ve=20at=20Nabble.com. >=20>=20 >=20>=20 >=20