001: /*
002: * Coefficient - facilitates project based collaboration
003: * Copyright (C) 2003, Dylan Etkin, CSIR icomtek
004: * PO Box 395
005: * Pretoria 0001, RSA
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 (at your option) any later version.
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
018: */
019:
020: package za.org.coefficient.statistics.beans;
021:
022: import net.sf.hibernate.HibernateException;
023:
024: import za.org.coefficient.util.common.InvokerFactory;
025:
026: import javax.ejb.EJBException;
027: import javax.ejb.MessageDrivenBean;
028: import javax.ejb.MessageDrivenContext;
029:
030: import javax.jms.JMSException;
031: import javax.jms.MapMessage;
032: import javax.jms.Message;
033: import javax.jms.MessageListener;
034:
035: /**
036: *
037: * @ejb:bean name="StatisticsMessage"
038: * transaction-type="Container"
039: * acknowledge-mode="Auto-acknowledge"
040: * destination-type="javax.jms.Queue"
041: * subscription-durability="Durable"
042: * @jboss:destination-jndi-name name="queue/statisticsQueue"
043: */
044: public class StatisticsMessageBean implements MessageDrivenBean,
045: MessageListener {
046: //~ Static fields/initializers =============================================
047:
048: private static final String PROJECT = "project";
049: private static final String NAME = "name";
050: private static final String ACTION = "action";
051:
052: //~ Instance fields ========================================================
053:
054: private MessageDrivenContext ctx = null;
055:
056: //~ Constructors ===========================================================
057:
058: // Constructor
059: public StatisticsMessageBean() {
060: }
061:
062: //~ Methods ================================================================
063:
064: // Implementation of the MessageDrivenBean interface
065: public void setMessageDrivenContext(MessageDrivenContext ctx)
066: throws EJBException {
067: this .ctx = ctx;
068: }
069:
070: public void ejbCreate() {
071: }
072:
073: public void ejbRemove() {
074: }
075:
076: //
077: // Implementation of the MessageListener interface
078: //
079: public void onMessage(Message message) {
080: if (message instanceof MapMessage) {
081: MapMessage mm = (MapMessage) message;
082: try {
083: String name = mm.getString(NAME);
084: Long prjId = new Long(mm.getLong(PROJECT));
085: String action = mm.getString(ACTION);
086: if (name == null) {
087: name = "";
088: }
089: InvokerFactory.getInvoker().invokeMethodOnService(
090: "StatisticsService", "doStatistics",
091: new Object[] { name, prjId, action });
092: } catch (JMSException jmsex) {
093: jmsex.printStackTrace();
094: System.err
095: .println("<< exception getting values from messsage");
096: } catch (HibernateException he) {
097: he.printStackTrace();
098: System.err.println("<< hibernate exception, crap!!");
099: } catch (Exception e) {
100: e.printStackTrace();
101: System.err.println("<< exception, calling service!!");
102: }
103: } else {
104: System.out
105: .println("StatisticsMessageBean expected MapMessage but got message - "
106: + message.getClass());
107: }
108: }
109: }
|