Commons DbUtils
  1. Commons DbUtils
  2. DBUTILS-2

[dbutils] QueryLoader cannot locate properties file on weblogic

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.0
    • Fix Version/s: 1.1
    • Labels:
      None
    • Environment:

      Operating System: other
      Platform: Other

      Description

      QueryLoader uses QueryLoader.class.getResourceAsStream(path) which looks for a
      resource relative to the current class (QueryLoader), you can use / to indicate
      classpath root but this does not work with weblogic possibly due to the way in
      which weblogic manages the classpath for .war files.

      If I use getClass().getClassLoader().getResourceAsStream(path) instead and dont
      use leading / for the path then this works locally and for weblogic.

      See method: loadQueries(String path)

        Activity

        Hide
        David Graham added a comment -

        The problem is that current users have a leading / in the path so changing this
        would be backwards incompatible. I did change
        QueryLoader.class.getResourceAsStream(path) to
        getClass().getResourceAsStream(path) so that if you're using a subclass of
        QueryLoader you will use whatever ClassLoader loaded your subclass instead of
        the one that loaded QueryLoader.

        You might try writing and using an empty subclass of QueryLoader to see if this
        change fixes the issue. If not, loadQueries() is now protected so you could
        override loadQueries() and change how the ClassLoader is handled (COM-1607).

        Also, it seems that for this problem to occur in WebLogic you must have
        commons-dbutils.jar someplace other than your app's WEB-INF/lib directory. If
        it's in some shared directory that WebLogic loads with a different ClassLoader
        than WEB-INF/lib jars, this problem is almost certain to happen. Try placing
        commons-dbutils.jar in your WEB-INF/lib directory.

        Show
        David Graham added a comment - The problem is that current users have a leading / in the path so changing this would be backwards incompatible. I did change QueryLoader.class.getResourceAsStream(path) to getClass().getResourceAsStream(path) so that if you're using a subclass of QueryLoader you will use whatever ClassLoader loaded your subclass instead of the one that loaded QueryLoader. You might try writing and using an empty subclass of QueryLoader to see if this change fixes the issue. If not, loadQueries() is now protected so you could override loadQueries() and change how the ClassLoader is handled ( COM-1607 ). Also, it seems that for this problem to occur in WebLogic you must have commons-dbutils.jar someplace other than your app's WEB-INF/lib directory. If it's in some shared directory that WebLogic loads with a different ClassLoader than WEB-INF/lib jars, this problem is almost certain to happen. Try placing commons-dbutils.jar in your WEB-INF/lib directory.

          People

          • Assignee:
            Unassigned
            Reporter:
            Jason Anderson
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development