[jboss-jira] [JBoss JIRA] Commented: (EJBTHREE-572) PersistenceUnitInfo.getNewTempClassLoader()

Michael O'Brien (JIRA) jira-events at lists.jboss.org
Fri May 2 23:24:18 EDT 2008


    [ http://jira.jboss.com/jira/browse/EJBTHREE-572?page=comments#action_12411684 ] 
            
Michael O'Brien commented on EJBTHREE-572:
------------------------------------------

Hi, 
	The following workaround has been checked in for EclipseLink M8 to work with JBoss 4.2.2 GA.
	Container managed entities should predeploy/deploy and register now with/without static weaving.
	When the UCL3 classLoader no longer causes a NPE we will reenable dynamic weaving on EAR predeploy().

	http://bugs.eclipse.org/229634

	Workaround:
---------------------------------
	EclipseLink will use the non-temporary classLoader instead of the one from getNewTempClassLoader() obtained from the JBoss PersistenceUnitInfo that throws a NPE on loadClass() or Class.forName().
	We require that JBoss implementers statically weave container managed entities and reference JBoss as the target-server in persistence.xml.

	Deployment Changes:
		1) If weaving is required then static weave the entities before EAR packaging using either the command-line weaver or the weaving ant task.		
		2) All persistence units deployed to the JBoss container must contain the following property in persistence.xml or container managed entities will predeploy but fail to be managed at runtime. 

	<property 
		name="eclipselink.target-server"
		value="org.eclipse.persistence.platform.server.jboss.JBossPlatform"/>

	JBoss AS 4.2.2 GA debugging:
----------------------------------------------------------	
	I debugged the UCL3 NullPointerException into the JBoss AS 4.2.2 GA source into the following segment of code.

	In the following function the classloader parent tree is searched all the way to the root.
no clazz is returned and in the finally clause the last log.trace causes a RuntimeException on a NPE.
Curious though that the line number in Logger.trace() does not correspond to the JDK 1.5 src.

package org.jboss.mx.loading
public abstract class RepositoryClassLoader extends URLClassLoader
   public Class loadClass(String name, boolean resolve)
      throws ClassNotFoundException
   {
      boolean trace = log.isTraceEnabled();
      if (trace)
         log.trace("loadClass " + this + " name=" + name+", loadClassDepth="+loadClassDepth);
      Class clazz = null;
      try
      {
         if (repository != null)
         {
            clazz = repository.getCachedClass(name);
            if (clazz != null)
            {
               if( log.isTraceEnabled() )
               {
                  StringBuffer buffer = new StringBuffer("Loaded class from cache, ");
                  ClassToStringAction.toString(clazz, buffer);
                  log.trace(buffer.toString());
               }
               return clazz;
            }
         }
         clazz = loadClassImpl(name, resolve, Integer.MAX_VALUE);
         return clazz;
      }
      finally
      {
         if (trace)
         {
            if (clazz != null)
               log.trace("loadClass " + this + " name=" + name + " class=" + clazz + " cl=" + clazz.getClassLoader());
            else
--->NPE        log.trace("loadClass " + this + " name=" + name + " not found");
         }
      }
   }

Thread [main] (Suspended)	
	UnifiedClassLoader3(RepositoryClassLoader).loadClass(String, boolean) line: 425	
	UnifiedClassLoader3(ClassLoader).loadClass(String) line: 251	
	UnifiedClassLoader3(ClassLoader).loadClassInternal(String) line: 319	
	Class<T>.forName0(String, boolean, ClassLoader) line: not available [native method]	
	Class<T>.forName(String, boolean, ClassLoader) line: 242	
	PrivilegedAccessHelper.getClassForName(String, boolean, ClassLoader) line: 85	
	XMLEntityMappings.getClassForName(String, ClassLoader) line: 120	
	XMLEntityMappings.getClassForName(String) line: 157	
	XMLEntityMappings.initPersistenceUnitClasses() line: 389	
	MetadataProcessor.initPersistenceUnitClasses() line: 188	
	MetadataProcessor.processEntityMappings() line: 298	

Results:
--------
15:41:43,772 INFO  [STDOUT] [EPS Warning]: 2008.05.02 15:41:43.755--Thread(Thread[main,5,jboss])--The temporary classLoader for PersistenceLoadProcessor [helloworld] is not available.  Switching classLoader to [org.jboss.mx.loading.UnifiedClassLoader3 at 18b995c{ url=file:/C:/opt/jboss422/server/default/tmp/deploy/tmp13465jsfejb3.ear ,addedOrder=45}].  Weaving has been disabled for this session. EclipseLink may be unable to get a spec mandated temporary class loader from the server, you may be able to use static weaving as an optional workaround. 
15:41:44,221 INFO  [JmxKernelAbstraction] installing MBean: jboss.j2ee:ear=jsfejb3.ear,jar=app.jar,name=TodoDao,service=EJB3 with dependencies:
15:41:44,221 INFO  [JmxKernelAbstraction] 	persistence.units:ear=jsfejb3.ear,jar=app.jar,unitName=helloworld
15:41:44,359 INFO  [EJBContainer] STARTED EJB: TodoDao ejbName: TodoDao
15:42:45,344 INFO  [STDOUT] [EPS Finer]: 2008.05.02 15:42:45.343--UnitOfWork(20862427)--Thread(Thread[http-127.0.0.1-8080-1,5,jboss])--TX binding to tx mgr, status=STATUS_ACTIVE
15:42:45,344 INFO  [STDOUT] [EPS Finest]: 2008.05.02 15:42:45.344--UnitOfWork(20862427)--Thread(Thread[http-127.0.0.1-8080-1,5,jboss])--Execute query DoesExistQuery()
15:42:45,350 INFO  [STDOUT] [EPS Finest]: 2008.05.02 15:42:45.350--UnitOfWork(20862427)--Thread(Thread[http-127.0.0.1-8080-1,5,jboss])--PERSIST operation called on: Todo at 15914f3.

	thank you
	/michael

> PersistenceUnitInfo.getNewTempClassLoader()
> -------------------------------------------
>
>                 Key: EJBTHREE-572
>                 URL: http://jira.jboss.com/jira/browse/EJBTHREE-572
>             Project: EJB 3.0
>          Issue Type: Bug
>            Reporter: Emmanuel Bernard
>         Assigned To: Ales Justin
>
> The sooner the better.
> Hibernate can't enhance the classes to make property (not association) lazy loading.
> Toplink just can't start.
> http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3939615#3939615

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list