Dzisiaj postanowiłem napisać prosty program, powiedzmy taki mały system w której jedna osoba wystukuje w konsoli jakie produkty z magazynu mają zostać wysłane do klienta, a osoba w magazynie jak ma czas to realizuje przesyłki.
Czego będziemy używali
Mule 1.2.1 i to wystarczy:)
Więc co mi potrzeba: po pierwsze komponentu który będzie wczytywał to co ktoś pisze w konsoli, po drugie komponent który tę wiadomość przekształci do formatu (nazwa produktu plus aktualna data), napiszemy prostą transformację, po trzecie komponent odpowiedzialny za wysłanie wiadomości e-mail.
Ostatnio przeczytałem artykuł z
Java exPress o mavenie. Więc zaczynamy, tworzymy projekt za pomocą mavena:
- mvn archetype:create -DgroupId=com.itsilesia.email -DartifactId=SendEmail
Potem wchodzimy do katalogu projektu i przystosowujemy projekt do naszego ulubionego IDE w tym wypadku Eclipse
Więc zaczynamy pierwszy komponent który, będzie czytał nam dane ze standardowego wejścia(konsoli):
- <inbound>
- <stdio:inbound-endpoint system="IN">
- </inbound>
Teraz należy napisać prostą transformację, która doda datę do tego co zostało napisane w konsoli, żeby coś takiego osiągnąć trzeba napisać klasę, która będzie dziedziczyć po
AbstractTransformer.
- package com.itsilesia.email;
-
- import java.util.Date;
-
- import org.mule.api.transformer.TransformerException;
- import org.mule.transformer.AbstractTransformer;
-
-
-
-
-
- public class MessageTransformer extends AbstractTransformer {
-
- protected Object doTransform(Object arg0, String arg1)
- throws TransformerException {
- String oldMessage = (String) arg0;
- oldMessage += new Date();
- return oldMessage;
- }
-
- }
Ostatni etap to dodanie do obsługi wysyłania e-maili.
- <pass-through-router>
- <smtp:outbound-endpoint user="lip*****" password="******" host="poczta.o2.pl" port="25" to="*******@o2.pl" from="lip*****@o2.pl" subject="Just do it!!!" refs="AddDateToMessage StringToEmailMessage">
- </pass-through-router>
Zauważcie, że obok standardowej konfiguracji użytkownik, hasło, port itd. trzeba dodać naszą transformację która doda datę do naszej wiadomości i potem jeszcze transformacja "out of the box" która zamienia wiadomość do postaci
Stringa na email.
To już mamy wszystko, cały plik konfiguracyjny wygląda tak:
- <?xml version="1.0" encoding="UTF-8"?>
- <mule xmlns="http://www.mulesource.org/schema/mule/core/2.1" xsi="http://www.w3.org/2001/XMLSchema-instance" spring="http://www.springframework.org/schema/beans" context="http://www.springframework.org/schema/context" file="http://www.mulesource.org/schema/mule/file/2.1" jms="http://www.mulesource.org/schema/mule/jms/2.1" smtp="http://www.mulesource.org/schema/mule/smtp/2.1" email="http://www.mulesource.org/schema/mule/email/2.1" xm="http://www.mulesource.org/schema/mule/xml/2.1" jdbc="http://www.mulesource.org/schema/mule/jdbc/2.1" stdio="http://www.mulesource.org/schema/mule/stdio/2.1" schemalocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.mulesource.org/schema/mule/core/2.1 http://www.mulesource.org/schema/mule/core/2.1/mule.xsd http://www.mulesource.org/schema/mule/file/2.1 http://www.mulesource.org/schema/mule/file/2.1/mule-file.xsd http://www.mulesource.org/schema/mule/jms/2.1 http://www.mulesource.org/schema/mule/jms/2.1/mule-jms.xsd http://www.mulesource.org/schema/mule/smtp/2.1 http://www.mulesource.org/schema/mule/smtp/2.1/mule-smtp.xsd http://www.mulesource.org/schema/mule/email/2.1 http://www.mulesource.org/schema/mule/email/2.1/mule-email.xsd http://www.mulesource.org/schema/mule/xml/2.1 http://www.mulesource.org/schema/mule/xml/2.1/mule-xml.xsd http://www.mulesource.org/schema/mule/jdbc/2.1 http://www.mulesource.org/schema/mule/jdbc/2.1/mule-jdbc.xsd http://www.mulesource.org/schema/mule/stdio/2.1 http://www.mulesource.org/schema/mule/stdio/2.1/mule-stdio.xsd">
- <email:string-to-email-transformer name="StringToEmailMessage">
- <custom-transformer name="StringToMimeMessage" class="org.mule.transport.email.transformers.StringToEmailMessage">
- <custom-transformer name="AddDateToMessage" class="com.itsilesia.email.MessageTransformer"></custom-transformer>
-
- <model name="InToEmail">
- <service name="sendMeEmail">
- <inbound>
- <stdio:inbound-endpoint system="IN">
- </inbound>
- <outbound>
- <pass-through-router>
- <smtp:outbound-endpoint user="lip****" password="*****" host="poczta.o2.pl" port="25" to="lip*****@o2.pl" from="lip****@o2.pl" subject="Just do it!!!" refs="AddDateToMessage StringToEmailMessage">
- </pass-through-router>
- </outbound>
- </service>
- </model>
- </mule>
Jeszcze plik pom.xml:
- <project xmlns="http://maven.apache.org/POM/4.0.0" xsi="http://www.w3.org/2001/XMLSchema-instance" schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelversion>4.0.0</modelversion>
- <groupid>com.itsilesia.email</groupid>
- <artifactid>SendEmail</artifactid>
- <packaging>jar</packaging>
- <version>1.0-SNAPSHOT</version>
- <name>SendEmail</name>
- <url>http://maven.apache.org</url>
-
-
- <properties>
- <muleversion>2.1.2</muleversion>
- </properties>
-
- <dependencies>
- <dependency>
- <groupid>org.mule</groupid>
- <artifactid>mule-core</artifactid>
- <version>${muleVersion}</version>
- </dependency>
- <dependency>
- <groupid>junit</groupid>
- <artifactid>junit</artifactid>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- </project>
Teraz uruchamiamy naszą aplikację:
- mule -config conf/mule.xml

Sprawdzamy e-mail:

Jak widać wszystko działa i gra:)