<servlet-mapping>
<servlet-name>OnlineServlet</servlet-name>
<url-pattern>/OnlineServlet</url-pattern>
</servlet-mapping>
------
[1/26/09 23:30:14:166 EST] 00000047 SystemOut O Caused by: java.lang.NullPointerException
at com.ibm.ws.wswebcontainer.webapp.WebAppConfigurationHelper.constructServletMappings(WebAppConfigurationHelper.java:405)
at com.ibm.ws.wswebcontainer.webapp.WebAppConfigurationHelper.createConfiguration(WebAppConfigurationHelper.java:147)
at com.ibm.ws.webcontainer.metadata.WebMetaDataFactory.createMetaData(WebMetaDataFactory.java:169)
at com.ibm.ws.runtime.component.MetaDataMgrImpl.createMetaDataFromFactories(MetaDataMgrImpl.java:135)
at com.ibm.ws.runtime.component.MetaDataMgrImpl.createMetaData(MetaDataMgrImpl.java:243)
at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:561)
at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:814)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:948)
at com.ibm.ws.runtime.component.ApplicationMgrImpl$1.run(ApplicationMgrImpl.java:1478)
at com.ibm.ws.security.auth.ContextManagerImpl.runAs(ContextManagerImpl.java:3811)
at com.ibm.ws.security.auth.ContextManagerImpl.runAsSystem(ContextManagerImpl.java:3893)
at com.ibm.ws.security.core.SecurityContext.runAsSystem(SecurityContext.java:245)
A Blog about Software Development. Software development is the act of developing a software product.
Monday, January 26, 2009
J2EE/Java Grips 1: Websphere is garbage, OMFG 1
I was debugging a websphere/RAD issue, thinking that maybe I had messed up a configuration way down in the cellar of RAD's infinite supply of configurations. Maybe the flux-capacitor node mx3e cell.xml missed the rptptppt_Vn_ setting. No my friends, RAD seemed to have bombed on a missing servlet tag in the web.xml. NPE, NullPointer on not having the most basic setting in a J2EE app. Don't get me wrong, a developer should have the setting, but something more helpful like 'You are missing your servlet mapping' would have been helpful. here is the configuration and the error.
Thursday, January 15, 2009
Simple Agents/Concurrent Programming in Clojure
"All concurrency issues boil down to coordinating access to mutable state. The less mutable state, the easier it is to ensure thread safety."
-- Java Concurrency in Practice (from Bill Clementson's blog)
Like Erlang, Clojure is becoming a very powerful concurrent oriented language. It is designed to be a simple language making it easier to coordinate access to resources.
"Agents provide independent, asynchronous change of individual locations. Agents are bound to a single storage location for their lifetime, and only allow mutation of that location (to a new state) to occur as a result of an action"
-- http://clojure.org/agents
Here is a simple example of two agent functions 'agent' and 'send':
;;
;; Simple example of agents (concurrent coding) in Clojure
;; The send function waits/hangs and then returns the result.
;;
;; Note: only the calls to 'Thread.sleep' in the main program
;; block the main thread.
;; @see http://clojure.org/agents
;;
;; Function definition: (agent <state>). Example, (agent "Init")
;;
;; Function definition: (send <agent> <func> & <args>).
;; Example, (send abc (fn [_] "Done"))
;; (Author: Berlin Brown (on 1/5/2009))
;;
;; (A) Define the agent as 'abc'.
(def abc
(agent "Initial Value of Agent = This string"))
;; (B) The function to send a message to the agent.
(defn go []
(send abc
(fn [_]
;; Wait here for 5 seconds)
(. java.lang.Thread sleep 5000)
(println "Print from concurrent send agent")
"1 2 3 4 (Final Value, I am done)")))
;; (C) Main entry point of the program
(defn main []
(println "Running")
;; (1) Send a message to 'abc' agent by calling 'go'
(go)
;; (2) Wait for 1 second
(. java.lang.Thread sleep 1000)
;; (3) What is the value, we shouldn't be done yet?
(println @abc)
;; (4) Wait some more, 6 more seconds
(. java.lang.Thread sleep 6000)
;; (5) Hopefully after 7 seconds, the agent is done,
;; Check the value.
(println @abc)
;; Wait a little bit more and then print done.
(. java.lang.Thread sleep 12000)
(. System exit 1)
(println "\nDone"))
(main)
;; End of Script
Output of Running Program
Running
Initial Value of Agent
Print from send agent
1 2 3 4 (Final Value, I am done)
Resources:
Clojure COP/OOP Article
http://clojure.org/agents
-----
Edited: Here is an example using a Java Thread approach (some code not included):
(defn file-monitor-loop [file]
(let [delay-t (prop-int resources-core-sys "Octane_Sys_filemonitor_delay")
enable-file-mon (prop-bool resources-win-opts "file_monitor_enabled")
pth (. file getAbsolutePath)]
(when enable-file-mon
(.start (new Thread (fn []
(while (not (. shell isDisposed))
(Thread/sleep delay-t)
(when (file-modified? file)
;; Reload the file as it grows and refresh
;; the file.
(open-file pth true)))))))))
-----
Subscribe to:
Posts (Atom)