2015-02-27 3 views
0

Я пытаюсь подключиться к Websphere MQ из экземпляра JBoss EAP 6.3. Я могу заставить соединение работать, но он требует, чтобы я закодировал имя хоста в bean-компоненте. Что-то я бы предпочел не делать. У меня есть конфиг в файле standalone.xml, но я не думаю, что эти настройки используются.JBoss подключение к MQ из standalone.xml

Это то, что у меня в standalone.xml:

<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1"> 
     <resource-adapters> 
      <resource-adapter id="wmq.jmsra.rar"> 
       <archive> 
        wmq.jmsra.rar 
       </archive> 
       <transaction-support>NoTransaction</transaction-support> 
       <connection-definitions> 
        <connection-definition class-name="com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl" jndi-name="java:/jms/wmqCF" enabled="true" use-java-context="true" pool-name="wmqCF"> 
         <config-property name="port"> 
          1414 
         </config-property> 
         <config-property name="hostName"> 
          my.mqserver.net 
         </config-property> 
         <config-property name="channel"> 
          SYSTEM.DEF.SVRCONN 
         </config-property> 
         <config-property name="transportType"> 
          CLIENT 
         </config-property> 
         <config-property name="queueManager"> 
          MY.QUEUE.MANAGER 
         </config-property> 
        </connection-definition> 
       </connection-definitions> 
      </resource-adapter> 
     </resource-adapters> 
    </subsystem> 

В моем боба у меня есть следующие аннотации:

@MessageDriven(name="WebSphereMQMDB", 
activationConfig = 
{ 
    @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"), 
    @ActivationConfigProperty(propertyName = "destination", propertyValue = "MQ.QUEUE.NAME") 
}) 

public class WebSphereMQMDB implements MessageListener { 
} 

Когда я раскрываю код выше, я получаю сообщение об ошибке с указанием его можно 't подключиться к диспетчеру очереди на localhost (1414). Когда я добавляю свойство Hostname к фасоли он работает, например, так:

@MessageDriven(name="WebSphereMQMDB", 
activationConfig = 
{ 
    @ActivationConfigProperty(propertyName = "hostName",propertyValue = "my.mqserver.net"), 
    @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"), 
    @ActivationConfigProperty(propertyName = "destination", propertyValue = "MQ.QUEUE.NAME") 
}) 

public class WebSphereMQMDB implements MessageListener { 
} 

Как я могу получить боб использовать конфигурацию с standalone.xml, так что я не должен установить свойство Hostname в каждый боб?

ответ

1

Ваше определение в standalone.xml действительно для исходящих подключений к websphere MQ (отправьте сообщение в очередь). В качестве приложения мы мигрирует из HornetQ в WebSphere добавить EJB-jar.xml в папку META-INF с чем-то вроде этого:

<?xml version='1.0' encoding='UTF-8' ?> 
<ejb-jar id="ejb-jar_1" xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" 
    version="2.1"> 

    <enterprise-beans> 
     <message-driven> 
      <ejb-name>WebSphereMQMDB</ejb-name> 
      <ejb-class>com.your.package.WebSphereMQMDB </ejb-class> 
      <transaction-type>Container</transaction-type> 
      <message-destination-type>javax.jms.Queue</message-destination-type> 
      <activation-config> 
       <activation-config-property> 
        <activation-config-property-name>maxSession</activation-config-property-name> 
        <activation-config-property-value>8</activation-config-property-value> 
       </activation-config-property> 
       <activation-config-property> 
        <activation-config-property-name>destination</activation-config-property-name> 
        <activation-config-property-value>${com.your.package.MQ.destination}</activation-config-property-value> 
       </activation-config-property> 
       <activation-config-property> 
        <activation-config-property-name>hostName</activation-config-property-name> 
        <activation-config-property-value>${com.your.package.MQ.hostname}</activation-config-property-value> 
       </activation-config-property> 
       <activation-config-property> 
        <activation-config-property-name>port</activation-config-property-name> 
        <activation-config-property-value>${com.your.package.MQ.port}</activation-config-property-value> 
       </activation-config-property> 
       <activation-config-property> 
        <activation-config-property-name>queueManager</activation-config-property-name> 
        <activation-config-property-value>${com.your.package.MQ.queuemanager}</activation-config-property-value> 
       </activation-config-property> 
       <activation-config-property> 
        <activation-config-property-name>channel</activation-config-property-name> 
        <activation-config-property-value>${com.your.package.MQ.channel}</activation-config-property-value> 
       </activation-config-property> 
       <activation-config-property> 
        <activation-config-property-name>transportType</activation-config-property-name> 
        <activation-config-property-value>${com.your.package.MQ.transporttype}</activation-config-property-value> 
       </activation-config-property> 
      </activation-config> 
     </message-driven> 
    </enterprise-beans> 
</ejb-jar> 

Затем вы должны определить свойства на вашем standalone.xml сразу после расширений , как:

<system-properties> 
    <property name="com.your.package.MQ.destination" value="Q00.APP.AG000001" /> 
    <property name="com.your.package.MQ.hostname" value="mqserver.yourcompany.com" /> 
    <property name="com.your.package.MQ.port" value="1416" /> 
    <property name="com.your.package.MQ.queuemanager" value="Q00" /> 
    <property name="com.your.package.MQ.channel" value="Q00.APP.SVRCONN" /> 
    <property name="com.your.package.MQ.transporttype" value="Client" /> 
</system-properties> 

Надеется, что это помогает

+0

Я знал о свойствах системы, и они кажутся надежным способом централизации свойств соединения. Но действительно ли мне нужно установить параметры входящего соединения для каждого компонента? – Deddiekoel

+0

Я боюсь, что если вы используете WebSphere MQ, вам нужно будет. Насколько я читал для нашей миграции, вы не можете определить место назначения в файле конфигурации xml так же, как и в HornetQ. – alphamikevictor

+0

Я получил его для работы с свойствами системы. Так что это лучший ответ. Однако, чтобы заставить его работать, вам также необходимо выполнить следующие команды cli: /subsystem = ee: write-attribute (name = "spec-descriptor-property-replacement", value = True) 10/subsystem = ee : write-attribute (name = "annotation-property-replacement", value = True) Это позволяет заменить свойство. Вы также можете отредактировать файл standalone.xml под подсистемой ee. – Deddiekoel

0

Следует также отметить, что для JBoss EAP 6.3 вы можете иметь аннотации, определенные как системные свойства. В standalone.xml:

<subsystem xmlns="urn:jboss:domain:ee:1.2"> 
     <spec-descriptor-property-replacement>true</spec-descriptor-property-replacement> 
     <jboss-descriptor-property-replacement>true</jboss-descriptor-property-replacement> 
     <annotation-property-replacement>false</annotation-property-replacement> 
    </subsystem> 

Set аннотаций-свойства-замену 'истина', и вы можете использовать $ {prop.name} в исходном коде MDB.

Смежные вопросы