| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.openejb.assembler.classic; |
| |
| import org.apache.openejb.BeanContext; |
| import org.apache.openejb.MethodContext; |
| import org.apache.openejb.util.Logger; |
| import org.apache.openejb.util.LogCategory; |
| import org.apache.openejb.core.timer.ScheduleData; |
| import javax.ejb.ScheduleExpression; |
| import javax.ejb.TimerConfig; |
| import java.lang.reflect.Method; |
| |
| public class MethodScheduleBuilder { |
| |
| public static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_STARTUP, MethodScheduleBuilder.class.getPackage().getName()); |
| |
| public void build(BeanContext beanContext, EnterpriseBeanInfo beanInfo) { |
| |
| Class<?> clazz = beanContext.getBeanClass(); |
| |
| for (MethodScheduleInfo info : beanInfo.methodScheduleInfos) { |
| |
| Method timeoutMethodOfSchedule = null; |
| |
| if (info.method.methodParams == null) { |
| |
| logger.info("Schedule timeout method with 'null' method parameters is invalid: " + info.method.methodName); |
| |
| } else { |
| |
| try { |
| timeoutMethodOfSchedule = MethodInfoUtil.toMethod(clazz, info.method); |
| } catch (IllegalStateException e) { |
| // method doesn't exist |
| logger.warning("Schedule method does not exist: " + info.method.methodName, e); |
| continue; |
| } |
| |
| } |
| |
| MethodContext methodContext = null; |
| |
| if (timeoutMethodOfSchedule == null && beanContext.getEjbTimeout() != null) { |
| methodContext = beanContext.getMethodContext(beanContext.getEjbTimeout()); |
| } else if (info.method.className == null |
| || timeoutMethodOfSchedule.getDeclaringClass().getName().equals(info.method.className)) { |
| |
| methodContext = beanContext.getMethodContext(timeoutMethodOfSchedule); |
| |
| } |
| |
| this.addSchedulesToMethod(methodContext, info); |
| } |
| } |
| |
| private void addSchedulesToMethod(MethodContext methodContext, MethodScheduleInfo info){ |
| |
| if (methodContext == null) { |
| return; |
| } |
| |
| for (ScheduleInfo scheduleInfo : info.schedules) { |
| |
| ScheduleExpression expr = new ScheduleExpression(); |
| expr.second(scheduleInfo.second == null ? "0" : scheduleInfo.second); |
| expr.minute(scheduleInfo.minute == null ? "0" : scheduleInfo.minute); |
| expr.hour(scheduleInfo.hour == null ? "0" : scheduleInfo.hour); |
| expr.dayOfWeek(scheduleInfo.dayOfWeek == null ? "*" : scheduleInfo.dayOfWeek); |
| expr.dayOfMonth(scheduleInfo.dayOfMonth == null ? "*" : scheduleInfo.dayOfMonth); |
| expr.month(scheduleInfo.month == null ? "*" : scheduleInfo.month); |
| expr.year(scheduleInfo.year == null ? "*" : scheduleInfo.year); |
| expr.timezone(scheduleInfo.timezone); |
| expr.start(scheduleInfo.start); |
| expr.end(scheduleInfo.end); |
| |
| TimerConfig config = new TimerConfig(); |
| config.setInfo(scheduleInfo.info); |
| config.setPersistent(scheduleInfo.persistent); |
| |
| methodContext.getSchedules().add(new ScheduleData(config, expr)); |
| } |
| |
| } |
| |
| |
| } |