There are two issues with modularity/classloading in Infinispan:
1) Using the TCCL as the classloader to load Infinispan classes is a bad idea. Instead we should use org.infinispan.foo.Bar.getClass().getClassLoader().
This has been addressed as a separate issue.
2) When we need to load application classes we need a different approach to that used today. Most of the time the TCCL is perfect for this. However sometimes Infinispan may be invoked outside of the application, when the TCCL may not be set in AS7. Jason and I discussed three options:
a) require (through a platform integration documentation contract) that the TCCL must always be set when Infinispan is invoked.
b) Have some sort of InvocationContext which knows what the correct classloader to use is (aka Hibernate/Seam/Weld design where there is a per-application construct based on a ThreadLocal). Given this hasn't been designed into the core, it seems like a large retrofit
c) Make users specify the CL (directly or indirectly) via the API (as we discussed).