使用Java的自定义事件侦听器

使用Java的自定义事件侦听器,java,glassfish,blocking,blockingqueue,custom-events,Java,Glassfish,Blocking,Blockingqueue,Custom Events,我创建了一个应用程序,用于侦听来自AS400数据队列的输入消息。 该应用程序正在Java应用程序服务器Glassfish中运行 我正在使用jt400库来连接和读取数据队列。 从数据队列读取与从套接字读取非常相似。您调用read,它会一直阻塞,直到从连接的另一端写入内容为止。 API提供了一个重载读取方法,允许程序员设置超时时间 由于read是一个阻塞调用,必须从我的应用程序中调用,因此我必须找到一种方法,使它在应用程序启动时启动,并在Glassfish启动时保持运行 我创建了一个EJB,添加了@

我创建了一个应用程序,用于侦听来自AS400数据队列的输入消息。 该应用程序正在Java应用程序服务器Glassfish中运行

我正在使用jt400库来连接和读取数据队列。 从数据队列读取与从套接字读取非常相似。您调用read,它会一直阻塞,直到从连接的另一端写入内容为止。 API提供了一个重载读取方法,允许程序员设置超时时间

由于read是一个阻塞调用,必须从我的应用程序中调用,因此我必须找到一种方法,使它在应用程序启动时启动,并在Glassfish启动时保持运行

我创建了一个EJB,添加了@Startup注释并设置了@Scheduled方法。 在该方法中,我在while循环中调用read并超时,允许我检查类的属性并可能将其关闭

我想知道是否有更好的方法来实现这样的东西。我不是专门谈论连接到AS400数据队列。我想到的是在Java应用服务器中运行的事件机制,您可以在其中钩住自定义事件消息提供程序

是否可以将其定义为Glassfish上的自定义资源(如JDBC资源)?
J2EE规范是否提供了一些构建的机制?

看看CDI事件系统,不确定这是否是您真正想要的。它允许您定义自定义事件处理程序以及在服务器中触发自定义事件。或者您是在寻找观察服务器/容器事件的侦听器吗?我正在尝试找出实现在单独线程中触发事件/触发代码的最佳方法。当代码从阻塞调用返回时,会触发该事件。正如我所说的,这在CDI事件系统中可能是可行的。您可以将观察者定义为CDIBean或EJB,并手动触发事件。然后你必须决定是立即通知观察者,还是在交易结束时通知观察者(如果有)。我认为使用event这个词会造成混乱。为了触发事件,必须在后台运行一些代码,以侦听数据队列或我需要侦听的任何内容。我对实现这一点的最佳方式感兴趣。启动服务器线程监听某些内容的最佳方式是什么?我最初的方法是使用计时器。