Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EJB3.1@Schedule是否可以在应用程序代码之外配置?_Java_Java Ee 6_Ejb 3.1_Schedule - Fatal编程技术网

Java EJB3.1@Schedule是否可以在应用程序代码之外配置?

Java EJB3.1@Schedule是否可以在应用程序代码之外配置?,java,java-ee-6,ejb-3.1,schedule,Java,Java Ee 6,Ejb 3.1,Schedule,如何配置计划间隔: @Schedule(persistent=true,minute=“*”,second=“*/5”,hour=“*” 在应用程序代码之外 如何在ejb-jar.xml中配置它 我可以在应用程序外部配置它(属性文件的类型) 根据EJB3.1规范,可以通过注释或通过ejbjar.xml部署描述符配置自动计时器 18.2.2自动定时器创建 计时器服务支持 基于 bean类中的元数据或 部署描述符。这允许bean开发人员安排一个计时器 不依赖于bean调用 以编程方式调用 计时器服务

如何配置计划间隔:

@Schedule(persistent=true,minute=“*”,second=“*/5”,hour=“*”

在应用程序代码之外

  • 如何在ejb-jar.xml中配置它
  • 我可以在应用程序外部配置它(属性文件的类型)

  • 根据EJB3.1规范,可以通过注释或通过
    ejbjar.xml
    部署描述符配置自动计时器

    18.2.2自动定时器创建 计时器服务支持 基于 bean类中的元数据或 部署描述符。这允许bean开发人员安排一个计时器 不依赖于bean调用 以编程方式调用 计时器服务计时器创建方法。 自动创建的计时器是 因此由容器创建 应用程序部署

    我对部署描述符XLM模式的理解是,您可以使用
    元素中的
    元素来定义它

    <xsd:element name="timer"
                 type="javaee:timerType"
                 minOccurs="0"
                 maxOccurs="unbounded"/>
    
    
    
    有关详细信息,请参见
    timerType
    复杂类型的定义(特别是
    计划
    超时方法
    元素)

    工具书类
    • EJB3.1规范
      • 第18.2.2节“自动定时器创建”
      • 第19.5节“部署描述符XML模式”(第580页,p583-p584)

      • 以下是部署描述符中的调度示例:

            <session>
                 <ejb-name>MessageService</ejb-name>
                 <local-bean/>
                 <ejb-class>ejb.MessageService</ejb-class>
                 <session-type>Stateless</session-type>
                 <timer>
                    <schedule>
                        <second>0/18</second>
                        <minute>*</minute>
                        <hour>*</hour>
                    </schedule>
                    <timeout-method>
                        <method-name>showMessage</method-name>
                    </timeout-method>
                 </timer>
            </session>
        
      • ejb-jar.xml
      • 对我来说,ejb-jar.xml变量开始在TomEE上工作,只有我在timeout方法中传递javax.ejb.Timer参数:

        <session>
          <ejb-name>AppTimerService</ejb-name>
          <ejb-class>my.app.AppTimerService</ejb-class>
          <session-type>Singleton</session-type>
          <timer>
            <schedule>
              <second>*/10</second>
              <minute>*</minute>
              <hour>*</hour>
            </schedule>
            <timeout-method>
              <method-name>timeout</method-name>
              <method-params>
                <method-param>javax.ejb.Timer</method-param>
              </method-params>
           </timeout-method>
         </timer>
        
        谢谢你的来信

      • 属性文件变量
      • 您可以读取.properties文件并以编程方式创建计时器

        ScheduleExpression schedule = new ScheduleExpression();
        schedule.hour(hourProperty);//previously read property from .properties file
        schedule.minute(minuteProperty);//previously read property from .properties file
        Timer timer = timerService.createCalendarTimer(schedule);
        

        但是我找不到我们是否可以在EJB中使用cron表达式。

        假设我有几天,例如(周一、周二、周五)和工作时间(9-18),我如何应用此方法。对于@Schedule(second=“30”,minute=“*/5”,hour=“*”,persistent=false),这是不正确的在JBoss EAP 7.0.0中,这需要从
        无状态
        更改为
        单例
        public class AppTimerService {
            public void timeout(Timer timer) {
                System.out.println("[in timeout method]");
            }
        }
        
        ScheduleExpression schedule = new ScheduleExpression();
        schedule.hour(hourProperty);//previously read property from .properties file
        schedule.minute(minuteProperty);//previously read property from .properties file
        Timer timer = timerService.createCalendarTimer(schedule);