tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Blevins <david.blev...@visi.com>
Subject Re: ClassNotFoundException: JaccProvider$Factory
Date Thu, 17 Jan 2008 01:15:48 GMT

On Jan 16, 2008, at 12:30 PM, 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());
>           }
>       }

Dain points out to me that the above code doesn't search the parent,  
so here is some better code.  Add this to the top of the TestCase:

     static {
         ClassLoader classLoader =  
Thread.currentThread().getContextClassLoader();
         try {
             Enumeration<URL> resources =  
classLoader.getResources("javax/security/jacc/ 
PolicyConfigurationFactory.class");
             while (resources != null && resources.hasMoreElements()) {
                 URL factoryClassUrl = resources.nextElement();
                 System.out.println("factoryClassUrl = " +  
factoryClassUrl.toExternalForm());
             }
         } catch (IOException e) {}

         while (classLoader != null){
             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());
                 }
             }
             classLoader = classLoader.getParent();
         }
     }

That should give us some good info on what might be going on.

-David



> -David
>
>
>> 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
>>
>
>


Mime
View raw message