Custom Mediator in Sequence запускается только при запуске WSO2

Я делаю собственный посредник, который просто печатает «Hello World», мой пользовательский посредник выглядит так:

public class HelloWorld extends AbstractMediator implements ManagedLifecycle{

public static void helloWorld() {
    System.out.println("Hello World");  
}

public void init(SynapseEnvironment synapseEnvironment) {
    // initializing  surcharges map with some symbols
    helloWorld();
}

public void destroy() {
    // clearing the surcharges contents

}

@Override
public boolean mediate(MessageContext arg0) {
    // TODO Auto-generated method stub
    return false;
}

}

я вызываю этот класс в последовательности под названием «Hello»:

   <sequence name="Hello">
  <class name="com.exec.HelloWorld">
  </class>

and i use this sequence in proxy like this :

<proxy xmlns="http://ws.apache.org/ns/synapse" name="FileProxy" transports="vfs" startOnLoad="true" trace="disable">
<target>
    <inSequence>
        <log level="full"/>
            <target sequence="Hello"/>
    </inSequence>
</target>
<parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
<parameter name="transport.PollInterval">15</parameter>
<parameter name="transport.vfs.MoveAfterProcess">file:///Users/Source</parameter>
<parameter name="transport.vfs.FileURI">file:///Users/Target/</parameter>
<parameter name="transport.vfs.FileNamePattern">.*.txt</parameter>
<parameter name="transport.vfs.ContentType">text/plain</parameter>

Я ожидаю, что каждый раз, когда я помещаю файл (*.txt) в исходную папку, будет вызываться моя последовательность. Но проблема в том, что последовательность вызывается только один раз (при запуске wso2 esb). Как сделать так, чтобы моя последовательность вызывалась каждый раз, когда я помещаю файл в исходную папку?

Спасибо,


person Mari_Yaguchi    schedule 20.06.2013    source источник


Ответы (2)


Я думаю, что он работает так, как ожидалось, но я думаю, вы не поняли, как работает ваш пользовательский посредник. Сообщение, которое вы видите, отображается методом инициализации, когда создается медитор.

Этот посредник запускается каждый раз, когда вы оставляете файл в папке, но метод, запускаемый, когда это происходит, является методом «посредника», реализация которого ничего не делает (rerun false). Таким образом, вы должны реализовать метод медиатора как

public boolean mediate(MessageContext arg0) {
    hellowWorld();
    return false;
}

и он покажет сообщение, как вы ожидаете.

Надеюсь, что это работает!

person fipries    schedule 20.06.2013

Вы должны вызывать свою логику внутри метода mediate(). И сделайте возвращаемое значение истинным. Если вы сделаете это как false, механизм посредничества вернет false в процессе посредничества, и это создаст проблему в потоке сообщений. Вы можете проверить этот образец.

person Ratha    schedule 20.06.2013