We apologize for untranslated text, you can use the Google Translation button to get an automatic translation of the web page in the language of your choice.

[ JCMS 7.0.4 ] [ Weblogic 10.3 ] NullPointerException lors de l'écriture des propriétés

Sébastien Raphel · on 9/26/12 at 10:36 AM

Bonjour,
je suis dans une situation étonnante. J'ai 2 webapps JCMS installées sous Weblogic (chacune avec son serveur Weblogic) et les 2 webapps reproduisent le même problème. Ce qui est étonnant est la manière dont ce bug se produit. En effet, il ne se produit qu'à partir d'un certain temps (que je n'ai pas pu identifié) après le démarrage du serveur. Je m'explique :
Lors de la modification d'une propriété depuis l'interface d'administration, JCMS me renvoie une page d'erreur m'indiquant

Error 500--Internal Server Error 
From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1:
10.5.1 500 Internal Server Error
The server encountered an unexpected condition which prevented it from fulfilling the request.

et dans les logs j'ai le message suivant :

####<Sep 26, 2012 10:15:04 AM CEST> <Notice> <Stdout> <slapp352> <jcmServer2> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1348647304013> <BEA-000000> <10:15:04,013 INFO [Intranet Web 2.0] [Channel] - update and save properties> 
####<Sep 26, 2012 10:15:04 AM CEST> <Error> <HTTP> <slapp352> <jcmServer2> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1348647304019> <BEA-101017> <[ServletContext@1132952642[app:replica module:intranet path:/intranet spec-version:2.5]] Root cause of ServletException.
java.lang.NullPointerException
	at com.jalios.util.JProperties.firePropertiesChange(JProperties.java:74)
	at com.jalios.jcms.Channel.updateAndSaveProperties(Channel.java:7204)
	at com.jalios.jcms.handler.PropertiesHandler.processAction(PropertiesHandler.java:303)
	at com.jalios.jcms.handler.JcmsFormHandler.validate(JcmsFormHandler.java:251)
	at jsp_servlet._admin.__adminproperties._jspService(__adminproperties.java:4050)
	at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
	at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
	at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
	at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
	at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
	at com.jalios.jcms.servlet.FriendlyURLFilter.doFilter(FriendlyURLFilter.java:119)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
	at com.jalios.jcms.servlet.GZIPFilter.doFilter(GZIPFilter.java:56)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
	at com.jalios.jcms.servlet.ChromeFrameFilter.doFilter(ChromeFrameFilter.java:58)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
	at com.jalios.jcms.servlet.InitFilter.doFilter(InitFilter.java:210)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
	at com.jalios.jcms.db.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:38)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
	at com.jalios.jcms.upload.MultipartFilter.doFilter(MultipartFilter.java:181)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
	at com.jalios.jcms.ajax.AjaxFilter.doFilter(AjaxFilter.java:56)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3730)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
	at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
	at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
	at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
	at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

Pourtant le fichier custom.prop est bien modifié et enregistré et les propriétés prises en compte !
Et le plus "bizarre" c'est que si je redémarre le serveur Weblogic, je peux enregistrer les propriétés sans avoir cette erreur (donc avoir un fonctionnement normal). C'est seulement après un certain temps ou une action inconnue de weblogic que l'enregistrement des propriétés me renvoie cette erreur.

Avez-vous une piste, une idée, une hypothèse ? niveau JCMS ? niveau weblogic ? des vérifications de configurations de weblogic ?
merci d'avance

12 pts
Ronan Kerdudou · on 9/26/12 at 11:30 AM

ça doit arriver après l'enregistrement des données quand JCMS propage l'information du changement des propriétés à l'ensemble des classes qui écoutent ces changements.

Pouvez vous donner la liste des modules que vous utilisez ?

Vous pouvez aussi chercher si dans le code spécifique vous inscrivez un listener qui vaudrait 'null' ?

0 pts
Sébastien Raphel · on 9/26/12 at 2:08 PM

Voici la liste des modules que nous utilisons, tous dans leur dernière version pour JCMS 7.0.4 :

  •  Module Annuaire
  •  Module Blogue
  •  Module Bureau Virtuel
  •  Module Calendrier
  •  Module Carrousel
  •  Module Category Rights
  •  Module DBForum
  •  Module Dev Tools
  •  Module Espaces Collaboratifs
  •  Module Espaces de conversations
  •  Module Explorer
  •  Module Favoris
  •  Module Formulaires Dynamiques
  •  Module Gantt
  •  Module Google Maps
  •  Module Indexation des documents
  •  Module Newsletter
  •  Module Portlet Nuage
  •  Module Prévisualisation Temporelle
  •  Module Sinequa
  •  Module Sondage DB
  •  Module Top Publications
  •  Module Wiki
  •  Module de base de données Oracle
  •  Module de fusion des statistiques


Je n'ai pas mis les modules du projet. Je vais y jeter un oeil pour voir si un listener est déclaré. Si je comprends bien, l'un des listener est à null au moment de la propagation des changements. Ca peut poser problème !
Y at-il un moyen d'identifier précisément le listener manquant (en activant le niveau TRACE ou DEBUG dans les logs pour la classe com.jalios.util.JProperties, non ?) ?

0 pts
Olivier Jaquemet · on 9/26/12 at 6:43 PM

Salut Sébastien,

Pour faciliter l'analyse de ce pb, et si tu veux bien participer à cette instrumentation, nous pouvons te communiquer le fichier source de la classe JProperties.

Tu pourras ainsi instrumenter les méthodes :

  • addPropertiesListener(listener) pour tracer l'invocation d'un appel avec un paramètre null et trouver le coupable
  • éventuellement getListenerSet() qui n'est normalement invoquée que en interne par la classe JProperties elle même.

Ceci à titre exceptionnel, car nous ne sommes pas open source, (tu le sais déjà mais je le reprécise pour la communauté) mais dans ce cas nous pouvons tous gagner en robustesse !

Je t'ai envoyé un mail avec la source correspondant à la classe dans JCMS 7.0.4

0 pts
Sébastien Raphel · on 9/27/12 at 9:53 AM

Salut Olivier,
c'est avec plaisir que je participe à cette instrumentation. J'ai bien reçu la source par mail je t'en remercie. Je regarde ça et te tiens au courant dans la journée, dès que je reproduit le bug avec la classe modifiée.
un grand merci

0 pts
nicolas delrue · on 11/9/12 at 12:34 PM

Bonjour,

Je me permet de renseigner aussi ce post car nous obtenons aussi ce souci sur tous nos projets en 7.1.1 et 7.0.4 sans exception sans pour le moment avoir trouvé une piste.

0 pts