2011-02-08 65 views
8

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

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

现在,我该怎么避免while(!exit){ //do stuff }这种循环呢?如何正确使用Java事件?

的直接的方式可以是:

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

但是,我要找如果java的三项赛可以给一个更好的解决方案。

UPDATE1:

这是我想实现:

  1. 我的应用程序是一个shell(如MongoDB的壳)尝试键值数据库。
  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三项赛的,我解决我的问题,你能告诉我,如何java eventi ng会来这里吗?我希望用户触发该事件。

+0

也许我误解你的问题,但不是这个到底是什么事件触发呢?你注册你的事件,在这里退出,当它发生时,你的代码被调用。所以你不需要写这样的循环。如果我在左外野,请纠正我。 – 2011-02-08 01:44:40

回答

2

我发现很难理解你想要做什么,但我有javaEventing的经验,我会尽力帮助你尽我所能。 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),它确实如此。

我希望这有助于 鲍勃

2

所有事件库都会向侦听器发送事件。除此之外,您需要实际创建事件。在这种情况下,您将需要代码来读取控制台并生成事件,您可能需要其他东西来“监听”数据库并从中生成事件(假设您正在查找异步数据库事件,如表或行更改)。

该代码仍然需要编写。

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

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