2016-06-07 10 views
0

Ich habe embeddedJMS in Websphere Liberty 8.5 konfiguriert. Es ist Dispatcher - Executor Setup.Websphere Liberty 8.5 "com_ibm_ws_batch_partitionNum" funktioniert nicht

Ich versuche, „com_ibm_ws_batch_partitionNum“ -Attribut in messageSelector zu konfigurieren, aber wenn ich dies der Job-Attribut konfigurieren ausgeführt wird nicht .. unten ist der Code, den ich in Testamentsvollstrecker konfiguriert haben

<jmsActivationSpec id="batchActivationSpec" maxEndpoints="5"> 
<properties.wasJms destinationRef="batchJobSubmissionQueue" destinationType="javax.jms.Queue" maxBatchSize="5" maxConcurrency="5" messageSelector="com_ibm_ws_batch_applicationName = 'LibertyBatchPOC' AND com_ibm_ws_batch_partitionNum = 1" remoteServerAddress="localhost:7280:BootstrapBasicMessaging"> 
    </properties.wasJms> 
</jmsActivationSpec> 

komplette EXECUTOR1 server.xml wie unten und Executor2 ist auch mit gleichen anderen Port und com_ibm_ws_batch_partitionNum konfiguriert als "2"


<server description="new server"> 

    <!-- Enable features --> 
    <featureManager> 
     <feature>wasJmsClient-2.0</feature> 
     <feature>batchManagement-1.0</feature> 
     <feature>batch-1.0</feature> 
     <feature>javaMail-1.5</feature> 
     <feature>batchManagement-1.0</feature> 
     <feature>jdbc-4.1</feature> 
     <feature>jndi-1.0</feature> 
     <feature>localConnector-1.0</feature> 
     <feature>jaxb-2.2</feature> 
    </featureManager> 

    <!-- To access this server from a remote client add a host attribute to 
     the following element, e.g. host="*" --> 
    <httpEndpoint httpPort="9082" httpsPort="9445" id="defaultHttpEndpoint"/> 

    <!-- Automatically expand WAR files and EAR files --> 
    <applicationManager autoExpand="true"/> 
<!---DB2 database setup--> 
<library id="DB2Lib"> 
     <fileset dir="${shared.resource.dir}" includes="*.jar"/> 
    </library> 
    <dataSource id="testDB" jndiName="jdbc/test" transactional="false"> 
     <jdbcDriver libraryRef="DB2Lib"/> 
     <properties.db2.jcc currentSchema="TestSchema" databaseName="DB2C" password="password" portNumber="5002" serverName="aa.test.com" user="TestDB"/> 
    </dataSource> 
    <!-- Database setup for DERBY --> 
    <!-- Database setup for DERBY Network DB --> 
    <!-- Batch persistence config. References a databaseStore. --> 
    <batchPersistence jobStoreRef="BatchDatabaseStore"/> 

    <!-- The database store for the batch tables. --> 
    <!-- Note this database store is referenced by the batchPersistence element. --> 
    <databaseStore createTables="true" dataSourceRef="batchDB" id="BatchDatabaseStore" schema="JBATCH" tablePrefix=""/> 

    <!-- Derby JDBC driver --> 
    <!-- Note this library is referenced by the dataSource element --> 

    <library id="DerbyLib"> 
     <fileset dir="${shared.resource.dir}/derby/lib" includes="derbyclient.jar"/> 
    </library> 
<!-- Data source for the batch tables. --> 
<!-- Note this data source is referenced by databaseStore element --> 
<dataSource id="batchDB" jndiName="jdbc/batch" type="javax.sql.XADataSource"> 
<jdbcDriver libraryRef="DerbyLib"/> 
<properties.derby.client createDatabase="create" databaseName="${shared.resource.dir}/databases/BATCHDB" password="pass" portNumber="1527" serverName="localhost" user="user"/> 

    </dataSource> 

    <jdbcDriver id="derbyDriver" javax.sql.ConnectionPoolDataSource="org.apache.derby.jdbc.ClientConnectionPoolDataSource" javax.sql.XADataSource="org.apache.derby.jdbc.ClientXADataSource" libraryRef="DerbyLib"/> 

    <!-- Authorization and Security --> 
    <keyStore id="defaultKeyStore" password="Liberty"/> 

    <basicRegistry id="basic" realm="ibm/api"> 
     <user name="bob" password="bobpwd"/> 
     <user name="jane" password="janepwd"/> 
    </basicRegistry> 

    <authorization-roles id="com.ibm.ws.batch"> 
     <security-role name="batchAdmin"> 
      <user name="bob"/> 
     </security-role> 
    </authorization-roles> 

    <batchJmsExecutor activationSpecRef="batchActivationSpec" queueRef="batchJobSubmissionQueue"/> 

    <!-- note that message selector need space around the equal sign --> 
    <jmsActivationSpec id="batchActivationSpec" maxEndpoints="5"> 
     <properties.wasJms destinationRef="batchJobSubmissionQueue" destinationType="javax.jms.Queue" maxBatchSize="5" maxConcurrency="5" messageSelector="com_ibm_ws_batch_applicationName = 'LibertyBatchPOC' AND com_ibm_ws_batch_partitionNum=1" remoteServerAddress="localhost:7280:BootstrapBasicMessaging"> 
     </properties.wasJms> 
    </jmsActivationSpec> 

    <jmsQueue id="batchJobSubmissionQueue" jndiName="jms/batch/jobSubmissionQueue"> 
     <properties.wasJms deliveryMode="Persistent" queueName="batchLibertyQueue" readAhead="AsConnection" timeToLive="0"/> 
    </jmsQueue> 
<logging maxFileSize="200" maxFiles="10" traceFileName="trace.log" traceSpecification="com.ibm.jbatch.*=all:com.ibm.ws.jbatch.*=all"/> 
    <applicationMonitor updateTrigger="mbean"/> 
</server> 

Dispatcher Server.xml


<?xml version="1.0" encoding="UTF-8"?> 
<server description="BatchDispatcher"> 

    <!-- BATCH DISPATCHER --> 

    <!-- Enabled features --> 
    <featureManager> 
     <feature>wasJmsClient-2.0</feature> 
     <feature>batchManagement-1.0</feature> 
    </featureManager> 

    <!-- JMS Configuration --> 
    <batchJmsDispatcher connectionFactoryRef="batchConnectionFactory" 
     queueRef="batchJobSubmissionQueue" /> 
<batchJmsEvents connectionFactoryRef="batchConnectionFactory" /> 
    <jmsConnectionFactory id="batchConnectionFactory" 
     jndiName="jms/batch/connectionFactory"> 
     <properties.wasJms remoteServerAddress="localhost:7280:BootstrapBasicMessaging" /> 
    </jmsConnectionFactory> 

    <jmsQueue id="batchJobSubmissionQueue" jndiName="jms/batch/jobSubmissionQueue"> 
     <properties.wasJms deliveryMode="Persistent" 
      queueName="batchLibertyQueue" readAhead="AsConnection" timeToLive="0"></properties.wasJms> 
    </jmsQueue> 
    <!-- Server HTTP port setup --> 
    <httpEndpoint id="defaultHttpEndpoint" httpPort="9081" 
     httpsPort="9444" /> 

    <!-- Database setup for DERBY --> 
    <!-- Database setup for DERBY Network DB --> 
    <!-- Batch persistence config. References a databaseStore. --> 
    <batchPersistence jobStoreRef="BatchDatabaseStore" /> 

    <!-- The database store for the batch tables. --> 
    <!-- Note this database store is referenced by the batchPersistence element. --> 
    <databaseStore id="BatchDatabaseStore" createTables="true" 
     dataSourceRef="batchDB" schema="JBATCH" tablePrefix="" /> 

    <!-- Derby JDBC driver --> 
    <!-- Note this library is referenced by the dataSource element --> 

    <library id="DerbyLib"> 
     <fileset dir="${shared.resource.dir}/derby/lib" includes="derbyclient.jar" /> 
    </library> 

    <!-- Data source for the batch tables. --> 
    <!-- Note this data source is referenced by databaseStore element --> 
    <dataSource id="batchDB" jndiName="jdbc/batch" type="javax.sql.XADataSource"> 
     <jdbcDriver libraryRef="DerbyLib" /> 
     <properties.derby.client createDatabase="create" 
      databaseName="${shared.resource.dir}/databases/BATCHDB" serverName="localhost" 
      portNumber="1527" user="user" password="pass" /> 

    </dataSource> 

    <jdbcDriver id="derbyDriver" 
     javax.sql.ConnectionPoolDataSource="org.apache.derby.jdbc.ClientConnectionPoolDataSource" 
     javax.sql.XADataSource="org.apache.derby.jdbc.ClientXADataSource" 
     libraryRef="DerbyLib" /> 

    <!-- Authorization and Security --> 
    <keyStore id="defaultKeyStore" password="Liberty"/> 

    <basicRegistry id="basic" realm="ibm/api"> 
     <user name="bob" password="bobpwd" /> 
     <!--<user name="jane" password="janepwd" />--> 
    </basicRegistry> 

    <authorization-roles id="com.ibm.ws.batch"> 
     <security-role name="batchAdmin"> 
      <user name="bob" /> 
     </security-role> 
    </authorization-roles> 

    <!-- Enable Batch tracing for troubleshooting purposes --> 
    <logging maxFileSize="200" maxFiles="10" 
     traceSpecification="com.ibm.jbatch.*=all:com.ibm.ws.jbatch.*=all" 
     traceFileName="trace.log" /> 

</server> 
+0

Irgendwo in Ihrer Domain wi Sie einen Testamentsvollstrecker mit einem Wähler haben müssen konfiguriert Wenn Sie nur einen Executor-Server mit dem obigen Config-Snippet konfigurieren, dann wird der Job niemals ausgeführt, er wird nur in der Dispatch-Warteschlange abgelegt. Wenn Ihre Domain tatsächlich mehr Executor-Server enthält, dann Bitte teilen Sie weitere Einzelheiten zu den verschiedenen Executor-Servern in Ihrer Domain mit: –

+0

Ich habe 2 Executoren konfiguriert und im zweiten Executor com_ibm_ws_batch_partitionNum = 2. – Jay

Antwort

1

Wenn diejenigen, Ihre nur zwei Testamentsvollstrecker sind dann der Job selbst nicht ausgeführt werden, weil es keine Wähler ist nur den Job zu bekommen. Sie haben einen Executor zum Ausführen von Partition 1 und einen Executor zum Ausführen von Partition 2, aber keinen Executor, der nur aktuelle Jobs ausführt. Sie könnten Executor 1 so anpassen, dass der Partitionsanzahlwert 1 oder NULL (nicht für den Job selbst gesetzt) ​​und dann der Job AND Partition 1 auf Executor 1 ausgeführt wird.
Beachten Sie, dass Sie damit vorsichtig sein müssen Sie binden den Server, auf dem aktuelle Jobs ausgeführt werden. Es kann kein Platz mehr sein, um die Partitionen auszuführen, und es wird hängen bleiben.

+0

Können Sie bitte ein Code-Snippet teilen, wie sollte ich Selektor hinzufügen, um den Job zu bekommen .. – Jay

+0

Ungetestet, aber in etwa so: messageSelector = "com_ibm_ws_batch_applicationName = 'LibertyBatchPOC' UND (com_ibm_ws_batch_partitionNum = 1 ODER com_ibm_ws_batch_partitionNum ist NULL)" – DFollis

+0

Im obigen Code-Snippet wird der komplette Job ausgeführt. und nicht nur die Partition. – Jay

0

Sie werden zwei Dinge brauchen.

1) Sie müssen einen Testamentsvollstrecker haben, die zuerst den Auftrag ausgeführt wird und die die Partitionen Warteschlange von anderen Testamentsvollstrecker

Dazu verbraucht werden, werden Sie keine zusätzliche Eigenschaft in einer Nachricht haben müssen Wähler. Alternativ können Sie eine Eigenschaft com_ibm_ws_batch_work_type mit dem Wert Job oder Partition verwenden, um Arbeiten basierend auf dem Typ auszuwählen und auszuführen.

Hinweis: Um Partitionen aus dem Job über mehrere Executoren zu verteilen, müssen Sie das Element im Executor konfigurieren, der den Job der obersten Ebene ausführt.

2) Die zweite Sache wäre ein Testamentsvollstrecker notwendig, um die Partition zu laufen, in dem Sie Ihre Nachricht Wähler in der Frage, wie beschrieben verwenden können (die

+0

Ich kann es immer noch nicht richtig konfigurieren und es läuft nicht wie erwartet.Aber wird im Falle einer Aktualisierung bald aktualisiert. – Jay