Re: A method to asynchronously LISTEN ?

From: Dave Cramer <pg(at)fastcrypt(dot)com>
To: Philippe Ebersohl <philippe(dot)ebersohl(at)dalim(dot)com>
Cc: List <pgsql-jdbc(at)postgresql(dot)org>
Subject: Re: A method to asynchronously LISTEN ?
Date: 2019-03-13 14:37:30
Message-ID: CADK3HHL1kDF=0UEXEhSo6pBXVCh83-nBnEjqJU8+i_JMQ1D9gg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

On Mon, 11 Mar 2019 at 05:41, Philippe Ebersohl <philippe(dot)ebersohl(at)dalim(dot)com>
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

davec(at)postgresintl(dot)com
www.postgresintl.com

>
>
> ------------------------------
> *From: *"Philippe Ebersohl" <philippe(dot)ebersohl(at)dalim(dot)com>
> *To: *"Dave Cramer" <pg(at)fastcrypt(dot)com>
> *Cc: *"David G. Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>, "List" <
> pgsql-jdbc(at)postgresql(dot)org>
> *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" <pg(at)fastcrypt(dot)com>
> *To: *"Philippe Ebersohl" <philippe(dot)ebersohl(at)dalim(dot)com>
> *Cc: *"David G. Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>, "List" <
> pgsql-jdbc(at)postgresql(dot)org>
> *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 <
> philippe(dot)ebersohl(at)dalim(dot)com> 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
>
> davec(at)postgresintl(dot)com
> www.postgresintl.com
>
>
>
>>
>> ------------------------------
>> *From: *"David G. Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
>> *To: *"Dave Cramer" <pg(at)fastcrypt(dot)com>
>> *Cc: *"Philippe Ebersohl" <philippe(dot)ebersohl(at)dalim(dot)com>, "List" <
>> pgsql-jdbc(at)postgresql(dot)org>
>> *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 <pg(at)fastcrypt(dot)com> wrote:
>>
>>>
>>>
>>> On Tue, 26 Feb 2019 at 12:29, David G. Johnston <
>>> david(dot)g(dot)johnston(at)gmail(dot)com> 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/>
>

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message rnveach 2019-03-15 13:07:14 [pgjdbc/pgjdbc] 35df0d: fix: improper indentation for javadoc (#1434)
Previous Message Philippe Ebersohl 2019-03-11 09:41:14 Re: A method to asynchronously LISTEN ?