Компонент/поток запуска Singleton Mule

У меня есть работающее приложение Mule, которое я использую в своем проекте. Что я хотел бы сделать, так это добавить некоторый компонент, который будет очищать некоторую таблицу базы данных каждый раз при запуске сервера Mule.

Какой компонент использовать в этом вопросе? Предпочтительно, чтобы это происходило из XML, а не из какого-либо компонента Java, который я должен написать (JDBC и т. д.)

Спасибо!


person Menyh    schedule 14.02.2012    source источник


Ответы (1)


Готово с помощью:

  • Слушатель уведомлений, который будет проинформирован, когда Mule инициализируется,
  • Реализовано в Groovy, поэтому весь код находится в конфигурации XML,
  • Конечная точка JDBC для очистки данных, поэтому JDBC не требуется.

Вот конфиг:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jdbc="http://www.mulesoft.org/schema/mule/jdbc"
    xmlns:spring="http://www.springframework.org/schema/beans"
    xmlns:lang="http://www.springframework.org/schema/lang"
    xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd
            http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/3.2/mule.xsd
            http://www.mulesoft.org/schema/mule/jdbc http://www.mulesoft.org/schema/mule/jdbc/3.2/mule-jdbc.xsd
            ">
    <spring:beans>
        <spring:bean id="jdbcDataSource" class="org.hsqldb.jdbc.JDBCDataSource">
            <spring:property name="url" value="jdbc:hsqldb:mem:test-db" />
        </spring:bean>

        <lang:groovy id="dataInitializer">
            <lang:inline-script><![CDATA[
                import org.mule.api.context.notification.*;
                import org.mule.context.notification.*;
                import org.mule.module.client.MuleClient;

                class DataInitializer implements MuleContextNotificationListener<MuleContextNotification> {

                    public void onNotification(MuleContextNotification notification) {
                        if (notification.action == MuleContextNotification.CONTEXT_STARTED)
                            new MuleClient(notification.muleContext).dispatch("jdbc://initialDataPurge", null, null)
                    }
                }
            ]]></lang:inline-script>
        </lang:groovy>
    </spring:beans>

    <notifications>
        <notification event="CONTEXT"/>
        <notification-listener ref="dataInitializer"/>
    </notifications>

    <jdbc:connector name="jdbcConnector" dataSource-ref="jdbcDataSource">
        <jdbc:query key="initialDataPurge" value="DELETE FROM test;" />
    </jdbc:connector>
</mule>
person David Dossot    schedule 14.02.2012
comment
Спасибо! Это мне очень помогло. - person Menyh; 15.02.2012
comment
Друг указал чистый Spring способ инициализации БД, который может захотеть изучить как альтернативный вариант использования инфраструктуры JDBC Mule: static.springsource.org/spring/docs/current/ - person David Dossot; 15.02.2012