From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../examples/timer/CleanDayLimitOrdersBean.java | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/EJB 3.0 Code/Rima Examples/src/examples/timer/CleanDayLimitOrdersBean.java (limited to 'Master/Reference Architectures and Patterns/EJB 3.0 Code/Rima Examples/src/examples/timer/CleanDayLimitOrdersBean.java') diff --git a/Master/Reference Architectures and Patterns/EJB 3.0 Code/Rima Examples/src/examples/timer/CleanDayLimitOrdersBean.java b/Master/Reference Architectures and Patterns/EJB 3.0 Code/Rima Examples/src/examples/timer/CleanDayLimitOrdersBean.java new file mode 100644 index 0000000..1f90550 --- /dev/null +++ b/Master/Reference Architectures and Patterns/EJB 3.0 Code/Rima Examples/src/examples/timer/CleanDayLimitOrdersBean.java @@ -0,0 +1,67 @@ +package examples.timer; + +import javax.ejb.*; +import javax.annotation.Resource; + +import java.util.Calendar; +import java.util.TimeZone; +import java.util.SimpleTimeZone; +import java.util.GregorianCalendar; +import java.util.Date; + +@Stateless +public class CleanDayLimitOrdersBean implements CleanDayLimitOrders { + + @Resource private SessionContext ctx; + + public void cleanPeriodicallyDayLimitOrders() + { + // Get hold of the eastern time zone assuming that the securities are being + // traded on NYSE and NASDAQ exchanges. + String[] timezoneIDs = TimeZone.getAvailableIDs (-5 * 60 * 60 * 1000); + + SimpleTimeZone est = new SimpleTimeZone (-5 * 60 * 60 * 1000, timezoneIDs[0]); + + // Provide the rules for start and end days of daylight savings time. + est.setStartRule (Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000); + est.setEndRule (Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000); + + // Get hold of a calendar instance for the eastern time zone. + Calendar cal = new GregorianCalendar(est); + + // Set the calendar to the current time. + cal.setTime (new Date ()); + + // Calculate the difference between now and market close i.e. 4 PM Eastern. + int hourofday = cal.get (cal.HOUR_OF_DAY); + int minuteofhour = cal.get (cal.MINUTE); + + // If this method is invoked after the market close, then set the timer expiration + // immediately i.e. start=0. Otherwise, calculate the milliseconds that needs + // to elapse until first timer expiration. + long start = 0; + if (hourofday < 16) + { + int hourdiff = 16 - hourofday - 1; + int mindiff = 60 - minuteofhour; + + start = (hourdiff * 60 * 60 * 1000) + (mindiff * 60 * 1000); + } + + // Finally, get hold of the timer service instance from EJBContext object and create the + // recurrent expiration timer. + TimerService timerService = ctx.getTimerService(); + Timer timer = timerService.createTimer(start, 86400000, null); + + System.out.println("CleanDayLimitOrdersBean: Timer created to first expire after " + start + " milliseconds."); + } + + @Timeout + public void handleTimeout(Timer timer) + { + System.out.println("CleanDayLimitOrdersBean: handleTimeout called."); + + // Put here the code for cleaning the database of day limit orders that have + // not been executed. + } +} \ No newline at end of file -- cgit v1.2.3