1

I'm deploying an ear (myear.ear) application to WildFly 9.0.2. The ear contains an ear module, let's call it myjar.jar.

Also, I have an external custom JBoss module. From within that module I need (never mind the reason) to call a class packaged within myjar.jar.

Is it even possible???

This is how the JBoss module module.xml looks like:

<module xmlns="urn:jboss:module:1.1" name="path.to.module.dir">
    <resources>
        <resource-root path="..."/>
    </resources>
    <dependencies>
        <module name="deployment.myear.ear.myjar.jar"  />
    </dependencies>
</module>

In case I can address the jar packaged in the ear from that custom module, how should I specify the module name. The above gives the following error:

Caused by: org.jboss.modules.ModuleLoadError: deployment.myear.ear.myjar.jar:main
    at org.jboss.modules.ModuleLoadException.toError(ModuleLoadException.java:74)
    at org.jboss.modules.Module.getPathsUnchecked(Module.java:1384)
    at org.jboss.modules.Module.loadModuleClass(Module.java:555)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:353)
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:432)
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:269)
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77)
    at org.jboss.modules.Module.loadModuleClass(Module.java:560)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
Ori Dar
  • 18,687
  • 5
  • 58
  • 72

2 Answers2

0

The way to include an external jar within a module and load it's classes via the module class loader is referencing it as an external resource (assuming it exists in the specified location is:

<sub-deployment name="myjar.jar">
    <dependencies>
        ...
    </dependencies>
    <resources>
        <resource-root path="../../../modules/path/to/resource/jar" />
    </resources>
</sub-deployment>

The pass is relative (here somewhere under the modules directory).

Whereas, dependency between deployments (and sub-deployments) is possible.

Ori Dar
  • 18,687
  • 5
  • 58
  • 72
-1

Not possible. Ears can only depend on modules, not vice versa

Will Tatam
  • 566
  • 3
  • 10