Почему TomEE не может создать ресурс фабрики соединений JMS? - PullRequest
1 голос
/ 10 мая 2019

Я столкнулся с проблемой при попытке создать ресурс javax.jms.ConnectionFactory на сервере TomEE.Я использую tomee.xml файл для записи ресурсов.

Я могу создать javax.jms.Queue и тему, но не это.Ошибка при запуске TomEE, когда я пытаюсь создать ресурс JMS ConnectionFactory.

Давая ниже моего tomee.xml файла.Я сослался на документацию Apache TomEE для этого.Как за документацию , я должен иметь возможность создать этот ресурс.

<?xml version="1.0" encoding="UTF-8"?>
<tomee>
  <!-- see http://tomee.apache.org/containers-and-resources.html -->

  <!-- activate next line to be able to deploy applications in apps -->
  <!-- <Deployments dir="apps" /> -->
  <Resource id="Foo" type="javax.jms.ConnectionFactory">
    ResourceAdapter = Default JMS Resource Adapter
    TransactionSupport = xa
    PoolMaxSize = 10
    PoolMinSize = 0
    ConnectionMaxWaitTime = 5 seconds
    ConnectionMaxIdleTime = 15 Minutes
 </Resource>

</tomee>
e, provider-id=Tomcat Security Service)
10-May-2019 11:15:36.532 INFO [main] org.apache.openejb.config.ConfigurationFactory.configureService Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
10-May-2019 11:15:36.536 INFO [main] org.apache.openejb.config.ConfigurationFactory.configureService Configuring Service(id=Foo, type=Resource, provider-id=Default JMS Connection Factory)
10-May-2019 11:15:36.544 INFO [main] org.apache.openejb.util.OptionsLog.info Using 'openejb.deployments.classpath=false'
10-May-2019 11:15:36.600 INFO [main] org.apache.openejb.assembler.classic.Assembler.createRecipe Creating TransactionManager(id=Default Transaction Manager)
10-May-2019 11:15:36.864 INFO [main] org.apache.openejb.assembler.classic.Assembler.createRecipe Creating SecurityService(id=Tomcat Security Service)
10-May-2019 11:15:37.484 INFO [main] org.apache.openejb.assembler.classic.Assembler.createRecipe Creating Resource(id=Foo)
10-May-2019 11:15:37.520 SEVERE [main] org.apache.openejb.OpenEJB$Instance.<init> OpenEJB has encountered a fatal error and cannot be started: Assembler failed to build the container system.
 org.apache.openejb.OpenEJBException: No existing resource adapter defined with id 'Default JMS Resource Adapter'.
        at org.apache.openejb.assembler.classic.Assembler.replaceResourceAdapterProperty(Assembler.java:2942)
        at org.apache.openejb.assembler.classic.Assembler.doCreateResource(Assembler.java:3108)
        at org.apache.openejb.assembler.classic.Assembler.createResource(Assembler.java:2966)
        at org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:586)
        at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:487)
        at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:150)
        at org.apache.openejb.OpenEJB.init(OpenEJB.java:307)
        at org.apache.tomee.catalina.TomcatLoader.initialize(TomcatLoader.java:247)
        at org.apache.tomee.catalina.ServerListener.lifecycleEvent(ServerListener.java:168)
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
        at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:395)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:108)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:632)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:655)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:567)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:309)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)

10-May-2019 11:15:37.524 SEVERE [main] org.apache.tomee.catalina.ServerListener.lifecycleEvent TomEE Listener can't start OpenEJB
 org.apache.openejb.OpenEJBException: No existing resource adapter defined with id 'Default JMS Resource Adapter'.
        at org.apache.openejb.assembler.classic.Assembler.replaceResourceAdapterProperty(Assembler.java:2942)
        at org.apache.openejb.assembler.classic.Assembler.doCreateResource(Assembler.java:3108)
        at org.apache.openejb.assembler.classic.Assembler.createResource(Assembler.java:2966)
        at org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:586)
        at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:487)
        at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:150)
        at org.apache.openejb.OpenEJB.init(OpenEJB.java:307)
        at org.apache.tomee.catalina.TomcatLoader.initialize(TomcatLoader.java:247)
        at org.apache.tomee.catalina.ServerListener.lifecycleEvent(ServerListener.java:168)
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
        at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:395)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:108)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:632)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:655)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:567)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:309)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)

10-May-2019 11:15:37.576 INFO [main] jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke Initialization processed in 8796 ms
10-May-2019 11:15:37.788 INFO [main] jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke Starting service [Catalina]
10-May-2019 11:15:37.788 INFO [main] jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke Starting Servlet Engine: Apache Tomcat/8.5.32
10-May-2019 11:15:37.816 INFO [localhost-startStop-1] jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke Deploying web application directory [D:\servers_\apache-tomee-7.1.0-plus\apache-tomee-plus-7.1.0\webapps\docs]
10-May-2019 11:15:37.848 INFO [localhost-startStop-1] org.apache.tomee.catalina.TomcatWebAppBuilder.init ------------------------- localhost -> /docs
WARNING: An illegal reflective access operation has occurred

Я действительно ценю любую помощь, связанную с этим.Я застрял!Заранее спасибо.

1 Ответ

2 голосов
/ 18 мая 2019

Используемая вами конфигурация (как указано в вашем вопросе)

ConnectionMaxWaitTime = 5 seconds
ConnectionMaxIdleTime = 15 Minutes

является недействительной не задокументирована явно.

Согласно документации в подразделе Resources / javax.jms.ConnectionFactory эти два параметра должны выглядеть следующим образом:

ConnectionMaxWaitMilliseconds = 5000
ConnectionMaxIdleMinutes = 15

Обратите внимание на различные имена свойств и значения ( без единиц).Попробуйте настроить его в tomee.xml и перезапустите установку.

РЕДАКТИРОВАТЬ

Предварительная версия TomEE 8 предполагает, что ваша установка может быть действительной для более новых версий,Тем не менее, кажется, что это либо «вводит в заблуждение», ошибка в примере, или этот синтаксис работает только для выпусков TomEE> = 8.x (например, 8.0.0-M2).Возможно, вы захотите проверить / проверить предыдущую форму, на которую я ссылаюсь в оригинальной части ответа, и сообщить, работает ли она должным образом.

EDIT-2

Я получил его для следующей конфигурации в tomee.xml в TomEE 7.1.0 и TomEE-8.0.0-M2 :

<Resource id="myCustomizedJmsConnectionFactory" type="javax.jms.ConnectionFactory">
    connectionMaxWaitMilliseconds = 5000
    connectionMaxIdleMinutes = 15
    poolMaxSize = 10
    poolMinSize = 0
    resourceAdapter = Default JMS Resource Adapter
    transactionSupport = xa
</Resource>

<Resource id="Default JMS Resource Adapter" type="ActiveMQResourceAdapter">
    BrokerXmlConfig = broker:(tcp://localhost:61616)?persistent=true
    ServerUrl = tcp://localhost:61616
    DataSource = MyDataSource
</Resource>

В котором вам нужно будет изменить MyDataSource на ваш локальный источник данных (имя).

К сожалению, текущая документация неСовершенно ясно, о том, что вы должны указать

<Resource id="Default JMS Resource Adapter" type="ActiveMQResourceAdapter">... 

для себя.Для справки и для более подробной информации (конфигурации) я хотел бы указать вам этот пост .

Надеюсь, это поможет.

...