powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Отправка Email из EJB @Timeout метода Seam приложении
11 сообщений из 11, страница 1 из 1
Отправка Email из EJB @Timeout метода Seam приложении
    #37740664
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь с помощью EJB 3 TimeService организовать автоматическую рассылку почты через определенный период времени. Таймер работал прекрасно, пока я не заставил его отсылать мейлы. Сервер выкинул

Код: java
1.
2.
Error invoking ejbTimeout
javax.ejb.EJBException: java.lang.RuntimeException: java.lang.IllegalStateException: Attempted to invoke a Seam component outside an initialized application



У меня проект Seam2.2.2, AS Jboss 5.1.

Вот код:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
@Stateless
@Name("autoReportBackBean")
public class AutoReportBackBean implements AutoReportBackBeanInterface{
    @Resource 
    SessionContext ctx;
    
    public void setUpTimer(){
        clearSchedule();
            TimerService ts = ctx.getTimerService();
            Date startDate = new Date(System.currentTimeMillis());
            Calendar calendar = Calendar.getInstance();
            calendar.set(2012,Calendar.APRIL,5);
            long timePeriod = 10*1000; // 1 minute
            //Timer tim = ts.createTimer(startDate, timePeriod, "AutoReportTimer");
            Timer tim = ts.createTimer(timePeriod, "AutoReportTimer");
    }
    
    @Timeout
    public void sendAutoReports(Timer timer){
        System.out.println("Timer is clocking!!!!!!!!!");
        sendEmail();
    }
    
    private void clearSchedule(){
        for(Object timer : ctx.getTimerService().getTimers()){
            ((Timer)timer).cancel();
        }
    }
    
    private void sendEmail(){
        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);

        String msgBody = "...";

        try {
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress("from@blabla.ru", "Admin"));
            msg.addRecipient(Message.RecipientType.TO,
                             new InternetAddress("to@blabla.ru", "Mr. User"));
            msg.setSubject("Your autoreport is activated");
            msg.setText(msgBody);
            Transport.send(msg);

        } catch (AddressException e) {
            // ...
        } catch (MessagingException e) {
            // ...
        } catch (UnsupportedEncodingException e){
        
        }
    }
}
...
Рейтинг: 0 / 0
Отправка Email из EJB @Timeout метода Seam приложении
    #37740688
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка стабильно вываливается, или например EJB Timer стартует когда Seam ещё не проинициализировался полностью?
...
Рейтинг: 0 / 0
Отправка Email из EJB @Timeout метода Seam приложении
    #37740710
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

ошибка вываливается, когда приложение еще только деплоится. Но оно потом стартует и таймер тоже.
...
Рейтинг: 0 / 0
Отправка Email из EJB @Timeout метода Seam приложении
    #37740720
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rus_sunошибка вываливается, когда приложение еще только деплоится. Но оно потом стартует и таймер тоже.

Вбиваете вот это в гугле
"Attempted to invoke a Seam component outside an initialized application"
Первые несколько ссылок - рецепты как исправить. Можно добавить TimerService к поиску.

Вот тикет:
https://issues.jboss.org/browse/JBSEAM-4216

Желательно в коде добавить проверку на то стартовал Seam или ещё нет.
...
Рейтинг: 0 / 0
Отправка Email из EJB @Timeout метода Seam приложении
    #37741447
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Большое спасибо. попробую.
...
Рейтинг: 0 / 0
Отправка Email из EJB @Timeout метода Seam приложении
    #37741658
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Решил использовать Seam Email.
В логах теперь видно , что мейл вроде бы отправлен: Email sent successfully
НО никакой мейл на указанный ящик не приходит.

Написал facelet simple.xhtml для email:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<m:message xmlns="http://www.w3.org/1999/xhtml"
xmlns:m="http://jboss.com/products/seam/mail"
xmlns:h="http://java.sun.com/jsf/html">

<m:from name="Peter" address="peter@mail.ru" />
<m:to name="#{person.firstname} #{person.lastname}">boby@mail.ru<;/m:to>
<m:subject>Try out Seam!</m:subject>
<m:body>
<p><h:outputText value="Dear #{person.firstname}" />,</p>
<p>You can try out Seam by visiting
<a href="http://labs.jboss.com/jbossseam">http://labs.jboss.com/jbossseam</a>.</p>
<p>Regards,</p>
<p>Pete</p>
</m:body>
</m:message> 



Вот код отправки мейла из бина:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@In(create=true)
private Renderer renderer;
public void send() {
try {
renderer.render("/simple.xhtml");
facesMessages.add("Email sent successfully");
}
catch (Exception e) {
facesMessages.add("Email sending failed: " + e.getMessage());
}
}



Дальше добавил jboss-seam-mail.jar в WEB-INF/lib .
А в components.xmlns дописал:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:mail="http://jboss.com/products/seam/mail">
...
<!--mail:mail-session host="localhost" port="25"/-->
<mail:mail-session session-jndi-name="java:/Mail"/>
...
</components>



А также поменял конфигурацию Jboss в deploy/mail-service.xml

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
<?xml version="1.0" encoding="UTF-8" ?> 
- <!--  $Id: mail-service.xml 62350 2007-04-15 16:50:12Z dimitris@jboss.org $ 
  --> 
- <server>
- <!--  ==================================================================== 
  --> 
- <!--  Mail Connection Factory                                              
  --> 
- <!--  ==================================================================== 
  --> 
- <mbean code="org.jboss.mail.MailService" name="jboss:service=Mail">
  <attribute name="JNDIName">java:/Mail</attribute> 
  <attribute name="User">peter</attribute> 
  <attribute name="Password">pas11word</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.mail.ru" /> 
- <!--  Change to the SMTP gateway server 
  --> 
  <property name="mail.smtp.host" value="smtp.mail.ru" /> 
- <!--  The mail server port 
  --> 
  <property name="mail.smtp.port" value="25" /> 
- <!--  Change to the address mail will be from  
  --> 
  <property name="mail.from" value="peter@mail.ru" /> 
- <!--  Enable debugging output from the javamail classes 
  --> 
  <property name="mail.debug" value="false" /> 
  </configuration>
  </attribute>
  <depends>jboss:service=Naming</depends> 
  </mbean>
  </server>
...
Рейтинг: 0 / 0
Отправка Email из EJB @Timeout метода Seam приложении
    #37741669
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Вопрос снимается мейл пришел :-)
...
Рейтинг: 0 / 0
Отправка Email из EJB @Timeout метода Seam приложении
    #37750453
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

опять при стартапе стала вываливаться ошибка

Код: java
1.
2.
3.
java.lang.IllegalStateException: Attempted to invoke a Seam component outside an initialized application
ERROR [org.jboss.ejb.txtimer.TimerImpl] (EJB-Timer-1334222069214[target=jboss.j2ee:ear=mttConsultReport.ear,jar=mttConsultReport.jar,name=AutoReportBackBean,service=EJB3]) Error invoking ejbTimeout
javax.ejb.EJBException: java.lang.RuntimeException: Unable to inject jndi dependency: env/com.mydomain.myproject.action.AutoReportBackBean/callsStaffBackBean into property com.mydomain.myproject.action.AutoReportBackBean.callsStaffBackBean: Attempted to invoke a Seam component outside an initialized application



Использования аннотации @Startup на бине (callsStaffBackBean) который я инжектю в бин(AutoReportBackBean) с методом @TimeOut и
<async:timer-service-dispatcher/> в components.xml не помогло.

Вот код:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
@Stateless
@Name("autoReportBackBean")
public class AutoReportBackBean implements AutoReportBackBeanInterface {
    
    @EJB
    private CallsStaffDiagramBackBeanLocal callsStaffBackBean;
    

    public void setUpTimer() {
        clearSchedule();  
        Timer tim = ts.createTimer(1000, "AutoReportTimer");
    }

    @Timeout
    public void sendAutoReports(Timer timer) {   
        callsStaffBackBean.do();
        sendEMail();
    }
...
Рейтинг: 0 / 0
Отправка Email из EJB @Timeout метода Seam приложении
    #37751837
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rus_sun,

т.к. таймер переживает перезапуски сервера, он и сыпет ошибки, пока приложение еще только запускается. Если перед перезапуском сервера выключить таймер - ошибки не валятся.
...
Рейтинг: 0 / 0
Отправка Email из EJB @Timeout метода Seam приложении
    #37751924
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rus_sunrus_sun,
т.к. таймер переживает перезапуски сервера, он и сыпет ошибки, пока приложение еще только запускается. Если перед перезапуском сервера выключить таймер - ошибки не валятся.
Что же вы его к контексту не привязали?
...
Рейтинг: 0 / 0
Отправка Email из EJB @Timeout метода Seam приложении
    #37751931
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Как это привязать к контексту? К какому контексту? Подскажите, пожалуйста.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Отправка Email из EJB @Timeout метода Seam приложении
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]