Progress 4gl 是否可以在事务中以禁止撤消的方式写入记录?

Progress 4gl 是否可以在事务中以禁止撤消的方式写入记录?,progress-4gl,openedge,4gl,Progress 4gl,Openedge,4gl,我们正在进行一些登录问题,我们需要在数据库中写入日志条目。但是,在事务中运行的进程以及通过回滚,我们的新日志条目也被删除。我可以从事务中写入DB吗?类似于写在没有撤销选项的诱惑。。。?新的日志项是否仍保留在数据库中…?对数据库的每次更改都必须是事务的一部分。如果您没有显式启动一个,它将为您隐式启动,并限定到具有事务功能的下一个外部块 但是,尽管我不建议您使用子事务。您可以通过在事务范围内显式指定DO事务来调用子事务。虽然数据库永远不会知道它,但客户机可以回滚子事务,而数据库可以提交事务 但是为了

我们正在进行一些登录问题,我们需要在数据库中写入日志条目。但是,在事务中运行的进程以及通过回滚,我们的新日志条目也被删除。我可以从事务中写入DB吗?类似于写在没有撤销选项的诱惑。。。?新的日志项是否仍保留在数据库中…?

对数据库的每次更改都必须是事务的一部分。如果您没有显式启动一个,它将为您隐式启动,并限定到具有事务功能的下一个外部块

但是,尽管我不建议您使用子事务。您可以通过在事务范围内显式指定DO事务来调用子事务。虽然数据库永远不会知道它,但客户机可以回滚子事务,而数据库可以提交事务

但是为了实现类似的功能,您必须掌握事务范围、块行为和错误处理的概念


RealHeavyDude.

将日志条目写入一个无撤销临时表。
当代码将提交一个事务,或者事务不活动(transactionID=?)时,让您的代码写出日志项。

我认为在ABL中没有任何方法可以按照您的计划高效地完成这项工作(将临时表刷新或其他花絮洒得到处都是),或者可靠地完成这项工作(如果应用程序因未刷新的临时表而崩溃怎么办?),正如其他人所提到的。我建议通过使数据库写入异步(如果可能的话,在应用程序外部进行),使复杂的日志记录与应用程序的耦合度降低

由于您使用的是Windows,因此可以将日志记录更改为使用.NET库,而不是ABL结构。log4net提供了一些有用的功能:

  • 它允许您直接登录到数据库
  • 它使用syslog协议,允许您登录到外部Unix syslog或守护进程(rsyslog支持将日志消息写入数据库)
  • 它通过UDP数据包将日志消息发送到其他要处理的地方(例如,支持的服务器)

如果必须在ABL中执行此操作,则可以专门为日志消息使用命名的输出流(
输出到流
)它写入外部进程正在侦听处理它的特定位置。此文件可能是由类似于
mkfifo
的东西创建的管道,也可能只是一个常规文本文件,通过
inotify
监视更改(不确定这些文件的Windows等价物是什么)。此外部进程将处理解析消息并将其写入数据库(基本上是重新发明rsyslog)。

我喜欢无撤销临时表的想法,只需确保将数据库写入部分放在“FINALLY”中即可如果出现未处理的异常,则阻止。

另一种可能是使用应用程序服务器。应用程序服务器会话上的事务独立于原始会话中的事务(这就是可选和冗余的“独特事务”语法的全部含义).

另一个选项是使用简单的消息系统。一个非常容易设置和使用的选项是STOMP。它与平台无关,非常容易使用

朱利安·林登·史密斯(Julian Lyndon Smith)大约一个月前在PEG上发布了以下内容,它的安装和使用真的和他说的一样简单(我已经尝试过了,我使用了Apacheq,它也非常容易安装和使用):

继波士顿和芬兰的演讲之后,dot.r是 很高兴宣布开源Stomp项目,可供选择 马上

从或下载 ,dot.r stomp程序允许您 将进度会话连接到任何其他应用程序或服务 连接到同一个message broker的

支持Stomp的开源免费消息代理包括:

保险丝

(http://fusesource.com/products/fuse-mq-enterprise/)[现为红帽公司所有的进步公司] Fuse MQ Enterprise是一个基于标准的开放源代码消息传递平台,部署占用空间非常小 费用加上高性能、可靠的消息传递 与任何开发环境一起使用提供了一个 支持无处不在的集成

ActiveMQ

apacheactivemq(tm)(http://activemq.apache.org/)是最受欢迎的 以及强大的开源消息传递和集成模式服务器 ActiveMQ速度很快,支持多种跨语言客户端和协议 具有易于使用的企业集成模式和许多高级功能 同时完全支持JMS1.1和J2EE1.4

Apache ActiveMQ是根据Apache 2.0许可证发布的

RabbitMQ

RabbitMQ是一个消息代理 接受和转发消息。您可以将其视为帖子 办公室:当你把邮件寄到邮箱时,你很肯定。 邮递员最终会将邮件发送给你的收件人 比喻RabbitMQ是一个邮箱、一个邮局和一个邮递员

RabbitMQ和邮局的主要区别在于 它不处理纸张,而是接受、存储和 转发数据消息的二进制blob


请随时将任何问题记录在 发布系统,并在 以便重新提交您将要添加的所有新功能

dot.r Stomp使用许可的麻省理工许可证 (http://en.wikipedia.org/wiki/MIT_License)

玩得开心,享受

朱利安


我们正在处理子事务和DO事务块。我已经阅读了关于事务的文档(ABL Essentials-管理事务),但我没有看到任何关于运行事务的异常的内容……它是与