Re: LISTEN/NOTIFY with JDBC - Mailing list pgsql-general

From Glenn Sullivan
Subject Re: LISTEN/NOTIFY with JDBC
Date
Msg-id 40A23E7C.2010206@varianinc.com
Whole thread Raw
In response to LISTEN/NOTIFY with JDBC  (Glenn Sullivan <glenn.sullivan@varianinc.com>)
Responses Re: LISTEN/NOTIFY with JDBC
Re: LISTEN/NOTIFY with JDBC
List pgsql-general
Kris,

Thanks for the response.  I have been using Sun's JDBC.
Do I take it that I need to create and use the Postgres
JDBC to get the ability to do NOTIFY/LISTEN?

Glenn


Kris Jurka wrote:
>
> On Tue, 11 May 2004, Glenn Sullivan wrote:
>
>
>>Hi,
>>
>>I have been trying to get LISTEN/NOTIFY working in with JDBC.  I cannot seem
>>to get notified.  I looked in the e-mail archive and saw a lot of similiar
>>questions a couple of years ago.  I never could find any answers in the
>>e-mail nor in the documentation.  Perhaps I just missed it.
>>
>>I have tried the following code snipit:
>>
>>Connection db = DriverManager.getConnection(url, user, passwd);
>>Statement sql = db.createStatement();
>>
>>sql.execute("LISTEN mytest");
>>db.clearWarnings();
>>
>>for(int i=0; i < 10 ; i ++) {
>>     Thread.sleep(3000);
>>     SQLWarning warn = db.getWarnings();
>>     if(warn != null)
>>         System.out.println("warn: " + warn.getMessage());
>>     else
>>         System.out.println("warning null");
>>}
>>
>>
>>During the running of this loop, I run "psql" on the same database
>>and manually execute "NOTIFY mytest;".
>>
>
>
> Notifications don't come back as warning's, but are implemented using pg
> specific java code.  Further, there is no asynchronous notification
> support in the JDBC driver, so you can't just wait for them to show up.
> Instead you must send a backend command every so often to see if a
> notification is ready.
>
> Code more like the below should work:
>
> import org.postgresql.PGConnection;
> import org.postgresql.PGNotification;
>
> Connection conn = ... // get connection somehow
> Statement stmt = conn.createStatement();
> while (1) {
>     ResultSet rs = stmt.executeQuery("SELECT 1");
>     rs.close();
>     PGConnection pgconn = (PGConnection)conn;
>     PGNotification notif[] = conn.getNotifications();
>     for (int i=0; i<notif.length; i++) {
>         System.out.println(notif[i].getName());
>     }
>     Thread.sleep(3000);
> }
>
> Kris Jurka
>



pgsql-general by date:

Previous
From: Andrew Kelly
Date:
Subject: Re: OT: Dup mails
Next
From: "Fred Fung"
Date:
Subject: dbmirror