Tags: eclipse, OS-X, vim
Categories: Java, OpenSource
Tags: Java, jsp, tomcat
Part of the beauty of JSP development is the easy of trying out the change. All you have to do is edit the JSP file, save it and reload the page. Yesterday I got caught by surprise by not being able to do exactly that.
I saw some strange behaviour in an EL expression used JSP tag. As it was nothing ATG specific, I decided to try it out in plain old Tomcat rather than full ATG application. So I located the instance of Tomcat 5.5 (I always have couple of Tomcats lying around) and being lazy, I decided to inject the change into out-of the box jsp-examples Web application that comes with it.
I picked a victim JSP to be modified (jsp2/el/basic-comparison.jsp), made my change, reloaded page – nothing. I must have forgotten to save the file, did it again – nothing. Weird. Maybe browser caching. Cmd-Shift-R – nothing. Tried different browser – it showed unchanged file as before. Definitely not a browser issue.
The most logical explanation would be that I am editing different file than reloading: so I verified that the JSP file I edited is indeed under WebApps, that correct version of Tomcat was started. It was. There was no context redirection in place but to be sure, I unzipped pristine copy of apache-tomcat-5.5.31.zip (I have couple of those around as well), copied the JSP there, started it – same thing.
Few more experiments showed that no change to any JSP page under jsp-examples was visible. Removing JSP page caused 404 error as expected, but as soon as the page was there, it reappeared in original pristine version.
At this point, I started to suspect there is something fishy with the jsp-examples application itself. And it was. Brief check of the web.xml showed that it is quite long (24K) and that it contains declaration:
<servlet> <servlet-name>org.apache.jsp.jsp2.el.basic_002dcomparisons_jsp</servlet-name> <servlet-class>org.apache.jsp.jsp2.el.basic_002dcomparisons_jsp</servlet-class> </servlet> .... <servlet-mapping> <servlet-name>org.apache.jsp.jsp2.el.basic_002dcomparisons_jsp</servlet-name> <url-pattern>/jsp2/el/basic-comparisons.jsp</url-pattern> </servlet-mapping>
and suddenly it all made sense.
As long as the JSP file was present (Tomcat checks), it’s content was completely ignored and the request for /jsp2/el/basic-comparisons.jsp was served by COMPILED class /webapps/jsp-examples/WEB-INF/classes/org/apache/jsp/jsp2/el/basic_002dcomparisons_jsp.class – which of course did not contain any of the JSP file changes. When I removed file, Tomcat reported 404 a- the check for file existence comes before check for URL mapping apparently.
Moral of the story: being lazy causes one has to do more work but often learns something new. Had I created fresh new WebApp, none of these mappings were present and I would never realized what is Tomcat 5 doing behind the scenes.
Btw, in Tomcat 6 the mappings are gone and everything behaves as expected.
Although this is not technically a bug – but a feature – it is unfortunate that this optimization is used exactly in one application that can be used by newbie developer learning JSP for experimentation and not seeing it’s change can confuse the hell out of them. Especially when googling the issue will very likely sending him/her in completely wrong direction – suggesting reconfiguring Jasper, playing with valves and internals of Tomcat configuration.
After being away for over 4 months, I am back on Twitter. No, I did not miss the stream of 160 character mixture of news, trivia, white noise and occasional nuggets. Three main reasons:
1) Twitter seems to to become unavoidable – more and more services assume that one has twitter account. Many cyberevents rules start with “retweet this” or “tweet that” which of course one cannot do without Twitter account
2) Direct messaging via Twitter is one very convenient method how to add information to many service: new todo in Toodledo, Evernote and so on. It is MUCH faster than starting any client on an iPhone.
3) Twitter is after all the best medium for sharing links. Facebook does not cut it if you want to keep friend count reasonable so there is a gap between Facebook and LinkedIn
Alas, I am back, with my old handle ‘miroadamy’.
Hello – Nael and the gang …
Categories: Apple, lifehacks
Not any more.
I am definitely giving up on Things and Cultured Code products.
The reason why is sheer frustration from long wait on usable synchronization between Things on Mac, iPad and iPhone. Something that have been discussed, promised, chewed over 2 years and that still does not work.
In theory, you *can* synchronize as long as Mac and iPad / iPhone are in the same wireless network and can see each other. Things on Mac must be running and when Things on iPad/iPhone starts, they find each other and exchange data. It works most of the time, until it stops. With a bit of luck and some tweaking, one may be lucky and get it back to working order. Or not.
It happened to me several times that for no particular reason, iPad started the synchronization but never completed. Sometimes restarting iPad or Mac helped. Sometimes not. Sometimes I managed to fix the problem by unregistering the iPad and adding it back. When this remedy failed, in frustration, I tried to contact CC technical support. Here is the answer
Hi, Thank you for your inquiry. We are working on our own cloud sync solution that will allow for multi-device-sync (Mac / iPhone / iPad) using whatever network is available (Wifi / Edge / 3G). See: http://culturedcode.com/status That's the most requested feature currently. At present I can't give you a time frame, though, when this is going to be ready. Regards, Roman. Things Support Cultured Code
They have been working on synchronization for well over 2 years now, if I remember correctly, which is about 18 months too long. What kind of project management is that they still do not have a time frame for completion ? This is not perfectionism, this smells like Cultured Code is another product company that was great once but lost its mojo and capability to deliver. Things may be the most beautifully designed GTD application out there – but how long will pleasure from using shiny toy compensate for lack of basic functionality ?
After reviewing the landscape of GTD apps in 2011 I am now settling on combination of Toodledo and Evernote. Toodledo is basically a Web application with several iPad / iPhone clients. There is probably no OS-X desktop client that would come close to elegance of Things. Yet. And the web UI is kinda busy – but boy, it is *very* *very* functional. The synchronization with iPad works like charm, asynchronously.
And I doubt it took the Toodledo team 24 months to solve …