Java和事件驱动编程

zen*_*ngr 8 java event-driven-design

我正在使用javaeventing编写一个偶数驱动的shell来访问数据库.所以,我的用例是:

  1. 在命令行中打开shell.
  2. 现在,shell连接到数据库并侦听进来的命令.
  3. 当它获得一个命令时,它会执行它并返回所需的输出.

现在,我怎么能避免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 ),它正是这样做的。

我希望这有帮助,鲍勃