Обсуждение: Using Postgres's NOTIFY/LISTEN
Hi all, I'm new here and was wondering if anyone could answer the following questions. I'm using Postgresql as the database for a Java application I am writing and would like to use the NOTIFY/LISTEN feature of Postgres. Can anyone tell if and how I can use these functions through the Postgres JDBC driver. Otherwise I'll have to think of another way of doing what I want to do :( -- regards, John Bosch Systems Engineer Canberra Deep Space Communications Complex jbosch@john.cdscc.nasa.gov I doubt, therefore I might be.
On Wed, 2 Dec 1998, John Bosch wrote: > Hi all, > > I'm new here and was wondering if anyone could answer the following > questions. > > I'm using Postgresql as the database for a Java application I am writing > > and would like to use the NOTIFY/LISTEN feature of Postgres. Can anyone > tell if and how I can use these functions through the Postgres JDBC > driver. It's one of those things I didn't include in the driver :-( > Otherwise I'll have to think of another way of doing what I want to do > :( Ok, you've got me thinking... It shouldn't be too difficult to add NOTIFY support. I'll have a look at it during this morning, and I'll get back to you. -- Peter T Mount peter@retep.org.uk Main Homepage: http://www.retep.org.uk PostgreSQL JDBC Faq: http://www.retep.org.uk/postgres Java PDF Generator: http://www.retep.org.uk/pdf
Peter T Mount <peter@retep.org.uk> writes: > On Wed, 2 Dec 1998, John Bosch wrote: >> I'm using Postgresql as the database for a Java application I am writing >> and would like to use the NOTIFY/LISTEN feature of Postgres. > Ok, you've got me thinking... It shouldn't be too difficult to add NOTIFY > support. I'll have a look at it during this morning, and I'll get back to > you. NOTIFY is no problem --- there's no particular reason not to issue NOTIFY as a plain SQL command. It's the LISTEN side of things that will require some driver support. Ideally, you'd like to be able to invoke an application-supplied callback routine asynchronously when a notify message arrives. I don't know enough about Java to know if it has a well-defined event loop mechanism, but if it does and your driver can cause events to be issued, you should be in fat city. You might care to look at libpgtcl's listen support in 6.4 --- it automatically issues LISTEN and UNLISTEN commands when the application registers or deregisters a callback request. regards, tom lane
On Wed, 2 Dec 1998, Tom Lane wrote: > Peter T Mount <peter@retep.org.uk> writes: > > On Wed, 2 Dec 1998, John Bosch wrote: > >> I'm using Postgresql as the database for a Java application I am writing > >> and would like to use the NOTIFY/LISTEN feature of Postgres. > > > Ok, you've got me thinking... It shouldn't be too difficult to add NOTIFY > > support. I'll have a look at it during this morning, and I'll get back to > > you. > > NOTIFY is no problem --- there's no particular reason not to issue > NOTIFY as a plain SQL command. It's the LISTEN side of things that > will require some driver support. > > Ideally, you'd like to be able to invoke an application-supplied > callback routine asynchronously when a notify message arrives. > I don't know enough about Java to know if it has a well-defined > event loop mechanism, but if it does and your driver can cause events > to be issued, you should be in fat city. The 1.1 AWT uses a listener model for it's events. I was thinking of creating an Interface that defines a method that is called when a notify occurs. Then, the client can create a class that implements this Interface, and simply calls an addListener() method in the driver. Then, any notify's received will cause the listener to be called. The client can then stop this with the removeListener() method. > You might care to look at libpgtcl's listen support in 6.4 --- it > automatically issues LISTEN and UNLISTEN commands when the application > registers or deregisters a callback request. I was thinking along those lines for the addListener() and removeListener() methods. So far, today has been hell at work (as usual, NT decides to commit suicide), so I didn't get round to looking at this. I'll do that shortly. -- Peter T Mount peter@retep.org.uk Main Homepage: http://www.retep.org.uk PostgreSQL JDBC Faq: http://www.retep.org.uk/postgres Java PDF Generator: http://www.retep.org.uk/pdf
At 20:49 +0200 on 2/12/98, Peter T Mount wrote: > > The 1.1 AWT uses a listener model for it's events. I was thinking of > creating an Interface that defines a method that is called when a notify > occurs. Then, the client can create a class that implements this > Interface, and simply calls an addListener() method in the driver. Then, > any notify's received will cause the listener to be called. Hmm, wouldn't using the AWT cause the driver to attempt to initialize the X windows or something? I know some servlet implementations (Netscape's, for one) do not support any AWT calls, assuming that when you work through the web, you don't have an X server, which is true. Can't it be done with threads, Object.notify() etc.? Herouth -- Herouth Maoz, Internet developer. Open University of Israel - Telem project http://telem.openu.ac.il/~herutma