Repository navigation
Module linkage error #82
Copy link
Copy link
Open
Labels
Milestone
Description
In ceylon.transaction:
module ceylon.transaction "1.1.1" {
// if I comment this out, I get an error
//shared import javax.transaction.api "1.2";
shared import org.jboss.narayana.jta "5.1.1.Final";
}And its test:
module test.ceylon.transaction "1.1.1" {
import ceylon.transaction "1.1.1";
}The definition of org.jboss.narayana.jta:
<module xmlns="urn:jboss:module:1.1" name="org.jboss.jboss-transaction-spi" slot="7.1.1.Final">
<resources>
<resource-root path="jboss-transaction-spi-7.1.1.Final.jar"/>
</resources>
<dependencies>
<module name="javax.transaction.api" export="false" slot="1.2"/>
<module name="org.jboss.logging" export="true" slot="3.1.4.GA"/>
</dependencies>
</module>And javax.transaction.api:
<module xmlns="urn:jboss:module:1.1" name="javax.transaction.api" slot="1.2">
<resources>
<resource-root path="javax.transaction.api-1.2.jar"/>
</resources>
</module>The error I get are:
Debug: Finding class javax.transaction.xa.XAResource from Module "test.ceylon.transaction:1.1.1" from Ceylon ModuleLoader: RootRepositoryManager: FileContentStore: /home/stephane/.ceylon/cache
Debug: Finding local class javax.transaction.xa.XAResource from Module "javax.transaction.api:1.2" from Ceylon ModuleLoader: RootRepositoryManager: FileContentStore: /home/stephane/.ceylon/cache
Debug: Loading class javax.transaction.xa.XAResource locally from Module "javax.transaction.api:1.2" from Ceylon ModuleLoader: RootRepositoryManager: FileContentStore: /home/stephane/.ceylon/cache
Debug: Finding class javax.transaction.xa.XAResource from Module "org.jboss.narayana.jta:5.1.1.Final" from Ceylon ModuleLoader: RootRepositoryManager: FileContentStore: /home/stephane/.ceylon/cache
Warning: Failed to define class com.arjuna.ats.jta.resources.LastResourceCommitOptimisation in Module "org.jboss.narayana.jta:5.1.1.Final" from Ceylon ModuleLoader: RootRepositoryManager: FileContentStore: /home/stephane/.ceylon/cache java.lang.LinkageError: loader constraint violation: loader (instance of ceylon/modules/jboss/runtime/CeylonModuleClassLoader) previously initiated loading for a different type with name "javax/transaction/xa/XAResource"
Debug: Unexpected error in module loader java.lang.LinkageError: loader constraint violation: loader (instance of ceylon/modules/jboss/runtime/CeylonModuleClassLoader) previously initiated loading for a different type with name "javax/transaction/xa/XAResource"
Reactions are currently unavailable
Activity
FroMage commentedon Oct 13, 2015
I guess I'll need some help from @dmlloyd
FroMage commentedon Oct 13, 2015
Even an upgrade to the latest
1.4.4.Finaldoes not fix this.alesj commentedon Oct 13, 2015
@FroMage imo, you get that same class XAResource from a module and also from JDK. /Cc @dmlloyd
FroMage commentedon Oct 13, 2015
From what I can see in the debugger, the first time it's loaded by the ModuleClassLoader for
javax.transaction.api:1.2, which sounds right. The second time it's loaded as a by-product of defining a class (com.arjuna.ats.jta.resources.LastResourceCommitOptimisation) fromorg.jboss.jboss-transaction-spiwhere it fails, but no clue why, my debugger just jumps around randomly.FroMage commentedon Oct 13, 2015
@alesj that class is not in the JDK, although its package is.
FroMage commentedon Oct 13, 2015
AHA, we're getting somewhere. I told the
CeylonModuleLoader(@alesj's creation) that the JDK did not have ajavax.transactionmodule with ajavax.transaction.xapackage (nobody depended on it explicitly), and it fails to link h2 (another module), which does not have a module descriptor and depended on it implicitly (like everyone depends on the JDK). So I assume that for some reason it used to get that dependency (on the jar) via the JDK auto-import (which is surely wrong).FroMage commentedon Oct 13, 2015
ARG DAMNIT you're right the JDK does have some stuff in
javax.transaction.xa. And yes that includesXAResource:But my jars need more than this. So how do I resolve this shit?
FroMage commentedon Oct 13, 2015
The
javax.transaction.apimodule contains:FroMage commentedon Oct 13, 2015
So it's a superset of the JDK's
javax.transactionI suppose.alesj commentedon Oct 13, 2015
Yup, that javax.transactions is some funky shit ...
FroMage commentedon Oct 13, 2015
So what am I supposed to do? Exclude some classes from
javax.transaction.apiso that the JDK parts get picked up? Are they even the same classes?FroMage commentedon Oct 13, 2015
Apparently excluding it is not enough since it excludes it from export, but it's still in the module itself.
FroMage commentedon Oct 13, 2015
Nope, I can't win this way. Even if I did manage that, I'd have to make the ceylon module depend on the
javax.transactionmodule from the JDK, but it can't because the compiler does not support split packages. OK at this point it's just too damn complicated to fix, I'll move this to 1.3.