Thread: FW: LISTEN/NOTIFY support in JDBC driver?
Hey David, I've forwarded the thread from a few days ago regarding async client notifications using the PostgreSQL JDBC interface. Barry answered that it was possible, but I've been unable to get the code to work. Anyone got working LISTEN/NOTIFY code uding JDBC? Thanks for any help, Ben -----Original Message----- From: Ben Feinstein Sent: Monday, January 14, 2002 10:13 AM To: barry@xythos.com Cc: pgsql-jdbc@postgresql.org Subject: Re: [JDBC] LISTEN/NOTIFY support in JDBC driver? Hey all, I've tried selecting from the db in between checking for warnings, but still no luck? Does anyone have JDBC code that issues a LISTEN, then reaps notifications from the connection warnings? Much thanks!, Ben -----Original Message----- From: Barry Lind [mailto:barry@xythos.com] Sent: Friday, January 11, 2002 12:58 PM To: Ben Feinstein Cc: pgsql-jdbc@postgresql.org Subject: Re: LISTEN/NOTIFY support in JDBC driver? Ben, Since the jdbc driver doesn't poll the server, you would only see notifications after interacting with the database in someother way. Thus you will periodically need to issue queries to get the notifications to be read. (note I havn't tried this, but from looking at the code this should be the case). thanks, --Barry Benjamin.Feinstein@guardent.com wrote: > Hey ya'll, > > Thanks for the quick reply, Barry! I'm still having trouble getting the > notifications from the "SQLWarning Connection.getWarnings()" method. When I > tried to execute multiple LISTEN statments, I get warnings like: > > java.sql.SQLWarning: NOTICE: Async_Listen: We are already listening on > event > > However, I've never gotten a notification from the warnings. Yes, I am > sending the notifies from another connection to the same database. I've > attached my Java test program. Could you take a look and see what I'm doing > wrong? > > Cheers, > Ben > > -----Original Message----- > From: Barry Lind [mailto:barry@xythos.com] > Sent: Wednesday, January 09, 2002 10:10 PM > To: Ben Feinstein > Cc: pgsql-jdbc@postgresql.org > Subject: Re: LISTEN/NOTIFY support in JDBC driver? > > > The jdbc driver does support notifications, but in a rather strange way. > When the driver receives a notification is takes the notification > message and adds it to the list of warnings on the connection. So the > way you get notifications is to call getWarnings(). Given that there > isn't a concept like notifications in the jdbc API, this is perhaps the > best way these can be handled within jdbc, unless someone can suggest a > better approach. > > thanks, > --Barry > > Benjamin.Feinstein@guardent.com wrote: > > >>Hello ya'll, >> >>It appears that the current version of the JDBC interface for PostgreSQL >>does not implement asyncronous client notifications. I have been able to >>issue a NOTIFY statement through the JDBC driver, but I haven't found how >> > to > >>LISTEN for an client notification. Am I missing something, or does the >>JDBC-PgSQL interface not support LISTEN? Does anyone know of a patch to >> > the > >>JDBC-PgSQL interface that enables the LISTEN functionality? I've looked >> > back > >>through the list archives but was unable to find any threads in this >> > topic. > >>I'm running: >>PostgreSQL 7.1.3 >>jdbc7.1-1.2.jar >>Sun JDK 1.3.1_01 >> >>Thanks for any help, >>Ben >> >> >> >>>Ben Feinstein >>> Software Development Engineer, R & D >>> W: 678.585.7865 x6726 F: 770.645.8311 M: 678.772.4126 >>> 8302 Dunwoody Pl., Suite 320, Atlanta, GA 30350 www.guardent.com >>>_____________________________________________________ >>>G U A R D E N T >>> Enterprise Security and Privacy Programs >>> >>> >>> >>> >>---------------------------(end of broadcast)--------------------------- >>TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org >> >> >> > > ---------------------------(end of broadcast)--------------------------- TIP 2: you can get off all lists at once with the unregister command (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
Ben, I was looking into this a bit more tonight. I have gotten some notifications to come through. But not all. If you apply the following two line patch to current sources you will get notifications if (and only if) you run with autoCommit = true. If you set autoCommit to false the backend never sends the notifications to the client, and I have no idea why. I plan to follow up on that. Given that this only partly works, I don't want to commit this change into 7.2 as it isn't complete and 7.2 is too close to release. thanks, --Barry *** QueryExecutor.java Mon Jan 14 21:53:38 2002 --- QueryExecutor.java.orig Mon Jan 14 21:54:24 2002 *************** *** 70,77 **** switch (c) { case 'A': // Asynchronous Notify ! int pid = pg_stream.ReceiveIntegerR(4); ! connection.addWarning(pg_stream.ReceiveString(connection.getEncoding()) + " - " +pid ); break; case 'B': // Binary Data Transfer receiveTuple(true); --- 70,77 ---- switch (c) { case 'A': // Asynchronous Notify ! int pid = pg_stream.ReceiveInteger(4); ! String msg = pg_stream.ReceiveString(connection.getEncoding()); break; case 'B': // Binary Data Transfer receiveTuple(true); Benjamin.Feinstein@guardent.com wrote: > Hey David, > > I've forwarded the thread from a few days ago regarding async client > notifications using the PostgreSQL JDBC interface. Barry answered that it > was possible, but I've been unable to get the code to work. Anyone got > working LISTEN/NOTIFY code uding JDBC? > > Thanks for any help, > Ben > > -----Original Message----- > From: Ben Feinstein > Sent: Monday, January 14, 2002 10:13 AM > To: barry@xythos.com > Cc: pgsql-jdbc@postgresql.org > Subject: Re: [JDBC] LISTEN/NOTIFY support in JDBC driver? > > > Hey all, > > I've tried selecting from the db in between checking for warnings, but still > no luck? Does anyone have JDBC code that issues a LISTEN, then reaps > notifications from the connection warnings? > > Much thanks!, > Ben > > -----Original Message----- > From: Barry Lind [mailto:barry@xythos.com] > Sent: Friday, January 11, 2002 12:58 PM > To: Ben Feinstein > Cc: pgsql-jdbc@postgresql.org > Subject: Re: LISTEN/NOTIFY support in JDBC driver? > > > Ben, > > Since the jdbc driver doesn't poll the server, you would only see > notifications after interacting with the database in someother way. > Thus you will periodically need to issue queries to get the > notifications to be read. (note I havn't tried this, but from looking > at the code this should be the case). > > thanks, > --Barry > > > > Benjamin.Feinstein@guardent.com wrote: > > >>Hey ya'll, >> >>Thanks for the quick reply, Barry! I'm still having trouble getting the >>notifications from the "SQLWarning Connection.getWarnings()" method. When >> > I > >>tried to execute multiple LISTEN statments, I get warnings like: >> >>java.sql.SQLWarning: NOTICE: Async_Listen: We are already listening on >>event >> >>However, I've never gotten a notification from the warnings. Yes, I am >>sending the notifies from another connection to the same database. I've >>attached my Java test program. Could you take a look and see what I'm >> > doing > >>wrong? >> >>Cheers, >>Ben >> >>-----Original Message----- >>From: Barry Lind [mailto:barry@xythos.com] >>Sent: Wednesday, January 09, 2002 10:10 PM >>To: Ben Feinstein >>Cc: pgsql-jdbc@postgresql.org >>Subject: Re: LISTEN/NOTIFY support in JDBC driver? >> >> >>The jdbc driver does support notifications, but in a rather strange way. >> When the driver receives a notification is takes the notification >>message and adds it to the list of warnings on the connection. So the >>way you get notifications is to call getWarnings(). Given that there >>isn't a concept like notifications in the jdbc API, this is perhaps the >>best way these can be handled within jdbc, unless someone can suggest a >>better approach. >> >>thanks, >>--Barry >> >>Benjamin.Feinstein@guardent.com wrote: >> >> >> >>>Hello ya'll, >>> >>>It appears that the current version of the JDBC interface for PostgreSQL >>>does not implement asyncronous client notifications. I have been able to >>>issue a NOTIFY statement through the JDBC driver, but I haven't found how >>> >>> >>to >> >> >>>LISTEN for an client notification. Am I missing something, or does the >>>JDBC-PgSQL interface not support LISTEN? Does anyone know of a patch to >>> >>> >>the >> >> >>>JDBC-PgSQL interface that enables the LISTEN functionality? I've looked >>> >>> >>back >> >> >>>through the list archives but was unable to find any threads in this >>> >>> >>topic. >> >> >>>I'm running: >>>PostgreSQL 7.1.3 >>>jdbc7.1-1.2.jar >>>Sun JDK 1.3.1_01 >>> >>>Thanks for any help, >>>Ben >>> >>> >>> >>> >>>>Ben Feinstein >>>>Software Development Engineer, R & D >>>>W: 678.585.7865 x6726 F: 770.645.8311 M: 678.772.4126 >>>>8302 Dunwoody Pl., Suite 320, Atlanta, GA 30350 www.guardent.com >>>>_____________________________________________________ >>>>G U A R D E N T >>>>Enterprise Security and Privacy Programs >>>> >>>> >>>> >>>> >>>> >>>---------------------------(end of broadcast)--------------------------- >>>TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org >>> >>> >>> >>> >> > > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) > > ---------------------------(end of broadcast)--------------------------- > TIP 3: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly > >
Barry, do you have a patch you want to apply for 7.3? --------------------------------------------------------------------------- Barry Lind wrote: > Ben, > > I was looking into this a bit more tonight. I have gotten some > notifications to come through. But not all. > > If you apply the following two line patch to current sources you will > get notifications if (and only if) you run with autoCommit = true. If > you set autoCommit to false the backend never sends the notifications to > the client, and I have no idea why. I plan to follow up on that. Given > that this only partly works, I don't want to commit this change into 7.2 > as it isn't complete and 7.2 is too close to release. > > thanks, > --Barry > > > *** QueryExecutor.java Mon Jan 14 21:53:38 2002 > --- QueryExecutor.java.orig Mon Jan 14 21:54:24 2002 > *************** > *** 70,77 **** > switch (c) > { > case 'A': // Asynchronous Notify > ! int pid = > pg_stream.ReceiveIntegerR(4); > ! > connection.addWarning(pg_stream.ReceiveString(connection.getEncoding()) > + " - " +pid ); > break; > case 'B': // Binary Data Transfer > receiveTuple(true); > --- 70,77 ---- > > switch (c) > > { > > case 'A': // Asynchronous Notify > ! > int pid = pg_stream.ReceiveInteger(4); > ! > String msg = pg_stream.ReceiveString(connection.getEncoding()); > > break; > > case 'B': // Binary Data Transfer > > receiveTuple(true); > > > Benjamin.Feinstein@guardent.com wrote: > > > Hey David, > > > > I've forwarded the thread from a few days ago regarding async client > > notifications using the PostgreSQL JDBC interface. Barry answered that it > > was possible, but I've been unable to get the code to work. Anyone got > > working LISTEN/NOTIFY code uding JDBC? > > > > Thanks for any help, > > Ben > > > > -----Original Message----- > > From: Ben Feinstein > > Sent: Monday, January 14, 2002 10:13 AM > > To: barry@xythos.com > > Cc: pgsql-jdbc@postgresql.org > > Subject: Re: [JDBC] LISTEN/NOTIFY support in JDBC driver? > > > > > > Hey all, > > > > I've tried selecting from the db in between checking for warnings, but still > > no luck? Does anyone have JDBC code that issues a LISTEN, then reaps > > notifications from the connection warnings? > > > > Much thanks!, > > Ben > > > > -----Original Message----- > > From: Barry Lind [mailto:barry@xythos.com] > > Sent: Friday, January 11, 2002 12:58 PM > > To: Ben Feinstein > > Cc: pgsql-jdbc@postgresql.org > > Subject: Re: LISTEN/NOTIFY support in JDBC driver? > > > > > > Ben, > > > > Since the jdbc driver doesn't poll the server, you would only see > > notifications after interacting with the database in someother way. > > Thus you will periodically need to issue queries to get the > > notifications to be read. (note I havn't tried this, but from looking > > at the code this should be the case). > > > > thanks, > > --Barry > > > > > > > > Benjamin.Feinstein@guardent.com wrote: > > > > > >>Hey ya'll, > >> > >>Thanks for the quick reply, Barry! I'm still having trouble getting the > >>notifications from the "SQLWarning Connection.getWarnings()" method. When > >> > > I > > > >>tried to execute multiple LISTEN statments, I get warnings like: > >> > >>java.sql.SQLWarning: NOTICE: Async_Listen: We are already listening on > >>event > >> > >>However, I've never gotten a notification from the warnings. Yes, I am > >>sending the notifies from another connection to the same database. I've > >>attached my Java test program. Could you take a look and see what I'm > >> > > doing > > > >>wrong? > >> > >>Cheers, > >>Ben > >> > >>-----Original Message----- > >>From: Barry Lind [mailto:barry@xythos.com] > >>Sent: Wednesday, January 09, 2002 10:10 PM > >>To: Ben Feinstein > >>Cc: pgsql-jdbc@postgresql.org > >>Subject: Re: LISTEN/NOTIFY support in JDBC driver? > >> > >> > >>The jdbc driver does support notifications, but in a rather strange way. > >> When the driver receives a notification is takes the notification > >>message and adds it to the list of warnings on the connection. So the > >>way you get notifications is to call getWarnings(). Given that there > >>isn't a concept like notifications in the jdbc API, this is perhaps the > >>best way these can be handled within jdbc, unless someone can suggest a > >>better approach. > >> > >>thanks, > >>--Barry > >> > >>Benjamin.Feinstein@guardent.com wrote: > >> > >> > >> > >>>Hello ya'll, > >>> > >>>It appears that the current version of the JDBC interface for PostgreSQL > >>>does not implement asyncronous client notifications. I have been able to > >>>issue a NOTIFY statement through the JDBC driver, but I haven't found how > >>> > >>> > >>to > >> > >> > >>>LISTEN for an client notification. Am I missing something, or does the > >>>JDBC-PgSQL interface not support LISTEN? Does anyone know of a patch to > >>> > >>> > >>the > >> > >> > >>>JDBC-PgSQL interface that enables the LISTEN functionality? I've looked > >>> > >>> > >>back > >> > >> > >>>through the list archives but was unable to find any threads in this > >>> > >>> > >>topic. > >> > >> > >>>I'm running: > >>>PostgreSQL 7.1.3 > >>>jdbc7.1-1.2.jar > >>>Sun JDK 1.3.1_01 > >>> > >>>Thanks for any help, > >>>Ben > >>> > >>> > >>> > >>> > >>>>Ben Feinstein > >>>>Software Development Engineer, R & D > >>>>W: 678.585.7865 x6726 F: 770.645.8311 M: 678.772.4126 > >>>>8302 Dunwoody Pl., Suite 320, Atlanta, GA 30350 www.guardent.com > >>>>_____________________________________________________ > >>>>G U A R D E N T > >>>>Enterprise Security and Privacy Programs > >>>> > >>>> > >>>> > >>>> > >>>> > >>>---------------------------(end of broadcast)--------------------------- > >>>TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org > >>> > >>> > >>> > >>> > >> > > > > > > ---------------------------(end of broadcast)--------------------------- > > TIP 2: you can get off all lists at once with the unregister command > > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) > > > > ---------------------------(end of broadcast)--------------------------- > > TIP 3: if posting/reading through Usenet, please send an appropriate > > subscribe-nomail command to majordomo@postgresql.org so that your > > message can get through to the mailing list cleanly > > > > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
This is now fixed in current sources. See org.postgresql.PGConnection.getNotifications(). --Barry Barry Lind wrote: > Ben, > > I was looking into this a bit more tonight. I have gotten some > notifications to come through. But not all. > > If you apply the following two line patch to current sources you will > get notifications if (and only if) you run with autoCommit = true. If > you set autoCommit to false the backend never sends the notifications > to the client, and I have no idea why. I plan to follow up on that. > Given that this only partly works, I don't want to commit this change > into 7.2 as it isn't complete and 7.2 is too close to release. > > thanks, > --Barry > > > *** QueryExecutor.java Mon Jan 14 21:53:38 2002 > --- QueryExecutor.java.orig Mon Jan 14 21:54:24 2002 > *************** > *** 70,77 **** > switch (c) > { > case 'A': // Asynchronous > Notify > ! int pid = > pg_stream.ReceiveIntegerR(4); > ! > connection.addWarning(pg_stream.ReceiveString(connection.getEncoding()) > + " - " +pid ); > break; > case 'B': // Binary Data > Transfer > receiveTuple(true); > --- 70,77 ---- > switch (c) > { > case 'A': // Asynchronous Notify > ! int pid = pg_stream.ReceiveInteger(4); > ! String msg = > pg_stream.ReceiveString(connection.getEncoding()); > break; > case 'B': // Binary Data Transfer > receiveTuple(true); > > > Benjamin.Feinstein@guardent.com wrote: > >> Hey David, >> >> I've forwarded the thread from a few days ago regarding async client >> notifications using the PostgreSQL JDBC interface. Barry answered >> that it >> was possible, but I've been unable to get the code to work. Anyone got >> working LISTEN/NOTIFY code uding JDBC? >> >> Thanks for any help, >> Ben >> >> -----Original Message----- >> From: Ben Feinstein Sent: Monday, January 14, 2002 10:13 AM >> To: barry@xythos.com >> Cc: pgsql-jdbc@postgresql.org >> Subject: Re: [JDBC] LISTEN/NOTIFY support in JDBC driver? >> >> >> Hey all, >> >> I've tried selecting from the db in between checking for warnings, >> but still >> no luck? Does anyone have JDBC code that issues a LISTEN, then reaps >> notifications from the connection warnings? >> >> Much thanks!, >> Ben >> >> -----Original Message----- >> From: Barry Lind [mailto:barry@xythos.com] >> Sent: Friday, January 11, 2002 12:58 PM >> To: Ben Feinstein >> Cc: pgsql-jdbc@postgresql.org >> Subject: Re: LISTEN/NOTIFY support in JDBC driver? >> >> >> Ben, >> >> Since the jdbc driver doesn't poll the server, you would only see >> notifications after interacting with the database in someother way. >> Thus you will periodically need to issue queries to get the >> notifications to be read. (note I havn't tried this, but from >> looking at the code this should be the case). >> >> thanks, >> --Barry >> >> >> >> Benjamin.Feinstein@guardent.com wrote: >> >> >>> Hey ya'll, >>> >>> Thanks for the quick reply, Barry! I'm still having trouble getting >>> the >>> notifications from the "SQLWarning Connection.getWarnings()" >>> method. When >>> >> I >> >>> tried to execute multiple LISTEN statments, I get warnings like: >>> >>> java.sql.SQLWarning: NOTICE: Async_Listen: We are already listening on >>> event >>> >>> However, I've never gotten a notification from the warnings. Yes, I am >>> sending the notifies from another connection to the same database. I've >>> attached my Java test program. Could you take a look and see what I'm >>> >> doing >> >>> wrong? >>> >>> Cheers, >>> Ben >>> >>> -----Original Message----- >>> From: Barry Lind [mailto:barry@xythos.com] >>> Sent: Wednesday, January 09, 2002 10:10 PM >>> To: Ben Feinstein >>> Cc: pgsql-jdbc@postgresql.org >>> Subject: Re: LISTEN/NOTIFY support in JDBC driver? >>> >>> >>> The jdbc driver does support notifications, but in a rather strange >>> way. When the driver receives a notification is takes the >>> notification message and adds it to the list of warnings on the >>> connection. So the way you get notifications is to call >>> getWarnings(). Given that there isn't a concept like notifications >>> in the jdbc API, this is perhaps the best way these can be handled >>> within jdbc, unless someone can suggest a better approach. >>> >>> thanks, >>> --Barry >>> >>> Benjamin.Feinstein@guardent.com wrote: >>> >>> >>> >>>> Hello ya'll, >>>> >>>> It appears that the current version of the JDBC interface for >>>> PostgreSQL >>>> does not implement asyncronous client notifications. I have been >>>> able to >>>> issue a NOTIFY statement through the JDBC driver, but I haven't >>>> found how >>>> >>>> >>> to >>> >>> >>>> LISTEN for an client notification. Am I missing something, or does the >>>> JDBC-PgSQL interface not support LISTEN? Does anyone know of a >>>> patch to >>>> >>>> >>> the >>> >>> >>>> JDBC-PgSQL interface that enables the LISTEN functionality? I've >>>> looked >>>> >>>> >>> back >>> >>> >>>> through the list archives but was unable to find any threads in this >>>> >>>> >>> topic. >>> >>> >>>> I'm running: >>>> PostgreSQL 7.1.3 >>>> jdbc7.1-1.2.jar >>>> Sun JDK 1.3.1_01 >>>> >>>> Thanks for any help, >>>> Ben >>>> >>>> >>>> >>>> >>>>> Ben Feinstein >>>>> Software Development Engineer, R & D >>>>> W: 678.585.7865 x6726 F: 770.645.8311 M: 678.772.4126 >>>>> 8302 Dunwoody Pl., Suite 320, Atlanta, GA 30350 www.guardent.com >>>>> _____________________________________________________ >>>>> G U A R D E N T >>>>> Enterprise Security and Privacy Programs >>>>> >>>>> >>>>> >>>>> >>>>> >>>> ---------------------------(end of >>>> broadcast)--------------------------- >>>> TIP 1: subscribe and unsubscribe commands go to >>>> majordomo@postgresql.org >>>> >>>> >>>> >>>> >>> >> >> >> ---------------------------(end of broadcast)--------------------------- >> TIP 2: you can get off all lists at once with the unregister command >> (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) >> >> ---------------------------(end of broadcast)--------------------------- >> TIP 3: if posting/reading through Usenet, please send an appropriate >> subscribe-nomail command to majordomo@postgresql.org so that your >> message can get through to the mailing list cleanly >> >> > > > > ---------------------------(end of broadcast)--------------------------- > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org > >