首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java和事件驱动编程

Java和事件驱动编程
EN

Stack Overflow用户
提问于 2011-02-08 01:31:23
回答 2查看 11.1K关注 0票数 8

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

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

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

直接前进的方式可以是:

代码语言:javascript
复制
while(!exit)
{
   exit = myClass.execute("command"); //when command is exit, return true.
}

但是,我想看看java事件是否能给出更好的解决方案。

Update1:

以下是我正在努力执行的内容:

1我的应用程序是一个shell (类似于mongodb ),用于尝试键值数据库。

2简单代码:

代码语言:javascript
复制
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事件将如何出现在这里?,我希望用户触发事件。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-08 16:16:51

我发现很难理解你到底想做什么,但是我有javaEventing的经验,我会尽我所能帮助你。威尔·哈通是对的,你需要在某个地方创造你的事件。因此,如果我正确地理解了您的意思,您希望从命令行启动java-app,然后您希望连接到一个数据库,并监视要插入的某个命令,当插入时,您希望创建一个事件。这是正确的吗?

在这种情况下,您可能需要对数据库执行一些轮询,因为当某些条件为真时,普通数据库无法通知应用程序。这意味着您可能需要while{}子句,在该子句中对数据库执行查询,等待包含要查找的命令的结果集。找到后,您可以创建这样的事件:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-02-08 02:33:08

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

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

这段代码还需要写。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4928713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档