【问题标题】:Java and event driven programmingJava 和事件驱动编程
【发布时间】:2011-06-23 03:47:24
【问题描述】:

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

  1. 在命令行中打开 shell。
  2. 现在,shell 连接到数据库并监听传入的命令。
  3. 当它收到一个命令时,它会执行它并返回所需的输出。

现在,我怎样才能避免while(!exit){ //do stuff } 在这里出现循环?如何正确使用 Java eventing?

直接的方式可以是:

while(!exit)
{
   exit = myClass.execute("command"); //when command is exit, return true.
}

但是,我正在寻找 java eventing 是否可以提供更好的解决方案。

更新1:

这是我想要实现的:

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
}

现在,在这里我没有看到 java eventing 的使用,我解决了我的问题,你能告诉我,java eventing 将如何出现在这里?我希望用户触发事件。

【问题讨论】:

  • 也许我误解了你的问题,但这不正是 eventing 的用途吗?你注册你的事件,在这里退出,当它发生时,你的代码被调用。因此,您应该不需要编写这样的循环。如果我不在左侧字段中,请纠正我。
  • 是的,你是对的。但我无法弄清楚,如何实现这一目标?

标签: java event-driven-design


【解决方案1】:

我发现很难准确理解您要做什么,但我有 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

现在,侦听您的事件(ReceivedCommandEvent)的任何其他线程都将接收该事件,并可以从事件负载中检索命令。

现在的问题是,你为什么要使用数据库来传递命令呢?您只是使用它在应用程序之间进行通信吗?如果您的其他应用程序也是用 Java 编写的,您可以考虑使用分布式事件,允许一个 Java 应用程序向网络中其他机器上的其他 JVM 中运行的 Java 应用程序发送事件。您可能想查看 JED (http://code.google.com/p/jed-java-event-distribution),它就是这样做的。

我希望这会有所帮助, 鲍勃

【讨论】:

  • 我认为他想要的是一个事件循环。因此,在您的示例中,您在 pollDataBaseForCommand 之后再添加一行,这是一个简单的解决方案。
【解决方案2】:

事件库所做的只是将事件分派给侦听器。除此之外,您还需要一些东西来实际创建事件。

在这种情况下,您需要代码来读取控制台并生成事件,您可能需要其他东西来“侦听”数据库并从中生成事件(假设您正在寻找异步数据库事件,例如表或行更改)。

该代码仍然需要编写。

除非该框架为您提供此类实用程序类,否则您必须自己编写,并且这些类可能就像您描述的那样。

但是这些类都在系统的边缘,驱动着数据。您的其余代码都可以完全基于事件。

【讨论】:

    猜你喜欢
    • 2011-04-23
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 2011-06-26
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    相关资源
    最近更新 更多