How to make XADisk available as a JCA resource in openejb ?

131 views
Skip to first unread message

mikala

unread,
May 20, 2011, 7:01:39 AM5/20/11
to XADisk
How to make XADisk available as a JCA resource in openejb ?

Nitin Verma

unread,
May 20, 2011, 12:58:12 PM5/20/11
to XADisk
As OpenEJB supports JCA standard, and XADisk complies to JCA, the
deployment of XADisk to OpenEJB must be same as any other JCA resource
adapter.

Please see if this link helps : http://openejb.979440.n4.nabble.com/JCA-support-td1288453.html

benoit...@gmail.com

unread,
Nov 14, 2014, 10:19:57 AM11/14/14
to xad...@googlegroups.com, kala...@gmail.com
Hi, I am trying to load XADisk into OpenEJB too...
But there is a lack of documentation on how to load a JCA resource into OpenEJB :-(
Have you succeded ? can you share configuration descriptors ?

Nitin Verma

unread,
Nov 14, 2014, 1:52:15 PM11/14/14
to xad...@googlegroups.com, kala...@gmail.com, benoit...@gmail.com
Hello Benoit,

I do not have an experience with openejb. Can you share any specific exceptions/problems which you are seeing?

Thanks,
Nitin

benoit...@gmail.com

unread,
Nov 18, 2014, 3:42:25 AM11/18/14
to xad...@googlegroups.com, kala...@gmail.com, benoit...@gmail.com
Hello,
here is the result of my first test :

deploy a service-jar in "META-INF/com.mycompany" openejb folder :

<?xml version="1.0" encoding="UTF-8"?>
<ServiceJar>
  <ServiceProvider
      id="XADiskProvider"
      service="Resource"
      types="javax.transaction.xa.XAResource"
      class-name="org.xadisk.connector.outbound.XADiskManagedConnectionFactory">
  </ServiceProvider>
</ServiceJar>

I am using XADiskManagedConnectionFactory because other factory cannot be loaded (constructor must have zero arguments for server to load it)

in openejb.xml, adding this :

<Connector id="FilerLive" provider="com.mycompany#XADiskProvider">
xaDiskHome D:/Temp/FilerXADiskSystem
instanceId 1
enableClusterMode false
clusterMasterPort 999
</Connector>

I added clusterMasterPort because I have the following error when openejb starts :


2014-11-17 17:12:11,381Z|DEBUG|main|Op.options|Using default 'openejb.tempclassloader.skip=none'  Possible values are: none, annotations, enums or NONE or ALL
org.apache.xbean.recipe.ConstructionException: Unable to convert property value from java.lang.String to java.lang.Integer for injection public void org.xadisk.filesystem.FileSystemConfiguration.setClusterMasterPort(java.lang.Integer)
at org.apache.xbean.recipe.ObjectRecipe.setProperty(ObjectRecipe.java:503)
at org.apache.xbean.recipe.ObjectRecipe.setProperties(ObjectRecipe.java:371)
at org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:286)
at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)

Do you think it is a bug of XADisk that don't know how to load this propertie ?


An other approach would be to declare something like this :

<Resource id="XADiskResourceAdapter-1" type="org.xadisk.connector.XADiskResourceAdapter">
    xaDiskHome D:/Temp/FilerXADiskSystem
    instanceId 1                                                    
    ...
</Resource>

Is the class org.xadisk.connector.XADiskResourceAdapter th good one ?

Nitin Verma

unread,
Nov 28, 2014, 12:31:36 PM11/28/14
to xad...@googlegroups.com, benoit...@gmail.com
Hello Benoit,

I am sorry I still cannot give you a clue on what may be happening; openejb is an unknown area to me.

Thanks,
Nitin

benoit...@gmail.com

unread,
Feb 10, 2015, 7:25:54 AM2/10/15
to xad...@googlegroups.com, kala...@gmail.com
Here is the solution (works fine for me) to deploy XAdisk as openejb JCA resource adaptor :

1) insert a service-jar.xml file into directory META-INF/com.my.company (I don't know why but it requires the service-jar.xml file to be inside the XAdisk jar (and not rar as our openejb version seems to do not support it), with this content :

<?xml version="1.0" encoding="UTF-8"?>
<ServiceJar>
  <ServiceProvider
      id="XADiskAdapter"
      service="Resource"
      class-name="org.xadisk.connector.XADiskResourceAdapter">
  </ServiceProvider>
  <ServiceProvider
      id="XADiskFactory"
      service="Resource"
      class-name="org.xadisk.connector.outbound.XADiskManagedConnectionFactory">
  </ServiceProvider>
</ServiceJar>

2) in server config (openejb.xml), insert theses 2 sections :

<Connector id="Filer Resource Adapter" provider="com.my.company#XADiskAdapter">
        xaDiskHome path/to/xadisk/system/home
        instanceId 1
</Connector>
<Connector id="Filer" provider="com.my.company#XADiskFactory">
        instanceId 1
</Connector>

3) In your EJB, call the XA resource (called "Filer" in this example) :

    @Resource(name = "Filer")
    protected XADiskConnectionFactory xadiskConnectionFactory;

    ...

    XADiskConnection xadc = xadiskConnectionFactory.getConnection();

    etc..




Le vendredi 20 mai 2011 13:01:39 UTC+2, mikala a écrit :
Reply all
Reply to author
Forward
0 new messages