Bonjour,
J'ai rencontré un léger problème dans l'utilisation du Weaver, je ne sais pas s'il s'agit d'un bug ...?
Pour créer un spool de connexion à la base de données, j'ai instancié un objet RequestDispatcher -> RDdb1.
Ensuite j'ai appliqué l'aspect RequestDispatcher, pour le choix du label, on propose alors "kernel" et "RDdb1" ... c'est à dire le label de l'objet lui-même.
Je me suis trompé en choisissant le label RDdb1.
Lors du lancement du framework, il y eu une boucle dans la console qui se termine par l'exception ci-dessous.
J'ai eu du mal à trouver l'origine de mon erreur.
Est-il possible de modifier le Weaver pour éviter de tomber dans cette situation bloquante ?
Merci d'avance pour votre attention.
<I>
= POINTCUT =
(Price#PriceCustom)
+----(RequestDispatcher.kernel0)
(PriceService#PriceService)
(CustomPriceService#CustomePriceService)
(Price#PriceStandard)
+----(RequestDispatcher.kernel0)
(UserForm#UserForm)
+----(RequestDispatcher.RDdb10)
[ERROR] Poincut (RequestDispatcher.RDdb10) cannot be created for bean : UserForm#UserForm
java.lang.StackOverflowError
at org.jdom.filter.ElementFilter.matches(ElementFilter.java:125)
at org.jdom.ContentList$FilterListIterator.initializeCursor(ContentList.java:985)
</I>
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Le Bean RequestDispatcher (qui est egalement un aspect), permet de recevoir une requete HTTP et de la rediriger vers un autre composant.
Ce mequanisme est un peu complexe a decrire ici dans ce forum, j'essaierai prochainement de faire un schema de son mode de fonctionnement dans le tutorial.
Le cas que vous decrivez n'est pas veritablement un bug : en choisisant "RDbd1" au lieu de "kernel" vous avez appliquer l'aspect RequestDispatcher sur lui-même.
Par analogie cela revient a créer une methode de type :
rdb1()
{
rdb1() ;
}
Ce qui provoque une stack overflow...
Le bon exemple produit un code proche de celui-ceci :
kernel()
{
rdb1() ;
}
L'application d'un aspect sur un composant est un mecanisme général.
Contrairement à l'aspect RequestDispatcher, d'autres aspects peuvent sans problème
être appliqué sur eux-même. On ne peut donc pas ajouter un contrôle dans le weaver
empêchant de selectionner le même coposant lors de l'application du pointcut.
Il faudra donc rester vigilant concernant l'aspect RequestDispatcher...
Cordialement.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Bonjour,
J'ai rencontré un léger problème dans l'utilisation du Weaver, je ne sais pas s'il s'agit d'un bug ...?
Pour créer un spool de connexion à la base de données, j'ai instancié un objet RequestDispatcher -> RDdb1.
Ensuite j'ai appliqué l'aspect RequestDispatcher, pour le choix du label, on propose alors "kernel" et "RDdb1" ... c'est à dire le label de l'objet lui-même.
Je me suis trompé en choisissant le label RDdb1.
Lors du lancement du framework, il y eu une boucle dans la console qui se termine par l'exception ci-dessous.
J'ai eu du mal à trouver l'origine de mon erreur.
Est-il possible de modifier le Weaver pour éviter de tomber dans cette situation bloquante ?
Merci d'avance pour votre attention.
<I>
= POINTCUT =
(Price#PriceCustom)
+----(RequestDispatcher.kernel0)
(PriceService#PriceService)
(CustomPriceService#CustomePriceService)
(Price#PriceStandard)
+----(RequestDispatcher.kernel0)
(UserForm#UserForm)
+----(RequestDispatcher.RDdb10)
[ERROR] Poincut (RequestDispatcher.RDdb10) cannot be created for bean : UserForm#UserForm
java.lang.StackOverflowError
at org.jdom.filter.ElementFilter.matches(ElementFilter.java:125)
at org.jdom.ContentList$FilterListIterator.initializeCursor(ContentList.java:985)
</I>
Bonjour,
Avant tout, une petite précision :
Le Bean RequestDispatcher (qui est egalement un aspect), permet de recevoir une requete HTTP et de la rediriger vers un autre composant.
Ce mequanisme est un peu complexe a decrire ici dans ce forum, j'essaierai prochainement de faire un schema de son mode de fonctionnement dans le tutorial.
Le cas que vous decrivez n'est pas veritablement un bug : en choisisant "RDbd1" au lieu de "kernel" vous avez appliquer l'aspect RequestDispatcher sur lui-même.
Par analogie cela revient a créer une methode de type :
rdb1()
{
rdb1() ;
}
Ce qui provoque une stack overflow...
Le bon exemple produit un code proche de celui-ceci :
kernel()
{
rdb1() ;
}
L'application d'un aspect sur un composant est un mecanisme général.
Contrairement à l'aspect RequestDispatcher, d'autres aspects peuvent sans problème
être appliqué sur eux-même. On ne peut donc pas ajouter un contrôle dans le weaver
empêchant de selectionner le même coposant lors de l'application du pointcut.
Il faudra donc rester vigilant concernant l'aspect RequestDispatcher...
Cordialement.