Re: A method to asynchronously LISTEN ?

Dave Cramer <[email protected]> Wed, 13 Mar 2019 10:37:30 -0400
Newsgroups gmane.comp.db.postgresql.jdbc
Message-ID <CADK3HHL1kDF=0UEXEhSo6pBXVCh83-nBnEjqJU8+i_JMQ1D9gg@mail.gmail.com>
On Mon, 11 Mar 2019 at 05:41, Philippe Ebersohl <[email protected]>
wrote:

>
> Hello,
> could you pleas advise what is wrong in our testing ?
>
> We retrieved the git sources, build them.
> Modified the testNotify() as shown below.
> When performing  "NOTIFY mynotification"  from an SQL client, we do not
> see  the "Notification received" message as expected.
>
> Thank you.
>
> Regards,
>
> Philippe Ebersohl
>
>

Hello Phillipe,

I will look at this as soon as possible. I am currently busy with other
things.


Dave Cramer

[email protected]
www.postgresintl.com



>
>
> ------------------------------
> *From: *"Philippe Ebersohl" <[email protected]>
> *To: *"Dave Cramer" <[email protected]>
> *Cc: *"David G. Johnston" <[email protected]>, "List" <
> [email protected]>
> *Sent: *Thursday, 28 February, 2019 10:52:44
> *Subject: *Re: A method to asynchronously LISTEN ?
>
> Hello,
> we retrieved the sources.
>
>
> After starting the testNotify() below, we execute from pgadmin : notify
> mynotification
>
> But the listener is not notified.
>
> Did we miss something ?
>
>
>
> public void testNotify() throws SQLException, InterruptedException {
>             final AtomicBoolean flag = new AtomicBoolean(false);
>             Statement stmt = conn.createStatement();
>
> ((org.postgresql.PGConnection)conn).addNotificationListener(new
> org.postgresql.PGNotificationListener() {
>               @Override
>               public void notification(org.postgresql.PGNotification
> notification) {
>                 flag.set(true);
>
>                     System.out.println("Notification received");
>
>               }
>             });
>             stmt.executeUpdate("LISTEN mynotification");
> //            stmt.executeUpdate("NOTIFY mynotification");
>
>             Thread.sleep(30000);
>
>             org.postgresql.PGNotification[] notifications =
> conn.unwrap(org.postgresql.PGConnection.class).getNotifications();
>             //assertTrue(flag.get());
>             //assertNotNull(notifications);
>             //assertEquals(1, notifications.length);
>             //assertEquals("mynotification", notifications[0].getName());
>             //long endMillis = System.currentTimeMillis();
>             //long runtime = endMillis - startMillis;
>             //assertNull("There have been notifications, although none
> have been expected.",notifications);
>             //assertTrue("We didn't wait long enough! runtime=" + runtime,
> runtime > 450);
>
>             stmt.close();
>           }
>
>
> Regards.
>
> Philippe Ebersohl
>
>
> ------------------------------
> *From: *"Dave Cramer" <[email protected]>
> *To: *"Philippe Ebersohl" <[email protected]>
> *Cc: *"David G. Johnston" <[email protected]>, "List" <
> [email protected]>
> *Sent: *Wednesday, 27 February, 2019 11:53:59
> *Subject: *Re: A method to asynchronously LISTEN ?
>
>
>
> On Wed, 27 Feb 2019 at 05:47, Philippe Ebersohl <
> [email protected]> wrote:
>
>> Hello,
>> I do not think there is a need for something like conn.listenSync().
>> We were just intrigued about the test.
>>
>> In fact the current proposition should just work fine and we would like
>> to test it.
>> How could we have access to a postgresql-*.jdbc.jar that includes this
>> feature ?
>>
>> Regards,
>> Philippe
>>
>
> I just rebased it over the current code
> https://github.com/pgjdbc/pgjdbc/pull/579
> You should be able to build it manually using the commandline instructions
> to get the pull
>
> git checkout -b davecramer-notify master
> git pull https://github.com/davecramer/pgjdbc.git notify
>
> then use maven to build it
>
>
> Dave Cramer
>
> [email protected]
> www.postgresintl.com
>
>
>
>>
>> ------------------------------
>> *From: *"David G. Johnston" <[email protected]>
>> *To: *"Dave Cramer" <[email protected]>
>> *Cc: *"Philippe Ebersohl" <[email protected]>, "List" <
>> [email protected]>
>> *Sent: *Tuesday, 26 February, 2019 22:17:12
>> *Subject: *Re: A method to asynchronously LISTEN ?
>>
>> On Tue, Feb 26, 2019 at 12:04 PM Dave Cramer <[email protected]> wrote:
>>
>>>
>>>
>>> On Tue, 26 Feb 2019 at 12:29, David G. Johnston <
>>> [email protected]> wrote:
>>>
>>>> The question being asked is whether executeUpdate method performs
>>>> synchronous execution of the listener function queue during its execution.
>>>>
>>>> This after sending the command to the server and the server completing
>>>> execution of the NOTIFY.  This assumes that the server places the
>>>> notification on the channel for pick-up immediately (which will not be the
>>>> case within a transaction).
>>>>
>>>> While the client is, IIRC, synchronous, thus the local order of
>>>> operations can be controlled, the server is asynchronous and thus this test
>>>> is exposed to timing issues.  Maybe we need something like
>>>> conn.listenSync() that blocks until a notification payload is received on
>>>> the connection...?
>>>>
>>>
>>> kind of defeats the asynchronous aspect, no ?
>>>
>>>>
>>>>>>
>> You'd still want an asynchronous API for people but JavaScript introduced
>> the "async/await" feature for a reason.  In this case making it "sync"
>> instead of coding up wait loop seems desirable.  That said its quite
>> possible I'm missing some existing feature as I haven't used this API at
>> all.
>>
>> David J.
>>
>>
>> [image: Visit us on EuroDUO 2019 in Lisbon] <https://euroduo.dalim.com/>
>>
>
>
> [image: Visit us on EuroDUO 2019 in Lisbon] <https://euroduo.dalim.com/>
>
>
> [image: Visit us on EuroDUO 2019 in Lisbon] <https://euroduo.dalim.com/>
>