问题标签 [prevayler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1864 浏览

java - Prevayler 的同步策略是什么?

Prevayler 保证所有写入(通过其事务)都是同步的。但是阅读呢?

如果不使用显式同步(在用户代码中),脏读是可能的吗?

如果业务对象被解读为:

?

如果是这样,哪些同步策略对用户代码有好处?

(考虑一个业务对象 A 包含业务对象 Bs 的集合),

  • 使用同步集合(A 内的 B),例如来自 java.util.concurrent 包?
  • 同步集合读取外部事务与集合写入事务内部,例如在读写周围使用“同步(集合)”代码?
0 投票
2 回答
355 浏览

prevayler - 在 Prevayler 命令中处理复杂对象

Prevayler 发行版中包含的演示展示了如何将一对字符串(或类似的简单内容)传递到命令构造函数中,以创建或更新对象。问题是我有一个名为 MyObject 的对象,它有很多字段。如果我必须手动将它们全部传递到 CreateMyObject 命令中,那将是一件痛苦的事情。

所以我想到的另一种选择是将我的业务对象本身传递给命令,但要挂在它的克隆上(请记住,我不能将 BO 直接存储在命令中)。当然,执行此命令后,我需要确保处理掉我传入的原始副本。

Prevayler wiki说:

事务不能携带对业务对象的直接对象引用(指针)。这已被称为洗礼问题,因为它是一个常见的初学者陷阱。直接对象引用不起作用,因为一旦事务被序列化到日志然后反序列化以执行,它的对象引用不再引用预期的对象 - 他们可能首先引用的任何对象都将被序列化复制过程!因此,事务必须为它想要引用的任何对象携带某种字符串或数字标识符,并且它必须在执行时查找对象。

我认为通过克隆传入的对象,我将解决“直接对象指针”问题,但我仍然不知道这是否是个好主意......

0 投票
2 回答
423 浏览

node.js - 是否有人已经将 Prevalence/Prevaylor 实现/移植到 Javascript/NodeJS?

是否存在 Prevalence System Design Pattern 的 SSJS 实现Prevaylor在 Java 中实现的那样,但适用于NodeJS

0 投票
1 回答
112 浏览

dart - 如何使用 dartvm 实现应用流行?

在服务器上使用 dartvm 实现应用程序流行(想想 Prevayler)有哪些选择?
我正在寻找一个纯 Dart 解决方案(没有 Java/Prevayler 的进程间套接字)

任何现有的代码或项目?

0 投票
2 回答
663 浏览

java - Prevayler 序列化优化

我正在与 Prevayler 合作,进行一些非常简单的压力测试。

在我的程序中,我可以在 500 毫秒内获得 10,000 次读取,但写入或更改一个对象需要 23 毫秒。(我没有这台电脑的详细规格。没什么令人印象深刻的。双核 3.0ghz,7200rpm HD,可能还有 1333mhz ddr3 内存。)

序列化似乎是瓶颈。

可以做些什么来提高写入/更改性能?

JProfiler 我在 JProfiler 中运行程序(将 10,000 个用户对象写入磁盘。),它运行了 250 秒,其中 99.6% 用于运行 org.implementation.PrevaylerImpl.execute

更新 我切换到 XStreamSerializer,它将写入速度提高到每次写入 21 毫秒,并减少了存储

3555KB 日志/10,000 个对象 -> 2421KB

350KB 快照/10,000 个对象 -> 313KB

我希望看到 1000+ 次写入/秒。

0 投票
2 回答
133 浏览

java - Java 序列化 Clojure 数据结构的大小

我在 github 项目 prevayler-clj 上打开了这个问题

https://github.com/klauswuestefeld/prevayler-clj/issues/1

因为像这样的 1M 短向量,[:a1 1]形成了 prevayler 的状态,在使用 Java writeObject 逐个序列化时会产生 1GB 的文件大小。

是否可以?每个 PersistentVector 大约 1kB?进一步的研究表明,相同数量的向量可以在一个 80MB 的文件中序列化。那么,prevayler 序列化出了什么问题呢?我在这些测试中做错了什么吗?请参阅 github 问题以获取我的测试代码摘录。

0 投票
1 回答
101 浏览

java - Prevayler 类型不是通用的;它不能用参数参数化

我一直在阅读有关容错的检查点技术。所以,我正在使用prevaylerjava 库进行检查点。现在,我有一个错误显示类型Prevayler不是通用的;它不能用 arguments 参数化<P>。你能给我这个错误的指导吗?

这是我的代码:

0 投票
0 回答
236 浏览

android - 如何在 OpenJDK (Android 7+) 中反序列化已在 Apache Harmony (Android *-6) 中序列化的对象?

我的应用程序使用http://prevayler.org/进行持久化,搭载 Java 对象序列化。升级到 Android 7.0 (Nougat) 后,用户无法打开他们的数据,因为反序列化不再起作用:

在反序列化枚举时,OpenJDK 例程读取“71”的意外字节值并抛出异常,从源代码中可以看出:http: //grepcode.com/file/repository.grepcode.com/java/ root/jdk/openjdk/8u40-b25/java/io/ObjectInputStream.java#ObjectInputStream.readString%28boolean%29

我有以下想法:

  1. 设置一个迁移服务器,它将同时运行 Harmony 和 OpenJDK 进程,从而执行数据迁移。
  2. 破解二进制格式并修复枚举序列化(假设这是唯一一个问题,我对此表示怀疑)
  3. 使用 AspectJ 破解反序列化

所有这些选择似乎都是矫枉过正或不令人满意。在我开始破解二进制文件之前,也许有人对如何使用新的运行时反序列化旧数据有更好的了解?谢谢你。