HANA系统的XS引擎提供了定时执行你的任务的功能。你可以让HANA定期地完成一些你指定的操作。

你将在本文中看到如何编写一个简单的XS应用并调度一个XS Job来执行它。这个应用会向特定的表里插入一条记录。

1. 前提条件

1.1 这个功能从HANA SPS07开始有效,所以请确保你的HANA是Revision 70之后的版本。

1.2 确保XSEngine正常运行。
在你的Web Browser里输入http://<Web_Server_Host>:80<HANA_instance>/sap/hana/xs/admin/,如果能看到下面的界面就说明XSEngine一切正常。

/wp-content/uploads/2015/10/image1_2_1_816264.png

/wp-content/uploads/2015/10/image1_2_2_816301.png

1.3 HANA上的必要配置
你可以把下面这些和XSengine相关的角色赋给用户(这里我们使用的用户是”DEMO_USER”)。
/wp-content/uploads/2015/10/image1_3_1_816300.png

该用户的Schema权限也要赋给用户_SYS_REPO。

/wp-content/uploads/2015/10/image1_3_2_816305.png

在xsengine.ini里添加section “schedule”和参数”enabled”如下。
/wp-content/uploads/2015/10/image1_3_3_816306.png

如果需要向表里写数据,你必须把”sqlscript mode”改成”UNSECURE”(如下图),否则你只能在procedure里使用select语句。
/wp-content/uploads/2015/10/image1_3_4_816307.png

2. Procedure

2.1 新建XS project。
/wp-content/uploads/2015/10/image2_1_1_816309.png

/wp-content/uploads/2015/10/image2_1_2_816310.png/wp-content/uploads/2015/10/image2_1_3_816320.png

当要给project指定一个workspace时,你可以新建一个workspace或者使用缺省的workspace。
这里我们使用缺省的workspace。

/wp-content/uploads/2015/10/image2_1_4_816250.png/wp-content/uploads/2015/10/image2_1_5_816326.png

/wp-content/uploads/2015/10/image2_1_6_816327.png/wp-content/uploads/2015/10/image2_1_7_816328.png

你可以在Project Explorer里看到新建的project。

/wp-content/uploads/2015/10/image2_1_8_816329.png

同时你也可以在Web Browser里看到它。

/wp-content/uploads/2015/10/image2_1_9_816330.png

2.2 新建数据库object。
这里我们新建个表来做测试。

/wp-content/uploads/2015/10/image2_2_816338.png

2.3 新建XS JavaScript和XS Job。

按下面的步骤新建XS JavaScript。

/wp-content/uploads/2015/10/image2_3_1_816331.png

/wp-content/uploads/2015/10/image2_3_2_816339.png

.xsjs文件生成之后,如下新建一个JavaScript function。

我们向表DEMO_TABLE里插入一条包含时间戳的记录。

function my_js() {

    var sql = “INSERT INTO DEMO_USER.DEMO_TABLE VALUES (‘inserted by javascript job’, NOW())”;

    var conn = $.db.getConnection();

    var pstmt = conn.prepareStatement(sql);

    pstmt.execute();

    conn.commit();

    conn.close();

}

/wp-content/uploads/2015/10/image2_3_3_816340.png

然后新建一个XS Job。
/wp-content/uploads/2015/10/image2_3_4_816343.png

/wp-content/uploads/2015/10/image2_3_5_816347.png/wp-content/uploads/2015/10/image2_3_6_816348.png

.xsjob文件生成之后,可以在XS Job文件里定义任务了。

在”action”里指定刚才新建的XS JavaScript文件里的function。

在”schedules”中指定调度时间,其中的”xscron”同Linux环境的”crontab”的语法类似,这里我们指定每5秒钟执行一次。

{

    “description”: “my first JS job”,

    “action”: “XS_JOB_DEMO:my_js.xsjs::my_js”,

    “schedules”: [

        {

            “description”: “run every 5 seconds”,

            “xscron”: “* * * * * * 0:59/5”

        }

    ]

}

/wp-content/uploads/2015/10/image2_3_7_816349.png

2.4 新建HANA Procedure和XS job。

按下面的步骤新建XS Procedure。

/wp-content/uploads/2015/10/image2_4_1_816371.png/wp-content/uploads/2015/10/image2_4_2_816372.png

.hdbprocedure文件生成之后,如下新建一个HANA Procedure。

我们也向表DEMO_TABLE里插入一条包含时间戳的记录。

PROCEDURE “DEMO_USER”.”XS_JOB_DEMO::my_procedure” ( )

    LANGUAGE SQLSCRIPT

    SQL SECURITY INVOKER

    DEFAULT SCHEMA DEMO_USER

    AS

BEGIN

/*****************************

    Write your procedure logic

*****************************/

    INSERT INTO DEMO_TABLE VALUES(‘inserted by procedure job’, NOW());

END;

/wp-content/uploads/2015/10/image2_4_3_816373.png

然后同样新建一个XS Job来执行这个Procedure。

请注意“action”的语法,和刚才的XS JavaScript是不同的。
这里我们指定每10秒钟执行一次。

{

    “description”: “my first Procedure job”,

    “action”: “XS_JOB_DEMO::my_procedure”,

    “schedules”: [

        {

            “description”: “run every 10 seconds”,

            “xscron”: “* * * * * * 0:59/10”

        }

    ]

}

/wp-content/uploads/2015/10/image2_4_4_816377.png

2.5 在Web Browser里启动任务。

你可以在HANA XS Administration Tool里看到刚才新建的两个XS Job。

输入”User”和”Locale”,勾选”Active”,然后 按下”Save”之后XS Job就开始执行了。

你也可以在此监控任务。

/wp-content/uploads/2015/10/image2_5_1_816378.png

/wp-content/uploads/2015/10/image2_5_2_816379.png

从下图可见JavaScript的任务每5秒执行一次,HANA Procedure的任务每10秒执行一次。

/wp-content/uploads/2015/10/image2_5_3_816386.png

To report this post you need to login first.

2 Comments

You must be Logged on to comment or reply to a post.

Leave a Reply