Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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
Akka持久性自定义java插件_Java_Akka_Akka Persistence - Fatal编程技术网

Akka持久性自定义java插件

Akka持久性自定义java插件,java,akka,akka-persistence,Java,Akka,Akka Persistence,我目前正在为AkkaSyncWriteJournalAPI编写自己的插件,以实现与HSQLDB的连接 问题是我不了解方法doAsyncReplayMessages的要求。它声明它需要返回未来,并且所有消息都应该由replayCallback调用 假设我有一个返回消息列表的查询:list messages。有人能提供一个简单的例子(带说明)说明如何使用replayCallback,以及Future通过使用该列表正确实施该方法吗?replayCallback和Future如何协同工作,方法doAsy

我目前正在为
Akka
SyncWriteJournal
API编写自己的插件,以实现与
HSQLDB
的连接

问题是我不了解方法
doAsyncReplayMessages
的要求。它声明它需要返回未来,并且所有消息都应该由
replayCallback
调用

假设我有一个返回消息列表的查询:
list messages
。有人能提供一个简单的例子(带说明)说明如何使用
replayCallback
,以及
Future
通过使用该列表正确实施该方法吗?
replayCallback
Future
如何协同工作,方法
doAsyncReplayMessages
应该返回什么

谢谢

-编辑-

在一些评论的帮助下,我制定了一个尚未完成的实施方案,但包含了提议的想法:

public Future<Void> doAsyncReplayMessages(final String persistenceId, long fromSequenceNr, long toSequenceNr, long max,
        final Procedure<PersistentRepr> replayCallback) {
    final ExecutionContext ec = context().system().dispatcher();

    final Future<Void> future = Futures.future(new Callable<Void>() {
        @Override
        public Void call() throws Exception {
            final List<Message> messages = getMessages();
            for (int i = 0; i < feedbackList.size(); i++) {
                replayCallback.apply(
                        new PersistentImpl(messages.get(i), i, persistenceId, false, null, null));
            }
            return null;
        }
    }, ec);

    return future;
}

您可以在将来简单地包装阻塞操作,例如:
Future{fetchStuff()}


有关同步日志的完整实现,请参阅。

很抱歉,我无法阅读scala(我的实现是Java)。您能详细说明一下吗?以下是使用Java中的Futures的文档:您可以调用Futures.future(callable,executionContext),在可调用程序获取列表的地方,对每个列表调用replyCallback,然后完成。该可调用项的返回类型必须为Void,才能与预期的返回类型Future匹配。您成功了吗?我想找到一个定制的JavaAkka持久性插件示例
[ERROR] [08/28/2014 12:31:19.582] [akkaSystem-akka.actor.default-dispatcher-7] [akka://akkaSystem/system/journal] null
java.lang.NullPointerException
    at akka.persistence.journal.japi.AsyncRecovery.asyncReadHighestSequenceNr(AsyncRecovery.scala:26)
    at akka.persistence.journal.SyncWriteJournal$$anonfun$receive$1.applyOrElse(SyncWriteJournal.scala:53)
    at akka.actor.Actor$class.aroundReceive(Actor.scala:465)
    at akka.persistence.journal.japi.SyncWriteJournal.aroundReceive(SyncWriteJournal.scala:16)
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
    at akka.actor.ActorCell.invoke(ActorCell.scala:487)
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238)
    at akka.dispatch.Mailbox.run(Mailbox.scala:220)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)