tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Vysny <...@whitestein.com>
Subject Re: ClassNotFoundException: JaccProvider$Factory
Date Mon, 21 Jan 2008 16:15:30 GMT

On Wed, 2008-01-16 at 12:30 -0800, David Blevins wrote:
> On Jan 16, 2008, at 1:34 AM, Martin Vysny wrote:
> 
> > Hi guys,
> > can you please help me with this one? Rarely, the OpenEJB startup
> > fails with the exception ClassNotFoundException: JaccProvider$Factory
> > (full stacktrace is below). The interesting point is, that you can  
> > just
> > rerun the OpenEJB and the server would start normally. We are using
> > OpenEJB 3.0-beta-1, and I could swear that the
> > org.apache.openejb.core.security.JaccProvider$Factory is on the
> > classpath. We are using java6 x86 on linux:
> > java version "1.6.0_03"
> > Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
> > Java HotSpot(TM) Client VM (build 1.6.0_03-b05, mixed mode, sharing)
> > We are not using any special classloader hierarchy (well, not before
> > OpenEJB is fully started). Perhaps a java bug?
> 
> 
> That's pretty strange.  My only guess is that the Thread context  
> classloader is getting changed to something else (seemingly randomly)  
> and the factory class becomes no longer visible.  I've implemented  
> this particular fix forces it to load earlier and forces a specific  
> classloader when using our default factory:
> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/AbstractSecurityService.java?r1=612547&r2=612546&pathrev=612547
> 
> We could test this theory out on the code you have now if you catch  
> the exception you posted below and in the catch clause do something  
> like this:
> 
>         ClassLoader classLoader =  
> Thread.currentThread().getContextClassLoader();
>         System.out.println("classLoader" + classLoader);
>         System.out.println("classLoader.class" +  
> classLoader.getClass().getName());
>         if (classLoader instanceof URLClassLoader) {
>             URLClassLoader urlClassLoader = (URLClassLoader)  
> classLoader;
>             URL[] urls = urlClassLoader.getURLs();
>             for (URL url : urls) {
>                 System.out.println("url = " + url.toExternalForm());
>             }
>         }
> 
> -David
> 

Hi David,
  thanks for your interest. The bug is fixed so this is probably no
longer relevant. Just out of curiosity I put this code into
catch(Exception) clausule where OpenEJB was initialized, and I got
"classLoader.classorg.apache.maven.surefire.booter.IsolatedClassLoader"
classloader, followed by a bunch of "url = ...". When I tried to put it
into the static {} block the same classloader was reported. This is what
I expected - if you do some classloader magic while loading JACC, you
probably restore old classloader in the finally{} statement. Anyway,
thanks for your help guys!
Martin

> 
> > PolicyConfigurationFactory class not found: JACC:Error
> > PolicyConfigurationFactory : cannot find class :
> > org.apache.openejb.core.security.JaccProvider$Factory
> >       at
> > org 
> > .apache 
> > .openejb 
> > .assembler.classic.Assembler.createApplication(Assembler.java:558)
> >       at
> > org 
> > .apache 
> > .openejb 
> > .assembler.classic.Assembler.buildContainerSystem(Assembler.java:299)
> >       at
> > org.apache.openejb.assembler.classic.Assembler.build(Assembler.java: 
> > 207)
> >       at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:149)
> >       at org.apache.openejb.OpenEJB.init(OpenEJB.java:293)
> >       at org.apache.openejb.OpenEJB.init(OpenEJB.java:272)
> >       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >       at
> > sun 
> > .reflect 
> > .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >       at
> > sun 
> > .reflect 
> > .DelegatingMethodAccessorImpl 
> > .invoke(DelegatingMethodAccessorImpl.java:25)
> >       at java.lang.reflect.Method.invoke(Method.java:597)
> >       at
> > org.apache.openejb.loader.OpenEJBInstance.init(OpenEJBInstance.java: 
> > 36)
> >       at
> > org 
> > .apache 
> > .openejb 
> > .client 
> > .LocalInitialContextFactory.init(LocalInitialContextFactory.java:59)
> >       at
> > org 
> > .apache 
> > .openejb 
> > .client 
> > .LocalInitialContextFactory 
> > .getInitialContext(LocalInitialContextFactory.java:45)
> >       at
> > javax.naming.spi.NamingManager.getInitialContext(NamingManager.java: 
> > 667)
> >       at
> > javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
> >       at javax.naming.InitialContext.init(InitialContext.java:223)
> >       at javax.naming.InitialContext.<init>(InitialContext.java:197)
> >       at
> > com 
> > .whitestein 
> > .fe 
> > .embedded 
> > .launcher 
> > .OpenEjbAndJettyLauncher.initOpenEJB(OpenEjbAndJettyLauncher.java:223)
> >       at
> > com 
> > .whitestein 
> > .fe 
> > .embedded 
> > .launcher 
> > .OpenEjbAndJettyLauncher.launch(OpenEjbAndJettyLauncher.java:146)
> >       at
> > com.whitestein.fe.embedded.launcher.Launcher.launch(Launcher.java:107)
> >       at com.whitestein.fe.it.cal.CalUtils.newComm(CalUtils.java:45)
> >       at
> > com.whitestein.fe.it.cal.AbstractCalTest.setUp(AbstractCalTest.java: 
> > 35)
> >       at junit.framework.TestCase.runBare(TestCase.java:125)
> >       at junit.framework.TestResult$1.protect(TestResult.java:106)
> >       at junit.framework.TestResult.runProtected(TestResult.java:124)
> >       at junit.framework.TestResult.run(TestResult.java:109)
> >       at junit.framework.TestCase.run(TestCase.java:118)
> >       at junit.framework.TestSuite.runTest(TestSuite.java:208)
> >       at junit.framework.TestSuite.run(TestSuite.java:203)
> >       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >       at
> > sun 
> > .reflect 
> > .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >       at
> > sun 
> > .reflect 
> > .DelegatingMethodAccessorImpl 
> > .invoke(DelegatingMethodAccessorImpl.java:25)
> >       at java.lang.reflect.Method.invoke(Method.java:597)
> >       at
> > org 
> > .apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java: 
> > 213)
> >       at
> > org 
> > .apache 
> > .maven 
> > .surefire 
> > .suite 
> > .AbstractDirectoryTestSuite 
> > .executeTestSet(AbstractDirectoryTestSuite.java:138)
> >       at
> > org 
> > .apache 
> > .maven 
> > .surefire 
> > .suite 
> > .AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java: 
> > 125)
> >       at org.apache.maven.surefire.Surefire.run(Surefire.java:132)
> >       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >       at
> > sun 
> > .reflect 
> > .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >       at
> > sun 
> > .reflect 
> > .DelegatingMethodAccessorImpl 
> > .invoke(DelegatingMethodAccessorImpl.java:25)
> >       at java.lang.reflect.Method.invoke(Method.java:597)
> >       at
> > org 
> > .apache 
> > .maven 
> > .surefire 
> > .booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:290)
> >       at
> > org 
> > .apache 
> > .maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:818)
> > Caused by: org.apache.openejb.OpenEJBException:
> > PolicyConfigurationFactory class not found: JACC:Error
> > PolicyConfigurationFactory : cannot find class :
> > org.apache.openejb.core.security.JaccProvider$Factory
> >       at
> > org 
> > .apache 
> > .openejb 
> > .assembler 
> > .classic.JaccPermissionsBuilder.install(JaccPermissionsBuilder.java: 
> > 62)
> >       at
> > org 
> > .apache 
> > .openejb 
> > .assembler.classic.Assembler.createApplication(Assembler.java:436)
> >       ... 42 more
> > Caused by: java.lang.ClassNotFoundException: JACC:Error
> > PolicyConfigurationFactory : cannot find class :
> > org.apache.openejb.core.security.JaccProvider$Factory
> >       at
> > javax 
> > .security 
> > .jacc 
> > .PolicyConfigurationFactory 
> > .getPolicyConfigurationFactory(PolicyConfigurationFactory.java:143)
> >       at
> > org 
> > .apache 
> > .openejb 
> > .assembler 
> > .classic.JaccPermissionsBuilder.install(JaccPermissionsBuilder.java: 
> > 48)
> >       ... 43 more
> > Caused by: java.lang.ClassNotFoundException:
> > org.apache.openejb.core.security.JaccProvider$Factory
> >       at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
> >       at java.security.AccessController.doPrivileged(Native Method)
> >       at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
> >       at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
> >       at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
> >       at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
> >       at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
> >       at java.lang.Class.forName0(Native Method)
> >       at java.lang.Class.forName(Class.java:247)
> >       at
> > javax 
> > .security 
> > .jacc 
> > .PolicyConfigurationFactory 
> > .getPolicyConfigurationFactory(PolicyConfigurationFactory.java:131)
> >       ... 44 more
> >
> 
> 
-- 
Mgr. Martin Vysny | mvy@whitestein.com
Software Engineer
Whitestein Technologies s.r.o | www.whitestein.com
Panenska 28 | 811 03 Bratislava | Slovak Republic
Main +421 2 5443-5502 | Direct +421 2 5930-0717


Mime
View raw message