001: /**
002: * EasyBeans
003: * Copyright (C) 2007 Bull S.A.S.
004: * Contact: easybeans@ow2.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * --------------------------------------------------------------------------
022: * $Id: TimerBean.java 1970 2007-10-16 11:49:25Z benoitf $
023: * --------------------------------------------------------------------------
024: */package org.ow2.easybeans.examples.timerservice;
025:
026: import javax.annotation.Resource;
027: import javax.ejb.EJB;
028: import javax.ejb.EJBException;
029: import javax.ejb.Stateless;
030: import javax.ejb.Timeout;
031: import javax.ejb.Timer;
032: import javax.ejb.TimerService;
033: import javax.jms.Queue;
034: import javax.jms.QueueConnection;
035: import javax.jms.QueueConnectionFactory;
036: import javax.jms.QueueSender;
037: import javax.jms.QueueSession;
038: import javax.jms.Session;
039: import javax.jms.TextMessage;
040:
041: /**
042: * Stateless bean.
043: * @author Florent Benoit
044: */
045: @Stateless(mappedName="timerBean")
046: public class TimerBean implements TimerBeanRemote {
047:
048: /**
049: * Time before firing a new Timer.
050: */
051: private static final long FIRING_TIME = 3000;
052:
053: /**
054: * Queue connection factory (Available for clients).
055: */
056: private static final String QUEUE_CONNECTION_FACTORY = "QCF";
057:
058: /**
059: * Queue name used by this example.
060: */
061: private static final String SAMPLE_TIMER_QUEUE = "SampleTimerQueue";
062:
063: /**
064: * Link to the local bean.
065: */
066: @EJB
067: private TimedLocal timedBean;
068:
069: /**
070: * Queue factory for queue sessions.
071: */
072: @Resource(mappedName=QUEUE_CONNECTION_FACTORY)
073: private QueueConnectionFactory queueConnectionFactory;
074:
075: /**
076: * Queue for sending the messages.
077: */
078: @Resource(mappedName=SAMPLE_TIMER_QUEUE)
079: private Queue timerQueue;
080:
081: /**
082: * Timer service (injected).
083: */
084: @Resource
085: private TimerService timerService;
086:
087: /**
088: * Business init method that will fire a Timer.
089: */
090: public void init() {
091: // Calling the timer service
092: timerService.createTimer(FIRING_TIME,
093: "Simple Serializable object");
094: }
095:
096: /**
097: * Timeout method that will be called by the timer service when a timer is expiring.
098: * @param timer the timer object containing some data.
099: */
100: @Timeout
101: public void timerMethod(final Timer timer) {
102: System.out
103: .println(" SLSB -> Timer method called by the Timer Service.");
104: System.out
105: .println(" SLSB -> Timer received = '" + timer + "'.");
106: System.out
107: .println(" SLSB -> Info object inside the timer object is '"
108: + timer.getInfo() + "'.");
109:
110: // Send a message on an MDB (that start a timer)
111: System.out
112: .println(" SLSB -> Sending a message to a MDB which will start a timer.");
113: try {
114: sendMessage();
115: } catch (Exception e) {
116: throw new EJBException("Cannot send a message to an MDB", e);
117: }
118:
119: // Start a timer on another local bean that implements javax.ejb.TimedObject
120: System.out
121: .println(" SLSB -> Call a local bean in order to start a new timer.");
122: timedBean.startTimer();
123: }
124:
125: /**
126: * Send a message to a queue.
127: * @throws Exception if there is failure while sending a message
128: */
129: private void sendMessage() throws Exception {
130: // Create connection
131: QueueConnection queueConnection = queueConnectionFactory
132: .createQueueConnection();
133:
134: // Create session
135: QueueSession queueSession = queueConnection.createQueueSession(
136: false, Session.AUTO_ACKNOWLEDGE);
137:
138: // Create sender
139: QueueSender queueSender = queueSession.createSender(timerQueue);
140:
141: // Send message
142: TextMessage message = queueSession.createTextMessage();
143: message.setText("Sending a message");
144: queueSender.send(message);
145: System.out.println(" SLSB -> Message sent");
146:
147: // Close JMS objects
148: queueSender.close();
149: queueSession.close();
150: queueConnection.close();
151:
152: }
153:
154: }
|