Uploaded image for project: 'Velocity'
  1. Velocity
  2. VELOCITY-595

ResourceManagerImpl.getResource() causes locking issues

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.5
    • Fix Version/s: 1.6
    • Component/s: Engine
    • Labels:
      None
    • Environment:
      jdk 1.5

      Description

      The ResourceManagerImpl.getResource() method is synchronized, which makes it difficult to share a Velocity Runtime between threads in an environment such as a j2ee web application.

      After upgrading Velocity to version 1.5 in Roller and running some performance tests I saw a very noticeable decrease in throughput for the application. I fired up jconsole and noticed that almost all of my app server threads were in a BLOCKED state and were waiting on the ResourceManagerImpl.getResource() method.

      In my particular case the difference resulted in a loss of 2/3 of my original ops/sec, which is pretty huge. After simply switching Velocity back to the 1.4 release and rerunning the test I saw the results I expected.

      I assume this is overactive use of Java synchronization because the developer guide suggests that the singleton model is "very appropriate model for use in a Servlet 2.2+ compliant web application".

        Attachments

        1. VELOCITY-595.jarkko.patch
          8 kB
          Nathan Bubna
        2. VELOCITY-595.patch
          2 kB
          Nathan Bubna

          Issue Links

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                agilliland Allen Gilliland
              • Votes:
                1 Vote for this issue
                Watchers:
                0 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: