Atomikos Forum |
|
Hi Atomikos Team,
I have an issue with the transaction handling. Our application is deployed on a cloud based tomcat server farm. If there are multiple instances then the deployment environment does not guarantee the instances are on different hosts. The placement of applications across different hosts can only be on a best effort basis. (This is not in our control actually, we pass the number of instances required as a configuration during the deployment and the deployment platform takes care of the host allocation) Transaction works fine if there is only single instance and I think it works fine if there are multiple instances on different host (which currently happens very rarely as most of the time it’s placed on the same host.) But when deployed on multiple instances, Application is not able to start in one instance due to below mentioned errors 1. ‘Log already in use’ in the Catalina /localhost.log file and then it shuts down. this was my jta config com.atomikos.icatch.output_dir = ./tmlogs com.atomikos.icatch.log_base_dir = ./tmlogs # com.atomikos.icatch.tm_unique_name = tm On further investigation and talks with the deployment team realised that the two instance's work directory is shared and the only non shared directory which is avaliable for us is jvm s temp directory. So I have pointed the epoch and lck file directory to com.atomikos.icatch.output_dir = ${java.io.tmpdir} com.atomikos.icatch.log_base_dir = ${java.io.tmpdir} # com.atomikos.icatch.tm_unique_name = tm 2. Now the error ‘Log already in use’ disappeared and application is started, but getting a WARN message that it fails to connect to MQ for the below reason ‘the supplied XID already exists in this XA resource at com.atomikos.datasource.xa.XAResourceTransaction.resume(Unknown Source)’ Though there are warnings, messages seems to be consumed, but if there are resource failures, seeing inconsistencies in transactions I think the files in ${java.io.tmpdir} will be purged and recreated on restart. In Atomikos website, it says 'never delete epoch file'. This is actually worrying, We can start the application in two instances only if the work directory is not shared between instances and if I use a non-shared directory the epoch and lck files will be purged (as only non shared dir available to us is jvm temp directory) and transaction ids are corrupted. At the moment, our application is in production with one instance and the above issues stop us achieving target for HA. Could you please help on this? Also could you let me know creating transaction unique name / instance start-up can help on this? I remember seeing in Atomikos website, changing the unique name ‘not recommended for production use'. Thanks in advance. Jinz
Hi,
The epoch file should not be deleted or you will get this. With the open source product there is no easy solution besides a shared folder. What version of Atomikos are you using, and do you have a budget for a subscription? If so, we could give you a solution that avoid the .epoch file writing altogether. Let me know, Best |