Почему Арджуне не удалось начать с ARJUNA012391? (Кроссопубликовано пользователю narayana-user в группах google)

Обзор 50000 футов

Я рефакторинг большого устаревшего приложения для java 17, обращаясь к техническим долгам нескольких поколений. Часть рефакторинга включает в себя замену несуществующего менеджера транзакций Bitronix на комбинацию Нараяна + Арджуна.

При запуске приложения Арджуна не запускается с исключениемARJUNA012391: Could not initialize object store 'null' of type 'com.arjuna.ats.internal.arjuna.objectstore.ShadowNoFileLockStore'.

Работаю пока:

я проследил вObjectStoreAPI initStore(String name)чтобы увидеть, что есть InvocationTargetException

Я подтвердил, что:

  • переменные среды Arjuna установлены на -Duser.dir=C:/arjuna/user -Duser.home=C:/arjuna/user
  • пустые каталоги хранилища объектов были созданы арджуной, и
  • разрешения каталога позволяют приложению полный контроль
  • рефлексивные вызовы classLoader к конструктору не запрещены видимостью
  • незарегистрированное корневое исключение — com.arjuna.ats.arjuna.exceptions.ObjectStoreException: ARJUNA012225: FileSystemStore::setupStore — невозможно получить доступ к корню хранилища объектов: PutObjectStoreDirHere\ShadowNoFileLockStore\defaultStore\
  • Каталог C:\arjuna\user\PutObjectStoreDirHere\ShadowNoFileLockStore\defaultStore существует, и jvm полностью контролирует его.

Выдержка из журнала:

      Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schedulerFactoryBean' defined in com.maxis.mxarchive.SchedulerConfig: ARJUNA012391: Could not initialize object store 'null' of type 'com.arjuna.ats.internal.arjuna.objectstore.ShadowNoFileLockStore'
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1751)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1405)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1325)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:709)
    ... 56 common frames omitted
Caused by: com.arjuna.ats.arjuna.exceptions.FatalError: ARJUNA012391: Could not initialize object store 'null' of type 'com.arjuna.ats.internal.arjuna.objectstore.ShadowNoFileLockStore'
    at com.arjuna.ats.arjuna.objectstore.StoreManager.initStore(StoreManager.java:160)
    at com.arjuna.ats.arjuna.objectstore.StoreManager.getActionStore(StoreManager.java:111)
    at com.arjuna.ats.arjuna.objectstore.StoreManager.getRecoveryStore(StoreManager.java:68)
    at com.arjuna.ats.arjuna.recovery.ActionStatusService.<init>(ActionStatusService.java:65)
    at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
    at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:306)
    at java.base/java.lang.Class.newInstance(Class.java:684)
    at com.arjuna.common.internal.util.ClassloadingUtility.loadAndInstantiateClass(ClassloadingUtility.java:135)
    at com.arjuna.ats.arjuna.recovery.TransactionStatusManager.start(TransactionStatusManager.java:125)
    at com.arjuna.ats.arjuna.recovery.TransactionStatusManager.<init>(TransactionStatusManager.java:58)
    at com.arjuna.ats.arjuna.coordinator.TxControl.createTransactionStatusManager(TxControl.java:196)
    at com.arjuna.ats.arjuna.coordinator.TxControl.<clinit>(TxControl.java:273)
    at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.begin(BaseTransaction.java:96)
    at org.springframework.transaction.jta.JtaTransactionManager.doJtaBegin(JtaTransactionManager.java:877)
    at org.springframework.transaction.jta.JtaTransactionManager.doBegin(JtaTransactionManager.java:840)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.startTransaction(AbstractPlatformTransactionManager.java:400)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373)
    at org.springframework.scheduling.quartz.SchedulerAccessor.registerJobsAndTriggers(SchedulerAccessor.java:209)
    at org.springframework.scheduling.quartz.SchedulerFactoryBean.afterPropertiesSet(SchedulerFactoryBean.java:507)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1797)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1747)
    ... 66 common frames omitted

1 ответ

На самом деле objectStoreDir вычисляется как относительный путь, игнорируя свойство user.dir, по крайней мере, в случае файловой системы Windows.

Вместо того, чтобы зависеть от внутренней (скрытой) конкатенации каталогов, явно установите для свойства абсолютный путь, чтобы обойти системное свойство «user.dir», что-то вроде «-DObjectStoreEnvironmentBean.objectStoreDir=C:/tmp/xyz»

Другие вопросы по тегам