我方系统目前有N个待办任务,每个待办任务的生成都有特定的方法,没有统一入口。
现在需要把我方生成的任务以rest接口方式发至对端系统。从接口方法来看,需要组装一些基本数据传递到对端。
最笨的方法就是在每个待办生成时,调用这个接口方法,回传即可。
但是这样的工作量非常大。说一下环境:
我方JavaEE的应用,Oracle数据库。
对方公开了http链接与方法。除了每个方法都要写调用外,想到以下方式:
1。后台定时任务,监视待办任务表。每隔几分钟扫描一次该表,然后调用接口程序发送待办;这种方法发送待办任务有延时,可能不符合要求。
2。在待办任务表上建立触发器,如果有新数据插入就调用oralce触发器调用java类,送回待办 ;不知道第二种方案是否可行?这种方案有什么弊端?
另外,触发器能够调用WEB应用吗?必须是Main函数的类吗?大家是否还有其它的方案?

解决方案 »

  1.   

    用Oracle数据库触发器来执行Java代码是可以的,但也不是很推荐。如果量不大的话可以考虑这样:
    1、任务表中用触发器往“待发送表”记录信息;
    2、后台定时任务定期轮询“待发送表”,比如5秒一次,对数据库而言压力并不大;
    3、注意应保持待发送表的大小,不能让其无限制增长,应该及时清理已发送信息。
    如果要求非常高实时性的发送,那么Oracle数据库提供一种新技术叫做:数据变化通知(Oracle Database Change Notification);不过也不觉得真的需要这样去玩
      

  2.   

    谢谢楼上的
    想知道触发器一执行Java代码不推荐的原因另外我们这边的数据是比较大,5分钟一次还差不多。不知道数据变化通知怎么个情况?
      

  3.   

    Oracle执行Java代码需要额外消耗内存,当然Oracle有专用的Java内存区进行管理;主要还是怕如果写的不好,把数据库都堵死了就实在是得不偿失了;而且这个过程是在事务内完成的,意味着原来简单的insert或update过程的锁表时间也要对应着略有延长,如果你还用了WebService啥的远程调用就可能进一步延长这个时间。数据如果比较大,缩短周期更合适,否则5分钟一次处理半天更不好。
    数据变化通知这个,你直接Google下样例就知道了,用JDBC注册一个监听器,然后如果发生注册事件,就会通知你注册的处理函数。不过没听说有什么知名的生产案例。