Uploaded image for project: 'LAMS Development'
  1. LAMS Development
  2. LDEV-1693

Delays in creating learner progress data results in a blank learner frameset for the learner

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Minor
    • Resolution: Cannot Reproduce
    • Affects Version/s: 2.0.4
    • Fix Version/s: 2.4
    • Component/s: Learner
    • Labels:
      None

      Description

      When a learner opens the learner client for a new lesson, the server sets up the Learner Progress records. If the server is still setting up the records when Flash tries to get the progress data, the server throws this exception:

      java.lang.NullPointerException
             at org.lamsfoundation.lams.learning.service.LearnerService.getProgressDTOByLessonId(LearnerService.java:341)
             at sun.reflect.GeneratedMethodAccessor549.invoke(Unknown Source)
             at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
             at java.lang.reflect.Method.invoke(Method.java:585)
             at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287)
             at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:165)
             at $Proxy74.getProgressDTOByLessonId(Unknown Source)

      The problem is that there is not learner progress returned by the DAO call, and hence the conversion to a DTO throws a null ptr exception.

      This results in an empty frameset (see screendump).

      It would be much nicer if the server detected that there wasn't any progress and returned that information to Flash. Then Flash could retry getting the data, say 15 secs later.

      This is really a symptom of a performance issue on the server, or something else holding up the server. This problem isn't fatal - if the user closes the learner screen and reopens it then it will work fine, as the progress data will be set up. But it would be nice if we could catch the situation and recover/warn the user that the problem is due to the server responding too slowly. Would be nice to write something in the logs that the sysadmin could look out for when there is this problem, so they can see when there are performance issues.

      To reproduce this problem in development, put a breakpoint on the first line in LearnerService.joinLesson(Integer learnerId, Long lessonID)

        Activity

        There are no comments yet on this issue.

          People

          • Assignee:
            ernieg Ernie Ghiglione
            Reporter:
            fionam Fiona Malikoff
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development