Re: Inconsistent and strange NPE when initializing Velocity
Will Glass-Husain <[email protected]>
| Newsgroups | gmane.comp.jakarta.velocity.user |
|---|---|
| Message-ID | <CADDz7ZuY8k3fOU4i1C-4JPH-hhtahS=s2eGjmJ0Kb3qdTH51hw@mail.gmail.com> |
You only need to initialize Velocity once. Performance is much better that way. WILL On Wed, Jun 6, 2012 at 2:37 PM, Bradley Wagner < [email protected]> wrote: > The odd part about that is that while I could see this being a race > condition... once Velocity gets into this state it doesn't matter how many > times we call Velocity.init, it returns the NPE every time. I guess I > should have mentioned that in the original post. Basically once it starts > returning NPE our only recourse is to restart Tomcat, which fixes the > problem, until it pops up again. > > On Wed, Jun 6, 2012 at 5:35 PM, Bradley Wagner < > [email protected]> wrote: > > > Ha, that's a good question. Yes, we're initializing Velocity LOTS of > > times. Basically every time we use it to create these messages in our > > message util. I'm guessing that's not recommended? > > > > > > On Wed, Jun 6, 2012 at 1:53 PM, Will Glass-Husain < > [email protected]>wrote: > > > >> Hi Bradley, > >> > >> Are you initializing Velocity multiple times? > >> > >> Though I haven't heard of this issue before, it sounds like a race > >> condition, perhaps if the initialization is called twice at the same > time. > >> > >> WILL > >> > >> On Wed, Jun 6, 2012 at 8:37 AM, Bradley Wagner < > >> [email protected]> wrote: > >> > >> > Hi, > >> > > >> > I sent this message before I had subscribed to the list so I wasn't > >> sure if > >> > the original made it. My apologies if this is a duplicate. > >> > > >> > One of our clients running our software is *occasionally* running into > >> the > >> > stack trace at the bottom when Velocity is initialized. A restart > tends > >> to > >> > fix this problem. But it pops back up after running the system for a > >> while. > >> > > >> > They're running: > >> > > >> > - Velocity 1.7 > >> > - Tomcat 6.0.35 > >> > - Using the 3.2 of the Apache Commons Collections library > >> > - Running Java 1.6.0_31 in Mac OS X 10.6.8 > >> > > >> > Unfortunately we don't have the ability to debug this problem > remotely, > >> so > >> > we can't see exactly what's going on, but having looked a bit at the > >> > Extended Properties class, it doesn't seem like it should be possible > to > >> > get an NPE at that line, because of the containsKey() check a few > lines > >> > before. > >> > > >> > java.lang.NullPointerException > >> > at > >> > > >> > org.apache.commons.collections.ExtendedProperties.clearProperty(ExtendedProperties.java:797) > >> > at > >> > > >> > org.apache.commons.collections.ExtendedProperties.setProperty(ExtendedProperties.java:722) > >> > at > >> > > >> > org.apache.commons.collections.ExtendedProperties.combine(ExtendedProperties.java:783) > >> > at > >> > > >> > org.apache.velocity.runtime.RuntimeInstance.setProperties(RuntimeInstance.java:657) > >> > at > >> > > >> > org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:645) > >> > at > >> > > >> > org.apache.velocity.runtime.RuntimeSingleton.init(RuntimeSingleton.java:226) > >> > at org.apache.velocity.app.Velocity.init(Velocity.java:97) > >> > at > >> > > >> > com.hannonhill.cascade.velocity.VelocityEngineUtil.generateMessage(VelocityEngineUtil.java:66) > >> > > >> > Also, here's the code that's calling the Velocity.init: > >> > > >> > Properties velocityProps = VelocityProperties.getProperties(); > >> > > >> > Velocity.init(velocityProps); > >> > > >> > Velocity Properties are just loading the following file contents into > a > >> > properties object: > >> > > >> > > >> > > >> > #---------------------------------------------------------------------------- > >> > # This controls if Runtime.error(), info() and warn() messages include > >> the > >> > # whole stack trace. The last property controls whether invalid > >> references > >> > # are logged. > >> > > >> > > >> > #---------------------------------------------------------------------------- > >> > runtime.log.error.stacktrace = false > >> > runtime.log.warn.stacktrace = false > >> > runtime.log.info.stacktrace = false > >> > runtime.log.invalid.reference = true > >> > > >> > > >> > #---------------------------------------------------------------------------- > >> > # Configuration for the Log4JLogSystem. > >> > # You must define the runtime.log.logsystem.class property to be: > >> > # org.apache.velocity.runtime.log.Log4JLogSystem > >> > # > >> > # You must also include Log4J's .jar files into your classpath. They > are > >> > # included with the Velocity distribution in the build/lib directory. > >> > # > >> > # There are several different options that you can configure. > >> > # Uncomment the ones that you want and also define their settings. > >> > > >> > > >> > #---------------------------------------------------------------------------- > >> > > >> > > >> > #---------------------------------------------------------------------------- > >> > # T E M P L A T E E N C O D I N G > >> > > >> > > >> > #---------------------------------------------------------------------------- > >> > input.encoding=UTF-8 > >> > output.encoding=UTF-8 > >> > > >> > > >> > #---------------------------------------------------------------------------- > >> > # F O R E A C H P R O P E R T I E S > >> > > >> > > >> > #---------------------------------------------------------------------------- > >> > # These properties control how the counter is accessed in the #foreach > >> > # directive. By default the reference $velocityCount will be available > >> > # in the body of the #foreach directive. The default starting value > >> > # for this reference is 1. > >> > > >> > > >> > #---------------------------------------------------------------------------- > >> > directive.foreach.counter.name = velocityCount > >> > directive.foreach.counter.initial.value = 1 > >> > > >> > > >> > #---------------------------------------------------------------------------- > >> > # T E M P L A T E L O A D E R S > >> > > >> > > >> > #---------------------------------------------------------------------------- > >> > resource.loader = class > >> > class.resource.loader.description = Velocity Classpath Resource Loader > >> > class.resource.loader.class = > >> > org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader > >> > > >> > > > > >