We have been using JBoss 6 for some time, and we are now moving to JBoss 7. (To 
be more precise, we are using Red Hat Enterprise Application Server 6, which we 
understand corresponds to JBoss 7.) 

Several of our tapestry applications are working well on JBoss 7. In fact, they 
all work well if we put all dependencies into WEB-INF/lib. However, we'd like 
to define modules and avoid duplicating so much in the WEB-INF/lib location of 
multiple WARs. When we try this, we occasionally see a stack trace like the one 
pasted below. 

Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: 
stanford.pg.directory.model.Entity from [Module "stanford.tapestry5:main" from 
local module loader @2c9b42e6 (finder: local module finder @54520eb (roots: 
D:\pgnet\eap\modules,D:\pgnet\eap\modules\system\layers\base))] 
at 
org.apache.tapestry5.internal.plastic.asm.ClassWriter.getCommonSuperClass(ClassWriter.java:1296)
 [plastic-5.3.2.jar:] 
at 
org.apache.tapestry5.internal.plastic.asm.ClassWriter.getMergedType(ClassWriter.java:1268)
 [plastic-5.3.2.jar:] 
at org.apache.tapestry5.internal.plastic.asm.Frame.merge(Frame.java:1400) 
[plastic-5.3.2.jar:] 
at org.apache.tapestry5.internal.plastic.asm.Frame.merge(Frame.java:1302) 
[plastic-5.3.2.jar:] 
at 
org.apache.tapestry5.internal.plastic.asm.MethodWriter.visitMaxs(MethodWriter.java:1282)
 [plastic-5.3.2.jar:] 
at 
org.apache.tapestry5.internal.plastic.asm.tree.MethodNode.accept(MethodNode.java:487)
 [plastic-5.3.2.jar:] 
at 
org.apache.tapestry5.internal.plastic.asm.tree.MethodNode.accept(MethodNode.java:412)
 [plastic-5.3.2.jar:] 
at 
org.apache.tapestry5.internal.plastic.asm.tree.ClassNode.accept(ClassNode.java:275)
 [plastic-5.3.2.jar:] 
at 
org.apache.tapestry5.internal.plastic.PlasticClassPool.toBytecode(PlasticClassPool.java:187)
 [plastic-5.3.2.jar:] 
at 
org.apache.tapestry5.internal.plastic.PlasticClassPool.realize(PlasticClassPool.java:140)
 [plastic-5.3.2.jar:] 
at 
org.apache.tapestry5.internal.plastic.PlasticClassPool.realizeTransformedClass(PlasticClassPool.java:122)
 [plastic-5.3.2.jar:] 
at 
org.apache.tapestry5.internal.plastic.PlasticClassImpl.createInstantiator(PlasticClassImpl.java:356)
 [plastic-5.3.2.jar:] 
at 
org.apache.tapestry5.internal.plastic.PlasticClassPool.loadAndTransformClass(PlasticClassPool.java:350)
 [plastic-5.3.2.jar:] 
at 
org.apache.tapestry5.internal.plastic.PlasticClassLoader.loadClass(PlasticClassLoader.java:38)
 [plastic-5.3.2.jar:] 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) [rt.jar:1.6.0_31] 
at 
org.apache.tapestry5.internal.plastic.PlasticClassPool.getClassInstantiator(PlasticClassPool.java:510)
 [plastic-5.3.2.jar:] 
at 
org.apache.tapestry5.plastic.PlasticManager.getClassInstantiator(PlasticManager.java:189)
 [plastic-5.3.2.jar:] 
at 
org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl$2.invoke(ComponentInstantiatorSourceImpl.java:234)
 [tapestry-core-5.3.2.jar:] 
at 
org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl$2.invoke(ComponentInstantiatorSourceImpl.java:228)
 [tapestry-core-5.3.2.jar:] 
at 
org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
 [tapestry-ioc-5.3.2.jar:] 
... 66 more 
--------- 

Pasted below is a sample page class which has this problem 
--------- 


public class Manage extends TesterBase { 


@Property 
private String greeting; 

protected boolean setupRender() { 
try { 
Entity userInfo = getUserInfo(); 


if (userInfo==null) { 
greeting="no greeting"; 
} else { 
greeting="Greetings " + userInfo.getIdNumber(); 
} 
setRenderFlag(true); 

} catch (Exception e) { 
System.err.println("Demo threw exception"); 
e.printStackTrace(); 

} 
return true; 
} 

} 

---------- 
If we modify this class slightly, we do NOT see the problem any longer. Here is 
the modified version. 
---------- 

public class Manage extends TesterBase { 

private Entity userInfo; 

@Property 
private String greeting; 

protected boolean setupRender() { 
try { 
userInfo = getUserInfo(); 

if (userInfo==null) { 
greeting="no greeting"; 
} else { 
greeting="Greetings " + userInfo.getIdNumber(); 
} 
setRenderFlag(true); 

} catch (Exception e) { 
System.err.println("Demo threw exception"); 
e.printStackTrace(); 

} 
return true; 
} 

} 


Reference material about modular class loading system used in EAP 
https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.3/html/Development_Guide/sect-About_Modules_and_the_New_Modular_Class_Loading_System_used_in_JBoss_EAP_6.html
 


Thank you for any help, insights or hints. 
Kristen Murray 
[email protected] 

Reply via email to