Uploaded image for project: 'RichFaces'
  1. RichFaces
  2. RF-12896

Richfaces TopicsContext.lookup() returns null after redeployment when Richfaces is deployed as a module in JBoss EAP 6

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: Major
    • Resolution: Duplicate Issue
    • Affects Version/s: 4.2.3.Final
    • Fix Version/s: None
    • Component/s: component-push/poll
    • Labels:
      None
    • Steps to Reproduce:
      Hide

      1) Create RichFaces module in EAP 6 (copy modules.zip to EAP)
      2) Deploy jboss-as-helloworld-rf.war
      3) Open http://localhost:8080/jboss-as-helloworld-rf/. Everything should work normally.
      4) Re-deploy the .war. There should be no errors during re-deployment.
      5) Open http://localhost:8080/jboss-as-helloworld-rf/. This time you'll get an error page dealing with being unable to invoke the post construct method. This error ultimately is due to TopicsContext.lookup() returning null.

      Show
      1) Create RichFaces module in EAP 6 (copy modules.zip to EAP) 2) Deploy jboss-as-helloworld-rf.war 3) Open http://localhost:8080/jboss-as-helloworld-rf/ . Everything should work normally. 4) Re-deploy the .war. There should be no errors during re-deployment. 5) Open http://localhost:8080/jboss-as-helloworld-rf/ . This time you'll get an error page dealing with being unable to invoke the post construct method. This error ultimately is due to TopicsContext.lookup() returning null.
    • Workaround:
      Workaround Exists
    • Workaround Description:
      Hide

      Workaround is to change the code as shown below

      import javax.faces.context.FacesContext;
      import org.richfaces.application.ServiceTracker;
      import org.richfaces.application.push.PushContextFactory;
      ...
          @PostConstruct
          public void postContruct() {
              TopicsContext topicsContext = TopicsContext.lookup();
              if(topicsContext == null)
              {
                  log(" - topicsContext is NULL");
                  FacesContext facesContext = FacesContext.getCurrentInstance();
                  ServiceTracker.getService(PushContextFactory.class).getPushContext().init(facesContext);
                  topicsContext = TopicsContext.lookup();
              }
              pushTK = new TopicKey(PUSH_TOPIC);
              // this will fail if topicsContext is null (NPE)
              topicsContext.getOrCreateTopic(pushTK);
                      ...
          }
      

      Show
      Workaround is to change the code as shown below import javax.faces.context.FacesContext; import org.richfaces.application.ServiceTracker; import org.richfaces.application.push.PushContextFactory; ... @PostConstruct public void postContruct() { TopicsContext topicsContext = TopicsContext.lookup(); if(topicsContext == null) { log(" - topicsContext is NULL"); FacesContext facesContext = FacesContext.getCurrentInstance(); ServiceTracker.getService(PushContextFactory.class).getPushContext().init(facesContext); topicsContext = TopicsContext.lookup(); } pushTK = new TopicKey(PUSH_TOPIC); // this will fail if topicsContext is null (NPE) topicsContext.getOrCreateTopic(pushTK); ... }

      Description

      Our application uses Richfaces push functionality and makes a call to lookup the TopicsContext in the constructor of one of a backing bean. The code looks like this below. This works fine when Richfaces is packaged in the war, however when we extract the richfaces jars into a module and have our applications declare a module dependency, there is an issue when we redeploy the application. It works fine when JBoss is first started, but if we redeploy the application while JBoss is running, we are getting a NullPointerException in our application because TopicsContext.lookup() is returning null.

          @PostConstruct
          public void postContruct() {
            TopicsContext topicsContext = TopicsContext.lookup();
            if(topicsContext == null)
              log(" - topicsContext is NULL");
            pushTK = new TopicKey(PUSH_TOPIC);
            // this will fail if topicsContext is null (NPE)
            topicsContext.getOrCreateTopic(pushTK);
          }
      

        Gliffy Diagrams

          Attachments

          1. jboss-as-helloworld-rf.war
            11 kB
          2. modules.zip
            8.86 MB
          3. RichBean.java
            2 kB

            Issue Links

              Activity

                People

                • Assignee:
                  Unassigned
                  Reporter:
                  ivassile Ilia Vassilev
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  3 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: