joram issueshttps://gitlab.ow2.org/joram/joram/-/issues2024-03-27T14:13:38Zhttps://gitlab.ow2.org/joram/joram/-/issues/314397Export a JMS queue to JSon2024-03-27T14:13:38ZAndre FreyssinetExport a JMS queue to JSonAllows the export in JSon format of a JMS queue and all its messages (delivered and delayed). The first objective is to be able to retrieve the state of a queue for observation purposes. The final objective could be to rebuild an identic...Allows the export in JSon format of a JMS queue and all its messages (delivered and delayed). The first objective is to be able to retrieve the state of a queue for observation purposes. The final objective could be to rebuild an identical queue at a (new) broker (possibly after correcting potential errors).
See #314394 and #314395.Andre FreyssinetAndre Freyssinethttps://gitlab.ow2.org/joram/joram/-/issues/314396Handling delayed messages in queues.2024-03-21T14:37:42ZAndre FreyssinetHandling delayed messages in queues.Currently the management of delayed messages is not scalable. Messages are not kept in the queue (memory) and a task is scheduled for each (the message is kept in this task and sent with the publication notification).
This way of handli...Currently the management of delayed messages is not scalable. Messages are not kept in the queue (memory) and a task is scheduled for each (the message is kept in this task and sent with the publication notification).
This way of handling timed messages is not scalable. We should maintain an ordered list of timed messages, and set a timer for the first timeout (see Scheduler class).https://gitlab.ow2.org/joram/joram/-/issues/314392Jersey reference in jakarta.ws2024-03-11T09:56:18ZAndre FreyssinetJersey reference in jakarta.wsWhen using Jersey in a JakartaWS application it is necessary to inject the names of the Jersey implementation classes for RuntimeDelegate and ClientBuilder.
Ideally JakartaWS discovers the implementation itself but it does not seem to wo...When using Jersey in a JakartaWS application it is necessary to inject the names of the Jersey implementation classes for RuntimeDelegate and ClientBuilder.
Ideally JakartaWS discovers the implementation itself but it does not seem to work in our case, perhaps it is due to OSGi, or to our environment.
Currently, we set specified global environment variables in all classes using JakartaWS. On the one hand it is not very practical, on the other hand it prevents any evolution of the implementation (a priori our code is almost independent of Jersey).https://gitlab.ow2.org/joram/joram/-/issues/314391Updates Maven plugins2023-10-04T13:04:21ZAndre FreyssinetUpdates Maven pluginsThe following plugin updates are available:
- maven-assembly-plugin: 3.3.0 -> 3.4.2
- maven-gpg-plugin: 1.6 -> 3.0.1
- maven-javadoc-plugin: 3.0.0 -> 3.3.1
- maven-release-plugin: 2.5.3 -> 3.0.0-M4
- maven-surefire-plugi: 2.22.2 -> 3.0.0...The following plugin updates are available:
- maven-assembly-plugin: 3.3.0 -> 3.4.2
- maven-gpg-plugin: 1.6 -> 3.0.1
- maven-javadoc-plugin: 3.0.0 -> 3.3.1
- maven-release-plugin: 2.5.3 -> 3.0.0-M4
- maven-surefire-plugi: 2.22.2 -> 3.0.0-M5
The following plugins do not have their version specified:
- maven-release-plugin: (from super-pom) 3.0.0-M4
Project inherits minimum Maven version as: 3.8.3
Plugins require minimum Maven version of: 3.1.0https://gitlab.ow2.org/joram/joram/-/issues/314390Updates Jakarta/JMS version to 3.1.02024-01-19T06:05:40ZAndre FreyssinetUpdates Jakarta/JMS version to 3.1.0Jakarta Messaging 3.1 will be a minor update with fixes and enhancements.
This version needs Java 11.Jakarta Messaging 3.1 will be a minor update with fixes and enhancements.
This version needs Java 11.https://gitlab.ow2.org/joram/joram/-/issues/314371Contenu du répertoire de persistance2021-04-28T07:14:47ZAndre FreyssinetContenu du répertoire de persistanceLe répertoire de persistance s# contient à la fois les objets du repository, les fichiers de logs et le répertoire de cache de Felix.Le répertoire de persistance s# contient à la fois les objets du repository, les fichiers de logs et le répertoire de cache de Felix.Andre FreyssinetAndre Freyssinethttps://gitlab.ow2.org/joram/joram/-/issues/314368Rebouclage de la numérotation des messages et redémarrage2022-04-27T08:43:41ZSerge LacourteRebouclage de la numérotation des messages et redémarrage<p>Les messages sont numérotés par un int 32 bits (31 en fait puisque seules les valeurs positives sont prises en compte). Lorsque le compteur arrive au maximum il est remis à 0.<br/>
Cela ne pose normalement pas de problème sauf si le s...<p>Les messages sont numérotés par un int 32 bits (31 en fait puisque seules les valeurs positives sont prises en compte). Lorsque le compteur arrive au maximum il est remis à 0.<br/>
Cela ne pose normalement pas de problème sauf si le serveur est redémarré alors que des messages avant et après réinitialisation cohabitent dans les files des MessageConsumer. Lors du redémarrage les messages avec les plus petits indices seront insérés en tête de file, et les autres pourraient même ne pas être distribués.</p>
<i>[JORAM-379] created at 2021-02-07 17:26:56 by freyssinet, version JORAM_5_17_0</i>https://gitlab.ow2.org/joram/joram/-/issues/314362Implantation des méthodes cleanWaitingRequest et cleanPendingMessage du MBean...2021-04-13T16:00:02ZSerge LacourteImplantation des méthodes cleanWaitingRequest et cleanPendingMessage du MBean de la Queue<p>Ces méthodes uniquement utilisées au travers de l'interface du MBean (JMX) ont été vidées de leur contenu suite à <a href="http://tiga:8080/browse/JORAM-372" title="Exception ArrayIndexOutOfBoundsException durant le nettoyage de la fi...<p>Ces méthodes uniquement utilisées au travers de l'interface du MBean (JMX) ont été vidées de leur contenu suite à <a href="http://tiga:8080/browse/JORAM-372" title="Exception ArrayIndexOutOfBoundsException durant le nettoyage de la file de requête de la queue."><del>JORAM-372</del></a>. Une implantation possible est d'utiliser une notification synchrone (SyncNot) dont le traitement consistera à appeler les méthodes correspondantes.</p>
<i>[JORAM-373] created at 2020-12-09 18:26:53 by freyssinet, version JORAM_5_17_0</i>https://gitlab.ow2.org/joram/joram/-/issues/314360Authentification externe (fichier) du client JMS2021-04-13T15:59:50ZSerge LacourteAuthentification externe (fichier) du client JMS<p>Les données user/password de l'authentification JMS sont actuellement conservées dans la base de persistance au travers du topic d'administration. Hormis le fait que ceux-ci sont conservés sans encryptage cela rend difficile leur modi...<p>Les données user/password de l'authentification JMS sont actuellement conservées dans la base de persistance au travers du topic d'administration. Hormis le fait que ceux-ci sont conservés sans encryptage cela rend difficile leur modification par l'utilisateur.</p>
<p>L'authentification Joram/JMS repose sur l'interface Identity qui permet différentes implantations, il serait souhaitable d'offrir une implantation fichier identique à celle de JoramMQ/MQTT.</p>
<i>[JORAM-371] created at 2020-08-28 07:37:17 by freyssinet, version JORAM_5_18_0-SNAPSHOT</i>https://gitlab.ow2.org/joram/joram/-/issues/314351Usage de la méthode Transaction.loadAll pour le rechargement des queues de me...2022-11-21T09:44:29ZSerge LacourteUsage de la méthode Transaction.loadAll pour le rechargement des queues de messages<p>Le rechargement des queues contenant un grand nombre de messages est couteux (Joram#358).<br/>
La méthode Transaction.loadAll permet d'optimiser le chargement d'objets depuis la BDD en les factorisant en une unique opération.<br/>
Act...<p>Le rechargement des queues contenant un grand nombre de messages est couteux (Joram#358).<br/>
La méthode Transaction.loadAll permet d'optimiser le chargement d'objets depuis la BDD en les factorisant en une unique opération.<br/>
Actuellement son utilisation pose problème lorsque le swap des messages est activé car cette méthode ne permet pas de filtrer les objets 'body' des objets 'header'.<br/>
Il faudrait soit modifier le nommage des objets 'header' et 'body', ce qui pose un problème de compatibilité ascendante, soit que cette méthode permette un filtrage plus intelligent ce qui n'est pas évident avec le SQL LIKE.</p>
<i>[JORAM-362] created at 2020-02-04 11:27:34 by freyssinet, version JORAM_5_18_0-SNAPSHOT</i>https://gitlab.ow2.org/joram/joram/-/issues/314344Sauvegarde des propriétés liés à la persistance.2021-04-13T15:58:14ZSerge LacourteSauvegarde des propriétés liés à la persistance.<p>Les propriétés nécessaires à l'initialisation de la persistance ne peuvent pas être définies dans la configuration de Joram car elles ne peuvent pas être retrouvées lors du redémarrage.<br/>
Il faudrait les stocker dans un fichier de ...<p>Les propriétés nécessaires à l'initialisation de la persistance ne peuvent pas être définies dans la configuration de Joram car elles ne peuvent pas être retrouvées lors du redémarrage.<br/>
Il faudrait les stocker dans un fichier de propriété dans le répertoire de persistance à l'image du fichier TFC (see <a href="http://tiga:8080/browse/JORAM-354" title="Message d'erreur au démarrage "TFC file does not exist"">JORAM-354</a>).<br/>
Ce mécanisme pourrait être implanté dans AbstractTransaction et être commun aux différentes implantations (voir le fichier TPF).</p>
<i>[JORAM-355] created at 2019-10-29 17:00:24 by freyssinet, version JORAM_5_16_0</i>https://gitlab.ow2.org/joram/joram/-/issues/314341Deadlock with completion listener (JMS 2.0)2022-04-25T08:55:05ZSerge LacourteDeadlock with completion listener (JMS 2.0)<p>Ce problème est mis en évidence par le test jms2.test7. L'interblocage est décrit par la stacktrace des 2 threads ci-dessous :</p>
<p>"main" #1 prio=5 os_prio=0 tid=0x00000000028f5000 nid=0x61d4 in Object.wait() <span class="error">&...<p>Ce problème est mis en évidence par le test jms2.test7. L'interblocage est décrit par la stacktrace des 2 threads ci-dessous :</p>
<p>"main" #1 prio=5 os_prio=0 tid=0x00000000028f5000 nid=0x61d4 in Object.wait() <span class="error">[0x000000000282f000]</span><br/>
java.lang.Thread.State: WAITING (on object monitor)<br/>
at java.lang.Object.wait(Native Method)</p>
<ul class="alternate" type="square">
<li>waiting on <0x000000076ca399e0> (a org.objectweb.joram.client.jms.connection.Requestor)<br/>
at org.objectweb.joram.client.jms.connection.Requestor.request(Requestor.java:199)</li>
<li>locked <0x000000076ca399e0> (a org.objectweb.joram.client.jms.connection.Requestor)<br/>
at org.objectweb.joram.client.jms.connection.Requestor.request(Requestor.java:126)</li>
<li>locked <0x000000076ca399e0> (a org.objectweb.joram.client.jms.connection.Requestor)<br/>
at org.objectweb.joram.client.jms.Session.commit(Session.java:1612)</li>
<li>locked <0x000000076ca397b0> (a org.objectweb.joram.client.jms.Session)<br/>
at org.objectweb.joram.client.jms.JMSContext.commit(JMSContext.java:371)<br/>
at joram.jms2.Test7.run(Test7.java:74)<br/>
at joram.jms2.Test7.main(Test7.java:45)</li>
</ul>
<p>"(org.objectweb.joram.client.jms.Connection@957a0000,proxyId=#0.0.1026,key=0)" #19 prio=5 os_prio=0 tid=0x000000001fb34800 nid=0x22e0 waiting for monitor entry <span class="error">[0x000000002114e000]</span><br/>
java.lang.Thread.State: BLOCKED (on object monitor)<br/>
at org.objectweb.joram.client.jms.Session.commit(Session.java:1560)</p>
<ul class="alternate" type="square">
<li>waiting to lock <0x000000076ca397b0> (a org.objectweb.joram.client.jms.Session)<br/>
at org.objectweb.joram.client.jms.JMSContext.commit(JMSContext.java:371)<br/>
at joram.jms2.Test7.onCompletion(Test7.java:105)<br/>
at org.objectweb.joram.client.jms.connection.CompletionListener.onCompletion(CompletionListener.java:64)<br/>
at org.objectweb.joram.client.jms.connection.RequestMultiplexer$DemultiplexerDaemon.run(RequestMultiplexer.java:605)<br/>
at java.lang.Thread.run(Thread.java:745)</li>
</ul>
<i>[JORAM-352] created at 2019-10-08 17:10:12 by freyssinet, version JORAM_5_13_0</i>https://gitlab.ow2.org/joram/joram/-/issues/314324Rollback transactionnel avec cache de session activé dans Spring.2021-04-13T15:56:13ZSerge LacourteRollback transactionnel avec cache de session activé dans Spring.<p>Lorsque le cache de session de Spring est activé, la remontée d'une exception dans le listener ne déclenche pas de rollback.</p>
<i>[JORAM-335] created at 2019-05-13 17:06:10 by freyssinet, version JORAM_5_16_0</i><p>Lorsque le cache de session de Spring est activé, la remontée d'une exception dans le listener ne déclenche pas de rollback.</p>
<i>[JORAM-335] created at 2019-05-13 17:06:10 by freyssinet, version JORAM_5_16_0</i>https://gitlab.ow2.org/joram/joram/-/issues/314317Problème potentiel dans Outbound[Queue|Topic]Connection2021-04-13T15:55:29ZSerge LacourteProblème potentiel dans Outbound[Queue|Topic]Connection<p>La méthode createSession de OutboundConnection a été modifiée pour prendre en compte la possibilité que la connexion sous-jacente ne soit plus valide. Le code équivalent des méthodes create<span class="error">&#91;Queue|Topic&#93;</sp...<p>La méthode createSession de OutboundConnection a été modifiée pour prendre en compte la possibilité que la connexion sous-jacente ne soit plus valide. Le code équivalent des méthodes create<span class="error">[Queue|Topic]</span>Session des classes Outbound<span class="error">[Queue|Topic]</span>Connection n'a pas été modifié en conséquence.</p>
<i>[JORAM-328] created at 2019-03-13 09:35:07 by freyssinet, version JORAM_5_16_0</i>https://gitlab.ow2.org/joram/joram/-/issues/314296Export/Import des messages JMS2021-04-28T07:58:06ZSerge LacourteExport/Import des messages JMS<p>Ajouter des méthodes d'administration aux Queues / Souscriptions pour permettre l'export d'un message ou de l'ensemble des messages.<br/>
Prévoir une méthode permettant l'import d'un groupe de message.</p>
<i>[JORAM-307] created at 20...<p>Ajouter des méthodes d'administration aux Queues / Souscriptions pour permettre l'export d'un message ou de l'ensemble des messages.<br/>
Prévoir une méthode permettant l'import d'un groupe de message.</p>
<i>[JORAM-307] created at 2018-11-15 08:13:46 by freyssinet, version JORAM_5_15_0</i>https://gitlab.ow2.org/joram/joram/-/issues/314265Bad behavior in Rest/JMS API2021-04-13T15:50:10ZSerge LacourteBad behavior in Rest/JMS API<p>The receive-next-message link get next message if the corresponding message doesn't exist.</p>
<i>[JORAM-276] created at 2017-07-21 09:19:46 by freyssinet, version JORAM_5_13_0</i><p>The receive-next-message link get next message if the corresponding message doesn't exist.</p>
<i>[JORAM-276] created at 2017-07-21 09:19:46 by freyssinet, version JORAM_5_13_0</i>https://gitlab.ow2.org/joram/joram/-/issues/314261REST MapMessage2021-04-13T15:49:46ZSerge LacourteREST MapMessage<p>Le message (MapMessage) doit etre transforme dans un format Json a la place d'une hashtable java serialise. </p>
<i>[JORAM-272] created at 2017-07-05 16:29:28 by tachker, version JORAM_5_14_0</i><p>Le message (MapMessage) doit etre transforme dans un format Json a la place d'une hashtable java serialise. </p>
<i>[JORAM-272] created at 2017-07-05 16:29:28 by tachker, version JORAM_5_14_0</i>https://gitlab.ow2.org/joram/joram/-/issues/314224Duplication de messages en entrée de la queue d'acquisition.2021-04-13T15:46:00ZSerge LacourteDuplication de messages en entrée de la queue d'acquisition.<p>Le mécanisme d'acquisition de messages JMS (classe JMSAcquisition) peut délivrer plusieurs fois un message en cas de panne ou de perte de connexion (rupture de connexion entre l'envoi de la notification d'acquisition) et le commit JMS...<p>Le mécanisme d'acquisition de messages JMS (classe JMSAcquisition) peut délivrer plusieurs fois un message en cas de panne ou de perte de connexion (rupture de connexion entre l'envoi de la notification d'acquisition) et le commit JMS.</p>
<p>La queue d'acquisition traite la redélivrance d'un message mais ne garde l'historique que d'un message alors que l'ordre des messages délivrés pourrait être modifié suite au rollback.</p>
<i>[JORAM-235] created at 2015-05-21 10:34:13 by freyssinet, version JORAM_5_9_0</i>https://gitlab.ow2.org/joram/joram/-/issues/314213Contrôle de flux pour les souscriptions2021-04-13T15:44:52ZSerge LacourteContrôle de flux pour les souscriptions<p>Actuellement le contrôle de flux limite le nombre de messages envoyés à chaque délivrance avec le test suivant (méthode deliver() de ClientSubscription) :</p>
<p>if (active < deliverables.size())</p>
<p>Ce contrôle ne limite pas le ...<p>Actuellement le contrôle de flux limite le nombre de messages envoyés à chaque délivrance avec le test suivant (méthode deliver() de ClientSubscription) :</p>
<p>if (active < deliverables.size())</p>
<p>Ce contrôle ne limite pas le nombre de messages en cours d'acquittement. Ces messages sont représentés par la table 'deliveredIds'.</p>
<p>La taille de la table 'deliveredIds' ne doit pas être trop grande. En effet les identifiants sont stockés en bloc (dans ClientSubscription). Si le nombre de messages dépasse 100.000, alors la table stockée prend plusieurs Mo et peut même dépasser la taille d'un fichier de log.</p>
<p>En remplaçant 'deliverables' par 'deliveredIds', le contrôle de flux permet de limiter le nombre de messages en attente. La taille de 'deliveredIds' est inférieur à 'active'.</p>
<p>if (active < deliveredIds.size())</p>
<p>Par ailleurs, la méthode 'acknowledge' devrait appeler 'deliver' quand la taille de 'deliveredIds' repasse sous un seuil, par exemple active/2.</p>
<i>[JORAM-224] created at 2015-02-03 17:50:15 by feliot, version JORAM_5_10_0</i>https://gitlab.ow2.org/joram/joram/-/issues/314204Erreur lors du close avec des souscriptions partagées2021-04-13T15:43:59ZSerge LacourteErreur lors du close avec des souscriptions partagées<p>La variable 'sub' semble être nulle (probablement lié à une fermeture faite deux fois pour le même 'sub').</p>
<p>UserAgent.doReact : UserAgent:#0.0.1026 - unexpected error during request: (org.objectweb.joram.shared.client.CnxCloseR...<p>La variable 'sub' semble être nulle (probablement lié à une fermeture faite deux fois pour le même 'sub').</p>
<p>UserAgent.doReact : UserAgent:#0.0.1026 - unexpected error during request: (org.objectweb.joram.shared.client.CnxCloseRequest@5c4a65ec<br/>
,requestId=-1,target=null)<br/>
java.lang.NullPointerException<br/>
at org.objectweb.joram.mom.proxies.UserAgent.doReact(UserAgent.java:2503<br/>
)<br/>
at org.objectweb.joram.mom.proxies.UserAgent.doReact(UserAgent.java:1561<br/>
)<br/>
at org.objectweb.joram.mom.proxies.UserAgent.reactToClientRequest(UserAg<br/>
ent.java:1305)<br/>
at org.objectweb.joram.mom.proxies.UserAgent.doReact(UserAgent.java:805)<br/>
at org.objectweb.joram.mom.proxies.UserAgent.react(UserAgent.java:498)<br/>
at com.scalagent.batchengine.BatchEngine.run(BatchEngine.java:1246)<br/>
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.<br/>
java:1145)<br/>
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor<br/>
.java:615)<br/>
at java.lang.Thread.run(Thread.java:744)</p>
<i>[JORAM-215] created at 2015-01-23 18:13:38 by feliot, version JORAM_5_10_0</i>