zen*_*ngr 8 java event-driven-design
我正在使用javaeventing编写一个偶数驱动的shell来访问数据库.所以,我的用例是:
现在,我怎么能避免while(!exit){ //do stuff }这种循环呢?如何正确使用Java事件?
直截了当的方式可以是:
while(!exit)
{
exit = myClass.execute("command"); //when command is exit, return true.
}
Run Code Online (Sandbox Code Playgroud)
但是,我正在寻找java事件是否可以提供更好的解决方案.
UPDATE1:
这是我想要实现的:
1我的应用程序是一个shell(如mongodb shell)来试用一个键值数据库.
2简单的代码:
init(); //Initialize the connection with database
while(!exit)
{
//exit = myClass.execute("put(5)"); //This returns false
exit = myClass.execute("exit"); //returns true, i.e. the user wants to exit the shell
}
Run Code Online (Sandbox Code Playgroud)
现在,在这里我没有看到java事件的使用,我解决了我的问题,请你告诉我,如何在这里看到java事件?我希望用户触发事件.
小智 2
我发现很难准确理解您想要做什么,但我有 javaEventing 的经验,并且我会尽力帮助您。威尔·哈同(Will Hartung)是对的,你需要在某个地方创建你的活动。因此,如果我理解正确的话,您希望从命令行启动 java-app,然后您想要连接到数据库并监视要插入的某些命令,并且在插入时创建一个事件。它是否正确?
在这种情况下,您可能需要对数据库进行一些轮询,因为普通数据库无法在某些条件成立时通知您的应用程序。这意味着您可能需要 while{} 子句,在其中对数据库执行查询,等待包含您正在查找的命令的结果集。找到后,您可以创建一个如下事件:
Class ReceivedCommandEvent extends EventManager.EventObject {} // define your event
while (command==null) {
command = pollDataBaseForCommand(); //poll your databae for commands
waitForSomePeriod();
}
EventManager.triggerEvent(this, new ReceivedCommandEvent(command)); //trigger your event, with the command as payload
Run Code Online (Sandbox Code Playgroud)
现在,侦听您的事件(ReceivedCommandEvent)的任何其他线程都将接收该事件,并可以从事件负载中检索该命令。
现在的问题是,为什么要使用数据库来传达命令?您只是用它来在应用程序之间进行通信吗?如果您的其他应用程序也是用 Java 编写的,您可以考虑使用分布式事件,允许一个 Java 应用程序将事件发送到网络中其他计算机上的其他 JVM 中运行的 Java 应用程序。您可能想看看 JED ( http://code.google.com/p/jed-java-event-distribution ),它正是这样做的。
我希望这有帮助,鲍勃