Managed to figure out my config mistakes, and pushed an example with the
resource adapter embedded in the .war file:
https://github.com/apache/tomee-chatterbox/commit/18290594eb924c0a0625f7560e096635d8b92416

Hope that helps!

Jon

On Wed, Jun 23, 2021 at 12:14 PM Jonathan Gallimore <
jonathan.gallim...@gmail.com> wrote:

> Hi Matthew
>
> Can you submit a PR against https://github.com/apache/tomee-chatterbox?
>
> Looking into embedding the rar into the webapp, but as it stands right at
> the moment, I'm either doing something wrong, or hitting an unusual bug
> with the resource creation. I'm debugging through it.
>
> Jon
>
> On Fri, Jun 18, 2021 at 7:39 AM Matthew Broadhead
> <matthew.broadh...@nbmlaw.co.uk.invalid> wrote:
>
>> I have pointed WST to the TomEE install and that works fine.  it might
>> be nice to embed the rar into the webapp.  does that work for production
>> as well?
>>
>> where do i submit the PR? https://github.com/jgallimore/tomee-chatterbox
>> or https://github.com/apache/tomee-chatterbox ?  it is by no means
>> complete but it allows me to set ackWait and durableName
>>
>>
>> On 17/06/2021 15:37, Jonathan Gallimore wrote:
>> > On Thu, Jun 17, 2021 at 1:48 PM Matthew Broadhead
>> > <matthew.broadh...@nbmlaw.co.uk.invalid> wrote:
>> >
>> >> i added ackWait and durableName as Strings in NATSActivationSpec so it
>> >> is working for me ok.
>> >>
>> > Very nice! Can you send a PR for that? I'll get it merged in. Nice work
>> :).
>> >
>> >
>> >> i have managed to deploy TomEE with docker fine.  But when deploying
>> >> with Eclipse WST I have to manually copy the rar into the apps folder
>> in
>> >> org.eclipse.wst.server.core.  Is there a way to automate the process
>> >> using the launch configuration?
>> >>
>> > It's been a while since I've used Eclipse, so the short answer is "I
>> don't
>> > know". I tended to point WST to use a TomEE install, and to actually
>> take
>> > control of the install (as opposed to using a folder
>> > in org.eclipse.wst.server.core). That way you'd just set it up once.
>> >
>> > There is one other alternative, which is to embed the .rar in the webapp
>> > itself. I'll hack up an example this evening for this adapter, but the
>> > general gist of it is that you'd include the chatterbox-nats-api and
>> > chatterbox-nats-impl jars in WEB-INF/lib (along with the dependencies),
>> and
>> > configure the resource adapter in WEB-INF/resources.xml (which is
>> basically
>> > a version of tomee.xml that is local to the application). Its
>> similar-ish
>> > to packaging the rar in an ear, but keeps your deployable as a rar (and
>> > should work with WST).
>> >
>> > Jon
>> >
>> >
>> >
>> >> On 17/06/2021 11:52, Matthew Broadhead wrote:
>> >>> maybe it is possible to put the Subscription option in the
>> >>> NATSActivationSpec
>> >>>
>> >>> On 17/06/2021 09:43, Matthew Broadhead wrote:
>> >>>> Hi Jon,
>> >>>>
>> >>>> I was wondering how to set the SubscriptionOptions.  If you look at
>> >>>> the example below they are the third argument to the subscribe
>> >>>> function after the MessageHandler.  In my case I might want to have
>> >>>> control over the ackWait time and switch between manualAcks and
>> >>>> autoAcks.  The durable name is quite important too.
>> >>>> startWithLastReceived can be changed to getting all the messages or
>> >>>> some number of messages.  Sorry if I didn't mention these before
>> >>>>
>> >>>> streamingConnection.subscribe("scheduler:notify", new
>> MessageHandler() {
>> >>>>      @Override
>> >>>>      public void onMessage(Message m) {
>> >>>>          ...
>> >>>>          m.ack();
>> >>>>      }
>> >>>> }, new
>> >>>>
>> >>
>> SubscriptionOptions.Builder().startWithLastReceived().manualAcks().ackWait(Duration.ofSeconds(60))
>> >>>>                      .durableName("scheduler-service").build());
>> >>>>
>> >>>> On 16/06/2021 16:43, Jonathan Gallimore wrote:
>> >>>>> Pushed. I've made client Id and cluster id configuration options and
>> >>>>> added
>> >>>>> a README. If it working for you, I'd suggest we cut a 0.3 release
>> >>>>> unless
>> >>>>> there are any objections.
>> >>>>>
>> >>>>> Jon
>> >>>>>
>> >>>>> On Wed, Jun 16, 2021 at 12:16 PM Jonathan Gallimore <
>> >>>>> jonathan.gallim...@gmail.com> wrote:
>> >>>>>
>> >>>>>> Sorry, tied up with a couple of things here. Literally just opened
>> >>>>>> the IDE
>> >>>>>> to finish this off. :)
>> >>>>>>
>> >>>>>> Jon
>> >>>>>>
>> >>>>>> On Wed, Jun 16, 2021 at 9:46 AM Matthew Broadhead
>> >>>>>> <matthew.broadh...@nbmlaw.co.uk.invalid> wrote:
>> >>>>>>
>> >>>>>>> hi Jon,
>> >>>>>>>
>> >>>>>>> Is there anything else you need from my end?  It feels like it is
>> >>>>>>> nearly
>> >>>>>>> finished.  Could it pass the parameters in a similar way to how
>> it is
>> >>>>>>> done in the chatterbox-imap?  sending them in from the tomee.xml?
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> On 10/06/2021 19:07, Jonathan Gallimore wrote:
>> >>>>>>>> Thank you! That worked. I have pushed an update to my code, and
>> I've
>> >>>>>>> been
>> >>>>>>>> able to send a message to NATS from a REST endpoint, and receive
>> a
>> >>>>>>> message
>> >>>>>>>> from NATS via an MDB.
>> >>>>>>>>
>> >>>>>>>> I still need to extract the cluster ID and client ID into
>> >>>>>>>> properties for
>> >>>>>>>> the resource adapter, and of course, try and write up how this
>> >>>>>>>> works.
>> >>>>>>> Code
>> >>>>>>>> is here:
>> >>>>>>>> https://github.com/jgallimore/tomee-chatterbox/tree/nats, but
>> >>>>>>> I'll
>> >>>>>>>> merge it in once I have done these couple of changes.
>> >>>>>>>>
>> >>>>>>>> One other thing on my mind is that I'd like to try and find some
>> >>>>>>>> way to
>> >>>>>>>> make all this easier. If you've used JMS, you've used JCA,
>> possibly
>> >>>>>>> without
>> >>>>>>>> realizing it, but the spec still feels very hard to get into - I
>> >>>>>>>> wonder
>> >>>>>>> if
>> >>>>>>>> there is anything we can propose in that regard to try and make
>> >>>>>>>> creating
>> >>>>>>>> simple connectors a bit easier.
>> >>>>>>>>
>> >>>>>>>> Jon
>> >>>>>>>>
>> >>>>>>>> On Wed, Jun 9, 2021 at 4:31 PM Matthew Broadhead
>> >>>>>>>> <matthew.broadh...@nbmlaw.co.uk.invalid> wrote:
>> >>>>>>>>
>> >>>>>>>>> hi, it was my fault putting a confusing value in the docker
>> compose
>> >>>>>>>>> file.  it should work like this
>> >>>>>>>>>
>> >>>>>>>>> StreamingConnectionFactory cf = new
>> >>>>>>>>>      StreamingConnectionFactory(new
>> >>>>>>>>> Options.Builder().natsUrl("nats://localhost:4222")
>> >>>>>>>>> .clusterId("yourclientid").clientId("anything").build());
>> >>>>>>>>>
>> >>>>>>>>> but you could change the docker-compose.yml to have a -cid of
>> >>>>>>>>> yourclusterid and then do this
>> >>>>>>>>>
>> >>>>>>>>> StreamingConnectionFactory cf = new
>> >>>>>>>>>      StreamingConnectionFactory(new
>> >>>>>>>>> Options.Builder().natsUrl("nats://localhost:4222")
>> >>>>>>>>> .clusterId("yourclusterid").clientId("yourclientid").build());
>> >>>>>>>>>
>> >>>>>>>>> On 09/06/2021 17:15, Jonathan Gallimore wrote:
>> >>>>>>>>>> Thanks. If I can get that test going, I can probably get the
>> rest
>> >>>>>>>>> working.
>> >>>>>>>>>> I suspect there are some other bugs in there.
>> >>>>>>>>>>
>> >>>>>>>>>> Jon
>> >>>>>>>>>>
>> >>>>>>>>>> On Wed, Jun 9, 2021 at 4:04 PM Matthew Broadhead
>> >>>>>>>>>> <matthew.broadh...@nbmlaw.co.uk.invalid> wrote:
>> >>>>>>>>>>
>> >>>>>>>>>>> Thanks I will have a look now
>> >>>>>>>>>>>
>> >>>>>>>>>>> On 09/06/2021 15:19, Jonathan Gallimore wrote:
>> >>>>>>>>>>>> Ok, I'm stuck. If I boot up a NATS server with your
>> >>>>>>> docker-compose.yml
>> >>>>>>>>>>>> file, and run the following test:
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>          @Test
>> >>>>>>>>>>>>          public void testShouldConnect() throws Exception {
>> >>>>>>>>>>>>              StreamingConnectionFactory cf = new
>> >>>>>>>>>>>> StreamingConnectionFactory(new
>> >>>>>>>>>>>> Options.Builder().natsUrl("nats://localhost:4222")
>> >>>>>>>>>>>>
>> >>>>>>>>>>> .clusterId("cluster-id").clientId("yourclientid").build());
>> >>>>>>>>>>>>              final StreamingConnection connection =
>> >>>>>>> cf.createConnection();
>> >>>>>>>>>>>> Assert.assertNotNull(connection);
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>              connection.close();
>> >>>>>>>>>>>>          }
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> It fails with a timeout.
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> I monitored the connection with wireshark, and see the
>> following
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> < = from server to client
>> >>>>>>>>>>>>> = from client to server
>> >>>>>>>>>>>> <INFO
>> >>>>>>>>>>>>
>> >>
>> <{"server_id":"NDMRYDSGUSH2QR6SZWMFB44ND5CODXGKNYTQ5IPLUGYUDBI6G54CIGF6","server_name":"NDMRYDSGUSH2QR6SZWMFB44ND5CODXGKNYTQ5IPLUGYUDBI6G54CIGF6","version":"2.1.4","proto":1,"git_commit":"fb009af","go":"go1.13.7","host":"0.0.0.0","port":4222,"max_payload":1048576,"client_id":10}
>> >>
>> >>>>>>>>>>>>> CONNECT
>> >>
>> {"lang":"java","version":"2.6.5","name":"yourclientid","protocol":1,"verbose":false,"pedantic":false,"tls_required":false,"echo":true}
>> >>
>> >>>>>>>>>>>>> PING
>> >>>>>>>>>>>> <PONG
>> >>>>>>>>>>>>> SUB _STAN.acks.LP4bdY88abuVJ19Qo5HVuk 1
>> >>>>>>>>>>>>> SUB _INBOX.LP4bdY88abuVJ19Qo5HVn8 2
>> >>>>>>>>>>>>> SUB _INBOX.LP4bdY88abuVJ19Qo5HVqw 3
>> >>>>>>>>>>>>> SUB _INBOX.F0vVy1N0sQM3xseeEWMIAL.* 4
>> >>>>>>>>>>>>> PUB _STAN.discover.cluster-id
>> >>>>>>>>>>>> _INBOX.F0vVy1N0sQM3xseeEWMIAL.F0vVy1N0sQM3xseeEWMISH 75
>> >>
>> .yourclientid.._INBOX.LP4bdY88abuVJ19Qo5HVn8..".LP4bdY88abuVJ19Qo5HVjK(.0.
>> >>>>>>>>>>>> <PING
>> >>>>>>>>>>>>> PONG
>> >>>>>>>>>>>>> UNSUB 1
>> >>>>>>>>>>>>> UNSUB 2
>> >>>>>>>>>>>>> UNSUB 3
>> >>>>>>>>>>>> So there does appear to be some communication between my test
>> >>>>>>>>>>>> and
>> >>>>>>> the
>> >>>>>>>>>>> NATS
>> >>>>>>>>>>>> server - I have no idea why it times out.
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> My code is here if you want to have a go:
>> >>>>>>>>>>>> https://github.com/jgallimore/tomee-chatterbox/tree/nats
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> Jon
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> On Wed, Jun 9, 2021 at 11:56 AM Jonathan Gallimore <
>> >>>>>>>>>>>> jonathan.gallim...@gmail.com> wrote:
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>> Nervermind, I figured out my mistake. I'll post back when I
>> >>>>>>>>>>>>> have
>> >>>>>>>>>>> something
>> >>>>>>>>>>>>> going.
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> Jon
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> On Wed, Jun 9, 2021 at 11:44 AM Jonathan Gallimore <
>> >>>>>>>>>>>>> jonathan.gallim...@gmail.com> wrote:
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>> I think I have something wired up, but when executing this:
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>                  cf = new
>> >>>>>>>>>>>>>> StreamingConnectionFactory(new
>> >>>>>>>>>>>>>> Options.Builder().natsUrl(baseAddress)
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> .clusterId("cluster-id").clientId("client-id").build());
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>                  connection = cf.createConnection();
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> connection is null. Any pointers?
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Jon
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> On Wed, Jun 9, 2021 at 8:16 AM Matthew Broadhead
>> >>>>>>>>>>>>>> <matthew.broadh...@nbmlaw.co.uk.invalid> wrote:
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> i have never used a JCA adapter before.  is it loaded in
>> >>>>>>>>>>>>>>> using
>> >>>>>>> the
>> >>>>>>>>>>>>>>> tomee.xml as a Resource?  and then injected into a
>> >>>>>>>>>>>>>>> singleton for
>> >>>>>>>>>>>>>>> subscribing to messages?
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> On 08/06/2021 17:15, Jonathan Gallimore wrote:
>> >>>>>>>>>>>>>>>> Definitely sounds like a good case for a JCA adapter.
>> >>>>>>>>>>>>>>>> I'll take
>> >>>>>>> a
>> >>>>>>>>>>> quick
>> >>>>>>>>>>>>>>>> swing at hooking up an example for you.
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> Jon
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> On Tue, Jun 8, 2021 at 9:02 AM Matthew Broadhead
>> >>>>>>>>>>>>>>>> <matthew.broadh...@nbmlaw.co.uk.invalid> wrote:
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> Hi Jon,
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> NATS is basically a message queue, like ActiveMQ I
>> suppose.
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> I included the adapter into the project using maven
>> >>>>>>>>>>>>>>>>> <dependency>
>> >>>>>>>>>>>>>>>>> <groupId>io.nats</groupId>
>> >>>>>>>>>>>>>>>>> <artifactId>java-nats-streaming</artifactId>
>> >>>>>>>>>>>>>>>>> <version>2.2.3</version>
>> >>>>>>>>>>>>>>>>> </dependency>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> i started up a nats server using docker.  here is my
>> >>>>>>>>>>>>>>> docker-compose.yml
>> >>>>>>>>>>>>>>>>> version: '3.1'
>> >>>>>>>>>>>>>>>>> services:
>> >>>>>>>>>>>>>>>>>          nats-docker:
>> >>>>>>>>>>>>>>>>>            image: nats-streaming:0.17.0
>> >>>>>>>>>>>>>>>>>            restart: always
>> >>>>>>>>>>>>>>>>>            command:
>> >>>>>>>>>>>>>>>>>              - '-p'
>> >>>>>>>>>>>>>>>>>              - '4222'
>> >>>>>>>>>>>>>>>>>              - '-m'
>> >>>>>>>>>>>>>>>>>              - '8222'
>> >>>>>>>>>>>>>>>>>              - '-hbi'
>> >>>>>>>>>>>>>>>>>              - '5s'
>> >>>>>>>>>>>>>>>>>              - '-hbt'
>> >>>>>>>>>>>>>>>>>              - '5s'
>> >>>>>>>>>>>>>>>>>              - '-hbf'
>> >>>>>>>>>>>>>>>>>              - '2'
>> >>>>>>>>>>>>>>>>>              - '-SD'
>> >>>>>>>>>>>>>>>>>              - '-cid'
>> >>>>>>>>>>>>>>>>>              - 'yourclientid'
>> >>>>>>>>>>>>>>>>>            environment:
>> >>>>>>>>>>>>>>>>>              TZ: Europe/London
>> >>>>>>>>>>>>>>>>>              LANG: en_GB.UTF-8
>> >>>>>>>>>>>>>>>>>              LANGUAGE: en_GB:en
>> >>>>>>>>>>>>>>>>>              LC_ALL: en_GB.UTF-8
>> >>>>>>>>>>>>>>>>>            ports:
>> >>>>>>>>>>>>>>>>>              - '4222:4222'
>> >>>>>>>>>>>>>>>>>              - '8222:8222'
>> >>>>>>>>>>>>>>>>>            expose:
>> >>>>>>>>>>>>>>>>>              - 4222
>> >>>>>>>>>>>>>>>>>              - 8222
>> >>>>>>>>>>>>>>>>>            networks:
>> >>>>>>>>>>>>>>>>>              - backend
>> >>>>>>>>>>>>>>>>> networks:
>> >>>>>>>>>>>>>>>>>          backend:
>> >>>>>>>>>>>>>>>>>            driver: bridge
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> JCA sounds good if it solves the threading issue.  it is
>> >>>>>>>>>>>>>>>>> very
>> >>>>>>> kind
>> >>>>>>>>>>> of
>> >>>>>>>>>>>>>>>>> you to offer to help write an adapter.  looking at the
>> >>>>>>>>>>>>>>>>> code you
>> >>>>>>>>> sent
>> >>>>>>>>>>>>>>> it
>> >>>>>>>>>>>>>>>>> looks complicated but i can have a stab at it if you
>> >>>>>>>>>>>>>>>>> don't have
>> >>>>>>>>> much
>> >>>>>>>>>>>>>>> time
>> >>>>>>>>>>>>>>>>> let me know if you need more info
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> Matthew
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> On 07/06/2021 17:48, Jonathan Gallimore wrote:
>> >>>>>>>>>>>>>>>>>> At the risk of sounding a bit ignorant... what is NATS?
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>        From what I can tell, it sounds like you're
>> >>>>>>>>>>>>>>>>>> receiving a
>> >>>>>>>>> stream
>> >>>>>>>>>>> of
>> >>>>>>>>>>>>>>> events
>> >>>>>>>>>>>>>>>>>> (over websocket) and want to do some processing in an
>> >>>>>>>>>>>>>>>>>> EJB or
>> >>>>>>> CDI
>> >>>>>>>>>>>>>>> bean for
>> >>>>>>>>>>>>>>>>>> each event. The connection to the NATS server isn't in
>> the
>> >>>>>>>>> context
>> >>>>>>>>>>>>>>> of a
>> >>>>>>>>>>>>>>>>>> HTTP (or any other type of) request, and just runs all
>> the
>> >>>>>>> time
>> >>>>>>>>>>>>>>> while the
>> >>>>>>>>>>>>>>>>>> server is running - does that sound about right?
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> Assuming that sounds right, it sounds a bit like the
>> >>>>>>>>>>>>>>>>>> Slack JCA
>> >>>>>>>>>>>>>>> connector
>> >>>>>>>>>>>>>>>>> I
>> >>>>>>>>>>>>>>>>>> wrote a while back:
>> >>>>>>>>>>>>>>>>>>
>> >>
>> https://github.com/apache/tomee-chatterbox/tree/master/chatterbox-slack
>> >>>>>>>>> .
>> >>>>>>>>>>>>>>>>>> Essentially, the resource adapter connects to slack and
>> >>>>>>>>>>>>>>>>>> runs
>> >>>>>>> all
>> >>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>> time.
>> >>>>>>>>>>>>>>>>>> Messages that come into the server from slack are
>> >>>>>>>>>>>>>>>>>> processed in
>> >>>>>>>>> MDBs
>> >>>>>>>>>>>>>>> that
>> >>>>>>>>>>>>>>>>>> implement the InboundListener interface.
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> JCA certainly feels complex, especially when compared
>> with
>> >>>>>>> your
>> >>>>>>>>>>>>>>>>>> Singleton @Startup bean approach, but I usually find
>> >>>>>>>>>>>>>>>>>> that if I
>> >>>>>>>>> try
>> >>>>>>>>>>>>>>> and
>> >>>>>>>>>>>>>>>>> work
>> >>>>>>>>>>>>>>>>>> with threads in EJBs, things usually go in the wrong
>> >>>>>>> direction.
>> >>>>>>>>>>>>>>>>> Conversely,
>> >>>>>>>>>>>>>>>>>> JCA even gives you a work manager to potentially handle
>> >>>>>>>>>>>>>>>>>> that
>> >>>>>>>>> stuff.
>> >>>>>>>>>>>>>>>>>> If you can give me some pointers to running a NATS
>> server,
>> >>>>>>> I'd be
>> >>>>>>>>>>>>>>> happy
>> >>>>>>>>>>>>>>>>> to
>> >>>>>>>>>>>>>>>>>> help with a sample adapter and application.
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> Jon
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> On Mon, Jun 7, 2021 at 11:49 AM Matthew Broadhead
>> >>>>>>>>>>>>>>>>>> <matthew.broadh...@nbmlaw.co.uk.invalid> wrote:
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> I am trying to subscribe to a NATS streaming server
>> with
>> >>>>>>>>>>>>>>>>>>> https://github.com/nats-io/stan.java which is
>> >>>>>>>>>>>>>>> java.lang.Autocloseable.
>> >>>>>>>>>>>>>>>>>>> At first it wasn't closing properly as seen in my
>> >>>>>>>>>>>>>>>>>>> original
>> >>>>>>> gist:
>> >>>>>>>>>
>> https://gist.github.com/chongma/2a3ab451f2aeabc98340a9b897394cfe
>> >>>>>>>>>>>>>>>>>>> This was solved with this
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>
>> https://stackoverflow.com/questions/39080296/hazelcast-threads-prevent-tomee-from-stopping
>> >>>>>>>>>>>>>>>>>>> creating a default producer:
>> >>>>>>>>>>>>>>>>>>> @ApplicationScoped
>> >>>>>>>>>>>>>>>>>>> public class NatsConnectionProducer {
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>             @Resource(name = "baseAddressNats")
>> >>>>>>>>>>>>>>>>>>>             private String baseAddressNats;
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>             @Produces
>> >>>>>>>>>>>>>>>>>>>             @ApplicationScoped
>> >>>>>>>>>>>>>>>>>>>             public StreamingConnection instance()
>> throws
>> >>>>>>>>> IOException,
>> >>>>>>>>>>>>>>>>>>> InterruptedException {
>> >>>>>>>>>>>>>>>>>>> StreamingConnectionFactory cf = new
>> >>>>>>>>>>>>>>>>>>> StreamingConnectionFactory(new
>> >>>>>>>>>>>>>>>>> Options.Builder().natsUrl(baseAddressNats)
>> >>>>>>>>>>>>>>>>>>>
>> .clusterId("cluster-id").clientId("client-id").build());
>> >>>>>>>>>>>>>>>>>>>                 return cf.createConnection();
>> >>>>>>>>>>>>>>>>>>>             }
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>             public void destroy(@Disposes final
>> >>>>>>> StreamingConnection
>> >>>>>>>>>>>>>>> instance)
>> >>>>>>>>>>>>>>>>>>> throws IOException, TimeoutException,
>> >>>>>>>>>>>>>>>>> InterruptedException {
>> >>>>>>>>>>>>>>>>>>> instance.close();
>> >>>>>>>>>>>>>>>>>>>             }
>> >>>>>>>>>>>>>>>>>>> }
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> But now i am creating a new thread because any
>> injections
>> >>>>>>> with
>> >>>>>>>>> JPA
>> >>>>>>>>>>>>>>> had
>> >>>>>>>>>>>>>>>>>>> cacheing issues and this seems to work but i am not
>> >>>>>>>>>>>>>>>>>>> sure it
>> >>>>>>> is
>> >>>>>>>>>>>>>>>>>>> broadcasting to websockets correctly
>> >>>>>>>>>>>>>>>>>>> @Singleton
>> >>>>>>>>>>>>>>>>>>> @Lock(LockType.READ)
>> >>>>>>>>>>>>>>>>>>> @Startup
>> >>>>>>>>>>>>>>>>>>> public class SchedulerEvents {
>> >>>>>>>>>>>>>>>>>>>             private static final Logger log =
>> >>>>>>>>>>>>>>>>>>> Logger.getLogger(SchedulerEvents.class.getName());
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>             @Inject
>> >>>>>>>>>>>>>>>>>>>             private StreamingConnection
>> >>>>>>>>>>>>>>>>>>> streamingConnection;
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>             @Inject
>> >>>>>>>>>>>>>>>>>>>             private SomeController someController;
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>             @PostConstruct
>> >>>>>>>>>>>>>>>>>>>             private void construct() {
>> >>>>>>>>>>>>>>>>>>> // log.fine(Thread.currentThread().getName());
>> >>>>>>>>>>>>>>>>>>>                 try {
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>> streamingConnection.subscribe("scheduler:notify",
>> >>>>>>>>>>> new
>> >>>>>>>>>>>>>>>>>>> MessageHandler() {
>> >>>>>>>>>>>>>>>>>>>                         @Override
>> >>>>>>>>>>>>>>>>>>>                         public void onMessage(Message
>> m) {
>> >>>>>>>>>>>>>>>>>>>                             try {
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> log.fine(Thread.currentThread().getName());
>> >>>>>>>>>>>>>>>>>>> // this needs to spawn a new
>> >>>>>>> thread
>> >>>>>>>>>>>>>>> otherwise
>> >>>>>>>>>>>>>>>>>>> injections are stale
>> >>>>>>>>>>>>>>>>>>> Thread thread = new Thread(new
>> >>>>>>>>>>>>>>> Runnable() {
>> >>>>>>>>>>>>>>>>>>> public void run() {
>> >>>>>>>>>>>>>>>>>>> log.fine(Thread.currentThread().getName());
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> process(m.getData());
>> >>>>>>>>>>>>>>>>>>> }
>> >>>>>>>>>>>>>>>>>>>                                 });
>> >>>>>>>>>>>>>>>>>>> thread.start();
>> >>>>>>>>>>>>>>>>>>> while (thread.isAlive()) {
>> >>>>>>>>>>>>>>>>>>> // wait
>> >>>>>>>>>>>>>>>>>>>                                 }
>> >>>>>>>>>>>>>>>>>>> log.fine("Thread finished OK");
>> >>>>>>>>>>>>>>>>>>> m.ack();
>> >>>>>>>>>>>>>>>>>>>                             } catch (Exception e) {
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>    emailController.emailStackTrace(e);
>> >>>>>>>>>>>>>>>>>>> }
>> >>>>>>>>>>>>>>>>>>>                         }
>> >>>>>>>>>>>>>>>>>>>                     }, new
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>
>> SubscriptionOptions.Builder().startWithLastReceived().manualAcks().ackWait(Duration.ofSeconds(60))
>> >>
>> >>>>>>>>>>> .durableName("scheduler-service").build());
>> >>>>>>>>>>>>>>>>>>> } catch (IOException | InterruptedException |
>> >>>>>>>>>>>>>>>>> TimeoutException e)
>> >>>>>>>>>>>>>>>>>>> {
>> >>>>>>>>>>>>>>>>>>> e.printStackTrace();
>> >>>>>>>>>>>>>>>>>>>                 }
>> >>>>>>>>>>>>>>>>>>>             }
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>             private void process(byte[] data) {
>> >>>>>>>>>>>>>>>>>>>                 String raw = new String(data);
>> >>>>>>>>>>>>>>>>>>>                 JsonReader jsonReader =
>> >>>>>>>>>>>>>>>>>>> Json.createReader(new
>> >>>>>>>>>>>>>>>>> StringReader(raw));
>> >>>>>>>>>>>>>>>>>>> JsonObject jo = jsonReader.readObject();
>> >>>>>>>>>>>>>>>>>>>                 jsonReader.close();
>> >>>>>>>>>>>>>>>>>>>                 String type =
>> >>>>>>>>>>>>>>>>>>> utilityDao.readJsonString(jo,
>> >>>>>>>>> "type");
>> >>>>>>>>>>>>>>>>>>> int id = utilityDao.readJsonInteger(jo, "id");
>> >>>>>>>>>>>>>>>>>>>                 if (type == null || id == 0) {
>> >>>>>>>>>>>>>>>>>>> emailController.emailThrowable(new
>> >>>>>>> Throwable(),
>> >>>>>>>>>>> raw);
>> >>>>>>>>>>>>>>>>>>> return;
>> >>>>>>>>>>>>>>>>>>>                 }
>> >>>>>>>>>>>>>>>>>>>                 log.info("Received a message: id: " +
>> >>>>>>>>>>>>>>>>>>> id + ",
>> >>>>>>>>> type:"
>> >>>>>>>>>>> +
>> >>>>>>>>>>>>>>> type);
>> >>>>>>>>>>>>>>>>>>> DefaultServerEndpointConfigurator dsec = new
>> >>>>>>>>>>>>>>>>>>> DefaultServerEndpointConfigurator();
>> >>>>>>>>>>>>>>>>>>>                SomeWebSocket nws =
>> >>>>>>>>>>>>>>>>> dsec.getEndpointInstance(SomeWebSocket.class);
>> >>>>>>>>>>>>>>>>>>> nws.broadcast(ja.toString());
>> >>>>>>>>>>>>>>>>>>>             }
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> }
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> what is the best way to use an autocloseable?
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>
>> >>
>>
>>

Reply via email to