## ---------------------------------------------------------------------------
## JOnAS: Java(TM) Open Application Server
## Copyright (C) 1999-2004 Bull S.A.
## Contact: jonas-team@objectweb.org
##
## This library is free software; you can redistribute it and/or
## modify it under the terms of the GNU Lesser General Public
## License as published by the Free Software Foundation; either
## version 2.1 of the License, or any later version.
##
## This library is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
## Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public
## License along with this library; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
## USA
##
## Initial developer(s): Benoit PELLETIER.
## Contributor(s): ______________________________________.
##
## ---------------------------------------------------------------------------
## $Id$
## ---------------------------------------------------------------------------

## Macros library for GenIC

###############################################################################
##
## macros 'beforeThrowRemoteException' and 'afterThrowRemoteException" aim to
## add a try catch block in order to perform some post exception process like mapping
## to protocol depending exception
##

#macro( beforeThrowRemoteException )
// Velocity: beforeThrowRemoteException: $Id$
try {
#end##

#macro( afterThrowRemoteException )
    // Velocity: afterThrowRemoteException: $Id$
} catch ( RemoteException e) {

  // check if rmi exception mapping is needed - if yes the method rethrows it
  RmiUtility.rethrowRmiException(e) ;
  // if not, throws the exception just as it is
  throw e ;
}
#end

#macro( timerVariablesDeclaration)
     long requestStartTime ;
     long businessStartTime = -1;
     long businessStopTime;
     long requestStopTime;
#end

#macro( getRequestStartTime)
    requestStartTime = new Date().getTime();
#end

#macro( getRequestStopTime)
     requestStopTime = new Date().getTime();
#end

#macro( getBusinessStartTime)
     businessStartTime = new Date().getTime();
#end

#macro( getBusinessStopTime)
     businessStopTime = new Date().getTime();
#end

#macro( updateEJBMonitoringData)
    if (bf instanceof JSessionFactory) {
        JSessionFactory jsf = (JSessionFactory) bf;
        if (jsf.getMonitoringEnabled()) {
            MonitoringEvent monitoringEvent = new MonitoringEvent(System.identityHashCode(jsf), jsf.getEJBName(),
                jsf.getContainer().getFileName(), "$package.$class.$M.getName()($M.getFormalParameters())",
                businessStartTime, businessStopTime, requestStartTime, requestStopTime);
            jsf.getDispatcher().dispatch(monitoringEvent);
        }
    }
#end
