2013-03-12 3 views
0

Мне нужно реализовать функцию переключения при отказе для отправки писем с использованием jboss-шва. Я попытался настроить два JNDINames в mail-service.xml. Но я не понимаю, как я могу установить второе имя JNDI в коде. Кроме того, я не понимаю, как я могу установить хост SMTP в код. МОЯ Код:Настройка отказоустойчивости для почты Jboss Seam

@Name("emailService") 
@AutoCreate 
public class EmailService { 
private static final Log logger = LogFactory.getLog(EmailService.class); 

@In(create = true) 
private Renderer renderer; 

@Asynchronous 
public void sendMessage(@Duration long delay, String template, 
     Object infoNeededForTemplate) { 
    MailSession mailSession = new MailSession(); 
    try { 
     Contexts.getEventContext().set("currentMail", infoNeededForTemplate); 
     renderer.render(template); 
     logger.info("Email send to " + ((Mail) infoNeededForTemplate).getToEmail()); 
    } catch (Exception e) { 
     logger.error("Error while sending mail: Message = " + e.getMessage()); 
     try { 
      renderer.render(template); 
      logger.info("Email send to " + ((Mail) infoNeededForTemplate).getToEmail()); 
     } catch (Exception e1) { 
      logger.error("Error while sending mail: Message = " + e1.getMessage()); 
     } 
    } 
} 

}

Моя почта-service.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<server> 
<mbean code="org.jboss.mail.MailService" name="jboss:service=Mail"> 
    <attribute name="JNDIName">java:/Mail</attribute> 
    <attribute name="User">nobody</attribute> 
    <attribute name="Password">password</attribute> 
    <attribute name="Configuration"> 
    <!-- A test configuration --> 
    <configuration> 
    <!-- Change to your mail server prototocol --> 
    <property name="mail.store.protocol" value="pop3"/> 
    <property name="mail.transport.protocol" value="smtp"/> 

    <!-- Change to the user who will receive mail --> 
    <property name="mail.user" value="nobody"/> 

    <!-- Change to the mail server --> 
    <property name="mail.pop3.host" value="pop3.nosuchhost.nosuchdomain.com"/> 

    <!-- Change to the SMTP gateway server --> 
    <property name="mail.smtp.host" value="HOST_1"/> 

    <!-- The mail server port --> 
    <property name="mail.smtp.port" value="25"/> 

    <!-- Change to the address mail will be from --> 
    <property name="mail.from" value="[email protected]"/> 

    <!-- Enable debugging output from the javamail classes --> 
    <property name="mail.debug" value="true"/> 
    <property name="mail.smtp.auth" value="false"/> 
    <property name="mail.smtp.starttls.enable" value="false"/> 
    </configuration> 
</attribute> 
<depends>jboss:service=Naming</depends> 
</mbean> 

<mbean code="org.jboss.mail.MailService" name="jboss:service=Mail"> 
<attribute name="JNDIName">java:/Mail1</attribute> 
<attribute name="User">nobody</attribute> 
<attribute name="Password">password</attribute> 
<attribute name="Configuration"> 
    <!-- A test configuration --> 
    <configuration> 
    <!-- Change to your mail server prototocol --> 
    <property name="mail.store.protocol" value="pop3"/> 
    <property name="mail.transport.protocol" value="smtp"/> 

    <!-- Change to the user who will receive mail --> 
    <property name="mail.user" value="nobody"/> 

    <!-- Change to the mail server --> 
    <property name="mail.pop3.host" value="pop3.nosuchhost.nosuchdomain.com"/> 

    <!-- Change to the SMTP gateway server --> 
    <property name="mail.smtp.host" value="HOST_2"/> 

    <!-- The mail server port --> 
    <property name="mail.smtp.port" value="25"/> 

    <!-- Change to the address mail will be from --> 
    <property name="mail.from" value="[email protected]"/> 

    <!-- Enable debugging output from the javamail classes --> 
    <property name="mail.debug" value="true"/> 
    <property name="mail.smtp.auth" value="false"/> 
    <property name="mail.smtp.starttls.enable" value="false"/> 


    </configuration> 
</attribute> 
<depends>jboss:service=Naming</depends> 
</mbean> 
</server> 

Можете ли вы мне помочь либо, как я могу настроить & использовать два JNDIs или набор сервера SMTP хост на лету для отправки почты? Большое спасибо.

С уважением, Саурабх

ответ

0

Вы можете указать имя хоста явно в методе Transport.connect; Подробности см. в javadocs.

+0

Большое спасибо за ответ. Как я упоминал в проблеме, я не использую функцию Javamail, но используя Jboss Seam. Поэтому для меня установка транспорта «на лету» не сработает. Мне нужно либо 1. Внедрить другой JNDIName в существующий контекст 2. Внедрить другой хост для существующего контекста. Если его можно использовать Транспортный объект с швом, не могли бы вы разместить несколько примеров? Благодарю. – Saurabhcdt

+0

Я ничего не знаю о Seam, поэтому я не знаю, как это ограничивает использование JavaMail API. –

+0

Я все еще ищу ответ. Может ли кто-нибудь помочь? – Saurabhcdt