<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2315245884590246113</id><updated>2012-01-06T06:26:28.211+01:00</updated><category term='&quot;project management&quot;'/><category term='florence'/><category term='open lab developers blog'/><category term='teamwork'/><category term='print'/><category term='office space pictures'/><category term='open lab new site'/><category term='Tomcat multi host'/><category term='exhibition'/><category term='web 2.0 applications'/><category term='video'/><category term='design'/><category term='Tomcat vistual host'/><category term='promo'/><category term='work spell checker mac osx'/><category term='Java'/><category term='ugly hackers'/><category term='SEO friendly content management system'/><title type='text'>Open Lab Developers Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Teamwork's Blog</name><uri>http://www.blogger.com/profile/08359182302556772566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-358969410501527433</id><published>2009-09-04T18:05:00.003+02:00</published><updated>2009-09-04T18:10:12.261+02:00</updated><title type='text'>Continuing at blog.open-lab.com</title><content type='html'>This blog will continue at &lt;a href="http://blog.open-lab.com"&gt;blog.open-lab.com&lt;/a&gt;. See you there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-358969410501527433?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/358969410501527433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=358969410501527433' title='28 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/358969410501527433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/358969410501527433'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2009/09/continuing-at-blogopen-labcom.html' title='Continuing at blog.open-lab.com'/><author><name>Pietro Polsinelli</name><uri>http://www.blogger.com/profile/04722810331929686833</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>28</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-7532787729636248075</id><published>2009-08-20T12:32:00.006+02:00</published><updated>2009-08-20T14:05:20.266+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0 applications'/><title type='text'>Two new services for the web</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_e9-aPiYWGig/So07KERHVDI/AAAAAAAAAIo/oAyFB0fcrC4/s1600-h/question.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 191px; height: 290px;" src="http://3.bp.blogspot.com/_e9-aPiYWGig/So07KERHVDI/AAAAAAAAAIo/oAyFB0fcrC4/s320/question.gif" alt="" id="BLOGGER_PHOTO_ID_5372014974653125682" border="0" /&gt;&lt;/a&gt;One of the nicest things of the recent year’s development in the web has been the increasing availability of structured web services for specific needs, low cost, nice and easy to use. Some of these allow the providers of web sites and web applications to provide a richer service to their customers with little effort from the development/design point of view.&lt;br /&gt;Two well known examples of such services which we use are &lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt; and &lt;a href="https://uservoice.com/"&gt;UserVoice&lt;/a&gt;. What they provide is quite different, but they share the fact that they require a minimal effort to get the service running, and they provide a lot of functionality in a friendly environment.&lt;br /&gt;&lt;br /&gt;This actually has been happening for many years, but recently there are more and more, of good quality. I guess it is one of the features that vaguely contribute to the “Web 2.0 – web as a platform”.&lt;br /&gt;&lt;br /&gt;We recently decided that we will not just be users of such services, but we will start providing our own. So what we are now developing in Open Lab? Well, we are actually creating two new such services, which could be useful for all designers, developers and providers of web sites and web applications. One will help improve the services offered and the interactivity of any web site, the other will ease feedback from your web applications. In both cases, we will require little effort to the web site designer/developer, and offer something which should be beautiful.&lt;br /&gt;&lt;br /&gt;A major part of Open Lab is working on these new services, in particular &lt;a href="http://pupunzi.wordpress.com/"&gt;Matteo Bicocchi&lt;/a&gt;: see&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://www.open-lab.com/mb.ideas"&gt;http://www.open-lab.com/mb.ideas&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;for some of the graphic features that our new services will use.&lt;br /&gt;&lt;br /&gt;We hope to launch the beta program for this services before this autumn’s end; we'll announce it also here on the blog.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-7532787729636248075?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/7532787729636248075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=7532787729636248075' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/7532787729636248075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/7532787729636248075'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2009/08/two-new-services-for-web.html' title='Two new services for the web'/><author><name>Pietro Polsinelli</name><uri>http://www.blogger.com/profile/04722810331929686833</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_e9-aPiYWGig/So07KERHVDI/AAAAAAAAAIo/oAyFB0fcrC4/s72-c/question.gif' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-8771098164585604184</id><published>2009-07-03T09:40:00.005+02:00</published><updated>2009-07-03T10:07:39.397+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='&quot;project management&quot;'/><category scheme='http://www.blogger.com/atom/ns#' term='teamwork'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='promo'/><title type='text'>Escape from basecamp</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/open-lab/3674921945/" title="photo sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2656/3674921945_699876ba4e_m.jpg" alt="" style="border: 1px solid #999;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="margin-top: 0px;font-size:0.9em;" &gt;&lt;a href="http://www.flickr.com/photos/open-lab/3674921945/"&gt;Escape from basecamp (Latest Teamwork video promo)&lt;/a&gt;&lt;br /&gt;Inserito originariamente da &lt;a href="http://www.flickr.com/people/open-lab/"&gt;Open Lab&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;Latest Teamwork video promo produced by Open Lab.&lt;br /&gt;Script by Pietro Polsinelli, design by Pino Panzarella.&lt;br /&gt;&lt;br /&gt;View on YouTube: &lt;a href="http://www.youtube.com/user/teamworksoftware" rel="nofollow"&gt;www.youtube.com/user/teamworksoftware&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-8771098164585604184?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/8771098164585604184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=8771098164585604184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/8771098164585604184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/8771098164585604184'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2009/07/escape-from-basecamp.html' title='Escape from basecamp'/><author><name>Teamwork's Blog</name><uri>http://www.blogger.com/profile/08359182302556772566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2656/3674921945_699876ba4e_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-7757569235927795938</id><published>2009-07-01T15:55:00.021+02:00</published><updated>2009-07-01T17:22:04.303+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='florence'/><category scheme='http://www.blogger.com/atom/ns#' term='exhibition'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='print'/><title type='text'>Graphic design &amp;amp Convention signage for BTO2008</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm3.static.flickr.com/2549/3675095530_da6f3a0eda.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 410px; height: 307px;" src="http://farm3.static.flickr.com/2549/3675095530_da6f3a0eda.jpg" alt="" border="0" /&gt;&lt;/a&gt;After the success of the BTO 2008 first edition, for which we designed graphics, prints and convention signals, Open Lab is starting up the 2009 project edition.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Buy Tourism Online 2009&lt;/span&gt;, 16-17 November, Stazione Leopolda, Florence.&lt;br /&gt;&lt;br /&gt;Other photos on &lt;a href="http://www.flickr.com/photos/open-lab/sets/72157620621627965/" class="external"&gt;flickr&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;BTO It’s a debate and a commercial marketplace for the demand and offer of online tourism&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-7757569235927795938?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/7757569235927795938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=7757569235927795938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/7757569235927795938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/7757569235927795938'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2009/07/open-lab-designed-graphic-system-of-buy.html' title='Graphic design &amp;amp Convention signage for BTO2008'/><author><name>Teamwork's Blog</name><uri>http://www.blogger.com/profile/08359182302556772566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2549/3675095530_da6f3a0eda_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-1676989405945208033</id><published>2009-04-23T17:15:00.004+02:00</published><updated>2009-04-23T17:21:41.193+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ugly hackers'/><title type='text'>JBoss: thank you for the gadgets</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e9-aPiYWGig/SfCHa0vswpI/AAAAAAAAAIA/UIxz5fGPyGY/s1600-h/IMGP4306.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://2.bp.blogspot.com/_e9-aPiYWGig/SfCHa0vswpI/AAAAAAAAAIA/UIxz5fGPyGY/s400/IMGP4306.JPG" alt="" id="BLOGGER_PHOTO_ID_5327907254084354706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_e9-aPiYWGig/SfCHU-pzBTI/AAAAAAAAAH4/oL24jvyFlSU/s1600-h/IMGP4308.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_e9-aPiYWGig/SfCHU-pzBTI/AAAAAAAAAH4/oL24jvyFlSU/s400/IMGP4308.JPG" alt="" id="BLOGGER_PHOTO_ID_5327907153664738610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-1676989405945208033?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/1676989405945208033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=1676989405945208033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/1676989405945208033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/1676989405945208033'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2009/04/jboss-thank-you-for-gadgets.html' title='JBoss: thank you for the gadgets'/><author><name>Pietro Polsinelli</name><uri>http://www.blogger.com/profile/04722810331929686833</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_e9-aPiYWGig/SfCHa0vswpI/AAAAAAAAAIA/UIxz5fGPyGY/s72-c/IMGP4306.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-2391830198235704297</id><published>2009-04-15T11:48:00.006+02:00</published><updated>2009-04-15T12:03:22.467+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat multi host'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat vistual host'/><title type='text'>Tomcat configuration: multi hosting</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_e9-aPiYWGig/SeWuARK-ekI/AAAAAAAAAHQ/YuUXzTkybb8/s1600-h/000474.TWhosted.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 108px; height: 108px;" src="http://3.bp.blogspot.com/_e9-aPiYWGig/SeWuARK-ekI/AAAAAAAAAHQ/YuUXzTkybb8/s400/000474.TWhosted.png" alt="" id="BLOGGER_PHOTO_ID_5324853454068152898" border="0" /&gt;&lt;/a&gt;We recently extended our web server farm and we went through Tomcat 6 configuration trying to optimize performance and memory usage, in particular for our &lt;a href="http://www.twproject.com/onlineservice.page"&gt;Teamwork hosting service&lt;/a&gt;. We are quite satisfied of the final result, but it required quite an effort. During our research we found several tools and hacks that we would like to share. In particular we found it hard to configure multi hosting as documentation is lacking (see the references): here you'll find an example of how to configure multi hosting on Tomcat 6.&lt;br /&gt;&lt;br /&gt;In order to set a multi host we need to act on server.xml (in a standard Tomcat installation you can find it in CATALINA_HOME/conf) and change some parameters.&lt;br /&gt;The default form of parameters that we want to change is:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e9-aPiYWGig/SeWr5tjoEfI/AAAAAAAAAGw/4O8pkL3wEQQ/s1600-h/Capture_230.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 198px;" src="http://2.bp.blogspot.com/_e9-aPiYWGig/SeWr5tjoEfI/AAAAAAAAAGw/4O8pkL3wEQQ/s400/Capture_230.gif" alt="" id="BLOGGER_PHOTO_ID_5324851142405394930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In this example there is a single host and it's localhost and its appBase is in the default Tomcat location webapps directory.&lt;br /&gt;For ours settings we add our virtual host:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_e9-aPiYWGig/SeWsLICVTcI/AAAAAAAAAG4/-8IRL6foKt4/s1600-h/Capture_231.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 203px;" src="http://1.bp.blogspot.com/_e9-aPiYWGig/SeWsLICVTcI/AAAAAAAAAG4/-8IRL6foKt4/s400/Capture_231.gif" alt="" id="BLOGGER_PHOTO_ID_5324851441571286466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In this case the default Host is the same as before, localhost, but we added a new host "demo.twproject.com" and we specified the appBase that is different from Tomcat's default location. But notice that this setting is not enough to set a new virtual host:  we have to create (if it doesn't exist you must create it ) an xml context file relative to our new host under&lt;br /&gt;&lt;br /&gt;'CATALINA_HOME/conf/Catalina/hostName'.&lt;br /&gt;&lt;br /&gt;You can notice that directory structure has a correspondence with the engine and host name, if you want to be more general you should write structure for virtual hosts as&lt;br /&gt;&lt;br /&gt;'CATALINA_HOME/conf/EngineName/virtualHostName'&lt;br /&gt;&lt;br /&gt;In our specific case the application 'demo.twproject.com' has to answer as root of our registered url, so we created a context file named 'ROOT.xml' under&lt;br /&gt;&lt;br /&gt;'CATALINA_HOME/conf/Catalina/demo.twproject.com/',&lt;br /&gt;&lt;br /&gt;and the context is:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_e9-aPiYWGig/SeWsbxzWGEI/AAAAAAAAAHA/GJzCyDeGjRA/s1600-h/Capture_229.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 119px;" src="http://1.bp.blogspot.com/_e9-aPiYWGig/SeWsbxzWGEI/AAAAAAAAAHA/GJzCyDeGjRA/s400/Capture_229.gif" alt="" id="BLOGGER_PHOTO_ID_5324851727660619842" border="0" /&gt;&lt;/a&gt;As we have said before our web application is the main application (and default application) on our virtual host, so we &lt;span style="font-weight: bold;"&gt;have&lt;/span&gt; to put into a directory called ROOT. As you can see we have set the application path to empty simply because it is the main application.&lt;br /&gt;&lt;br /&gt;In this way we can set more virtual hosts that respond to different urls.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We set max and min Java heap size allocation using 'tomcat6w.exe', as we are on a Windows server (but what we’ve done before is valid in general) and set max and min at the same size, so we can allocate definitely a portion of memory for the JVM. For other settings such as GC optimized for multiprocessor machines, policy for scavengers, optimizations for throughput we have set a system variable named CATALINA_OPTS with our configuration:&lt;br /&gt;&lt;br /&gt;CATALINA_OPTS = -Xmn 600m -XX:-UseParallelOldGC -XX:+AggressiveOpts&lt;br /&gt;&lt;br /&gt;In other systems like Linux we can set max and min java heap size adding to CATALINA_OPTS parameters -Xmx and -Xms with max and min heap size.&lt;br /&gt;&lt;br /&gt;As web-applications manage utility we use &lt;a href="http://www.lambdaprobe.org/d/index.htm"&gt;Lambda probe&lt;/a&gt;, a useful tool for managing multiple web apps and get statistics on them and on the system:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e9-aPiYWGig/SeWswxpj2DI/AAAAAAAAAHI/rXd9FqVhEj0/s1600-h/Capture_232.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 225px;" src="http://2.bp.blogspot.com/_e9-aPiYWGig/SeWswxpj2DI/AAAAAAAAAHI/rXd9FqVhEj0/s400/Capture_232.gif" alt="" id="BLOGGER_PHOTO_ID_5324852088396830770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lambda Probe is easy to install on your Tomcat ( or other application-server ), because it is just a war that you deploy in your app-server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;References&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Java&lt;/span&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/performance/reference/whitepapers/tuning.html#section4.2.5"&gt;http://java.sun.com/performance/reference/whitepapers/tuning.html#section4.2.5&lt;/a&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp"&gt;http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp&lt;/a&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html"&gt;http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Tomcat 6&lt;/span&gt;&lt;br /&gt;&lt;a href="http://tomcat.apache.org/tomcat-6.0-doc/deployer-howto.html#A%20word%20on%20Contexts"&gt;http://tomcat.apache.org/tomcat-6.0-doc/deployer-howto.html#A%20word%20on%20Contexts&lt;/a&gt;&lt;br /&gt;&lt;a href="http://tomcat.apache.org/tomcat-6.0-doc/virtual-hosting-howto.html"&gt;http://tomcat.apache.org/tomcat-6.0-doc/virtual-hosting-howto.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Lambda Probe&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.lambdaprobe.org/d/index.htm"&gt;http://www.lambdaprobe.org/d/index.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;@author Roberto Baldi and Pietro Polsinelli&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-2391830198235704297?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/2391830198235704297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=2391830198235704297' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/2391830198235704297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/2391830198235704297'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2009/04/tomcat-configuration-multi-hosting_15.html' title='Tomcat configuration: multi hosting'/><author><name>Pietro Polsinelli</name><uri>http://www.blogger.com/profile/04722810331929686833</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_e9-aPiYWGig/SeWuARK-ekI/AAAAAAAAAHQ/YuUXzTkybb8/s72-c/000474.TWhosted.png' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-1610293045621394925</id><published>2009-02-24T11:57:00.002+01:00</published><updated>2009-02-24T12:14:36.647+01:00</updated><title type='text'>Not only programming</title><content type='html'>&lt;a href="http://pupunzi.wordpress.com"&gt;Matteo Bicocchi&lt;/a&gt; and &lt;a href="http://polsinelli.wordpress.com"&gt;Pietro Polsinelli&lt;/a&gt; have published their first short graphic novel: &lt;a href="http://issuu.com/pupunzi/docs/issue_2?mode=embed&amp;amp;documentId=090222221402-bf1cd9e992484afa91606623203daa2a&amp;amp;layout=grey"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-1610293045621394925?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/1610293045621394925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=1610293045621394925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/1610293045621394925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/1610293045621394925'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2009/02/not-only-programming.html' title='Not only programming'/><author><name>Pietro Polsinelli</name><uri>http://www.blogger.com/profile/04722810331929686833</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-359524256329837370</id><published>2008-09-29T13:09:00.006+02:00</published><updated>2008-09-29T13:26:21.004+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='office space pictures'/><title type='text'>Some office space pictures</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5i3h1CugZXo/SOC5sGASIrI/AAAAAAAAAOI/TGabR3gTjoA/s1600-h/IMG_0583.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_5i3h1CugZXo/SOC5sGASIrI/AAAAAAAAAOI/TGabR3gTjoA/s400/IMG_0583.jpg" alt="" id="BLOGGER_PHOTO_ID_5251401332691182258" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5i3h1CugZXo/SOC6Ibs06XI/AAAAAAAAAOQ/Imr9eh6zv9w/s1600-h/IMG_0587.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_5i3h1CugZXo/SOC6Ibs06XI/AAAAAAAAAOQ/Imr9eh6zv9w/s400/IMG_0587.jpg" alt="" id="BLOGGER_PHOTO_ID_5251401819551492466" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5i3h1CugZXo/SOC6W5j0vlI/AAAAAAAAAOY/I_1L8szPeo0/s1600-h/IMG_0593.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_5i3h1CugZXo/SOC6W5j0vlI/AAAAAAAAAOY/I_1L8szPeo0/s400/IMG_0593.jpg" alt="" id="BLOGGER_PHOTO_ID_5251402068084964946" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5i3h1CugZXo/SOC6g05xPTI/AAAAAAAAAOg/kVPtgOY3-Po/s1600-h/IMG_0589.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_5i3h1CugZXo/SOC6g05xPTI/AAAAAAAAAOg/kVPtgOY3-Po/s400/IMG_0589.jpg" alt="" id="BLOGGER_PHOTO_ID_5251402238633524530" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5i3h1CugZXo/SOC7A7dNMUI/AAAAAAAAAOo/zDz56mswMmg/s1600-h/platforms.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_5i3h1CugZXo/SOC7A7dNMUI/AAAAAAAAAOo/zDz56mswMmg/s400/platforms.jpg" alt="" id="BLOGGER_PHOTO_ID_5251402790148583746" border="0" /&gt;&lt;/a&gt; If you are wondering about our beautiful double monitor platforms, they are actually hand-made by Roberto; so forward any order to him :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-359524256329837370?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/359524256329837370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=359524256329837370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/359524256329837370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/359524256329837370'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2008/09/some-office-space-pictures.html' title='Some office space pictures'/><author><name>Teamwork's Blog</name><uri>http://www.blogger.com/profile/08359182302556772566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_5i3h1CugZXo/SOC5sGASIrI/AAAAAAAAAOI/TGabR3gTjoA/s72-c/IMG_0583.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-8930298637558095391</id><published>2008-08-22T17:38:00.007+02:00</published><updated>2008-08-22T18:51:57.590+02:00</updated><title type='text'>Managing multiple databases transparently over Hibernate</title><content type='html'>The JBlooming platform supports “Managing multiple databases transparently over Hibernate”; this allows also in case of multiple databases to keep using the pages and web components without worrying about Hibernate sessions and transactions. The technique is explained on Hibernate’s wiki, here:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.hibernate.org/450.html"&gt;http://www.hibernate.org/450.html&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Here we provide some sample code, specific to JBlooming framework. The web.xml file should poit to two configuration files, comma separated.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ThreadLocalPersistenceContextCarrier.java &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;package org.jblooming.persistence; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;public class ThreadLocalPersistenceContextCarrier { &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;  private Operator operator; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;  public PersistenceContext currentPC; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;  public Map&lt;/span&gt;&lt;/span&gt;    &lt;string,persistencecontext&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; persistenceContextMap=new Hashtable();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;PersistenceContext.java &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;package org.jblooming.persistence.hibernate; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;... &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;public class PersistenceContext { &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;  public Session session; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;  public PersistenceConfiguration persistenceConfiguration; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;  public static ThreadLocal&lt;/span&gt;&lt;threadlocalpersistencecontextcarrier style="color: rgb(51, 102, 255);"&gt; threadLocalPersistenceContextCarrier = new ThreadLocal&lt;threadlocalpersistencecontextcarrier&gt;() {&lt;br /&gt;&lt;br /&gt;  protected ThreadLocalPersistenceContextCarrier initialValue() {&lt;br /&gt;    return null;&lt;br /&gt;  }&lt;br /&gt;};&lt;br /&gt;________________________________________&lt;br /&gt;&lt;br /&gt;public PersistenceContext() {&lt;br /&gt;  this((Connection) null);&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;&lt;br /&gt;public PersistenceContext(Connection c) {&lt;br /&gt;  this(null, c);&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * this is not managed by the filter&lt;br /&gt; */&lt;br /&gt;public PersistenceContext(String persistenceConfigurationName, Connection c) {&lt;br /&gt;&lt;br /&gt;  if (JSP.ex(persistenceConfigurationName))&lt;br /&gt;    persistenceConfiguration = PersistenceConfiguration.persistenceConfigurations.get(persistenceConfigurationName);&lt;br /&gt;  else&lt;br /&gt;    persistenceConfiguration = PersistenceConfiguration.getFirstPersistenceConfiguration();&lt;br /&gt;&lt;br /&gt;  Sniffer interceptor = null;&lt;br /&gt;  if (Fields.TRUE.equals(ApplicationState.getApplicationSetting(SystemConstants.AUDIT)))&lt;br /&gt;    interceptor = new Sniffer();&lt;br /&gt;&lt;br /&gt;  Throwable t = null;&lt;br /&gt;  try {&lt;br /&gt;    if (c != null &amp;amp;&amp;amp; interceptor != null)&lt;br /&gt;      session = persistenceConfiguration.getSessionFactory().openSession(c, interceptor);&lt;br /&gt;    else if (c != null)&lt;br /&gt;      session = persistenceConfiguration.getSessionFactory().openSession(c);&lt;br /&gt;    else if (interceptor != null)&lt;br /&gt;      session = persistenceConfiguration.getSessionFactory().openSession(interceptor);&lt;br /&gt;    else&lt;br /&gt;      session = persistenceConfiguration.getSessionFactory().openSession();&lt;br /&gt;&lt;br /&gt;    session.beginTransaction();&lt;br /&gt;&lt;br /&gt;  } catch (Throwable e) {&lt;br /&gt;    t = e;&lt;br /&gt;  }&lt;br /&gt;  //by thowing the exception only if there is an exp AND session is null, in all other cases the external finally can close the session correctly&lt;br /&gt;  if (t != null &amp;amp;&amp;amp; session == null)&lt;br /&gt;    throw new PlatformRuntimeException(t);&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;public PersistenceContext(Session session) {&lt;br /&gt;  this.session = session;&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;public static Connection getNewConnection() throws ClassNotFoundException, SQLException {&lt;br /&gt;  PersistenceConfiguration pcf = PersistenceConfiguration.getDefaultPersistenceConfiguration();&lt;br /&gt;  Class.forName(pcf.driver_class);&lt;br /&gt;  return DriverManager.getConnection(pcf.driver_url, pcf.db_user_name, pcf.db_user_psw);&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;private void close(boolean thereHasBeenAnException) throws PersistenceException {&lt;br /&gt;&lt;br /&gt;  boolean exceptionInCommit = true;&lt;br /&gt;  if (!thereHasBeenAnException) {&lt;br /&gt;&lt;br /&gt;    try {&lt;br /&gt;      if (session.getTransaction() != null) {&lt;br /&gt;        session.getTransaction().commit();&lt;br /&gt;        exceptionInCommit = false;&lt;br /&gt;      }&lt;br /&gt;    } catch (Throwable throwable) {&lt;br /&gt;      Tracer.platformLogger.error(throwable);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if (thereHasBeenAnException || exceptionInCommit) {&lt;br /&gt;    try {&lt;br /&gt;      if (session.getTransaction() != null) {&lt;br /&gt;        session.getTransaction().rollback();&lt;br /&gt;      }&lt;br /&gt;    } catch (Throwable throwable) {&lt;br /&gt;      Tracer.platformLogger.error(throwable);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  try {&lt;br /&gt;    //as we are NOT using Hibernate managed context, in contrast with FrontControllerFilter, there is need after commit/rollbacdk to close session&lt;br /&gt;    session.close();&lt;br /&gt;  } catch (Throwable throwable) {&lt;br /&gt;    throw new PersistenceException(throwable);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;&lt;br /&gt;public void checkPoint() {&lt;br /&gt;  if (session.isOpen()) {&lt;br /&gt;    Transaction currentTransaction = session.getTransaction();&lt;br /&gt;    if (session.isOpen() &amp;amp;&amp;amp; currentTransaction != null &amp;amp;&amp;amp; !currentTransaction.wasRolledBack()) {&lt;br /&gt;      session.flush();&lt;br /&gt;      currentTransaction.commit();&lt;br /&gt;      session.beginTransaction();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;public void commitAndClose() throws PersistenceException {&lt;br /&gt;  close(false);&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;public void rollbackAndClose() {&lt;br /&gt;  try {&lt;br /&gt;    close(true);&lt;br /&gt;  } catch (PersistenceException e) {&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;public static PersistenceContext getDefaultPersistenceContext() {&lt;br /&gt;  return switchTo((String) null);&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;&lt;br /&gt;public static PersistenceContext switchToFirst() {&lt;br /&gt;  return switchTo(PersistenceConfiguration.getFirstPersistenceConfiguration().name);&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;&lt;br /&gt;public static PersistenceContext switchTo(Class persistentClass) {&lt;br /&gt;  PersistenceContext persistenceContext = get(persistentClass);&lt;br /&gt;  threadLocalPersistenceContextCarrier.get().currentPC = persistenceContext;&lt;br /&gt;  return persistenceContext;&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;&lt;br /&gt;public static PersistenceContext switchTo(String persistenceConfigurationName) {&lt;br /&gt;  // set last used as current&lt;br /&gt;  PersistenceContext pc = getByConfigurationName(persistenceConfigurationName);&lt;br /&gt;  threadLocalPersistenceContextCarrier.get().currentPC = pc;&lt;br /&gt;  return pc;&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;&lt;br /&gt;  public static PersistenceContext get(Class persistentClass) {&lt;br /&gt;  String conf = null;&lt;br /&gt;  for (String confName : PersistenceConfiguration.persistenceConfigurations.keySet()) {&lt;br /&gt;    PersistenceConfiguration pcf = PersistenceConfiguration.persistenceConfigurations.get(confName);&lt;br /&gt;    if (pcf.getHibernateConfiguration().getClassMapping(persistentClass.getName()) != null) {&lt;br /&gt;      conf = confName;&lt;br /&gt;      break;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  return getByConfigurationName(conf);&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;&lt;br /&gt;public static PersistenceContext get(IdentifiableSupport persistentObj) {&lt;br /&gt;  String className=PersistenceHome.deProxy(persistentObj.getClass().getName());&lt;br /&gt;  String conf = null;&lt;br /&gt;  for (String confName : PersistenceConfiguration.persistenceConfigurations.keySet()) {&lt;br /&gt;    PersistenceConfiguration pcf = PersistenceConfiguration.persistenceConfigurations.get(confName);&lt;br /&gt;    if (pcf.getHibernateConfiguration().getClassMapping(className) != null) {&lt;br /&gt;      conf = confName;&lt;br /&gt;      break;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  return getByConfigurationName(conf);&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;&lt;br /&gt;public static PersistenceContext get(String className) {&lt;br /&gt;  PersistenceContext pc;&lt;br /&gt;  try {&lt;br /&gt;    pc = PersistenceContext.get((Class) Class.forName(className));&lt;br /&gt;  } catch (ClassNotFoundException e) {&lt;br /&gt;    throw new PlatformRuntimeException(e);&lt;br /&gt;  }&lt;br /&gt;  return pc;&lt;br /&gt;}&lt;br /&gt;________________________________________&lt;br /&gt;&lt;br /&gt;private static PersistenceContext getByConfigurationName(String persistenceConfigurationName) {&lt;br /&gt;  //there could be already a closed session on it&lt;br /&gt;&lt;br /&gt;  ThreadLocalPersistenceContextCarrier localPersistenceContextCarrier = null;&lt;br /&gt;  // exists ThreadLocal?&lt;br /&gt;  if (threadLocalPersistenceContextCarrier.get() == null) {&lt;br /&gt;    localPersistenceContextCarrier = new ThreadLocalPersistenceContextCarrier();&lt;br /&gt;    threadLocalPersistenceContextCarrier.set(localPersistenceContextCarrier);&lt;br /&gt;  }&lt;br /&gt;  localPersistenceContextCarrier = threadLocalPersistenceContextCarrier.get();&lt;br /&gt;&lt;br /&gt;  // guess the right persistenceConfiguration Name&lt;br /&gt;  PersistenceConfiguration persistenceConfiguration;&lt;br /&gt;  if (JSP.ex(persistenceConfigurationName))&lt;br /&gt;    persistenceConfiguration = PersistenceConfiguration.persistenceConfigurations.get(persistenceConfigurationName);&lt;br /&gt;  else {&lt;br /&gt;    // if there is a current in use sedimented on threadlocal, give that&lt;br /&gt;    if (localPersistenceContextCarrier.currentPC != null)&lt;br /&gt;      persistenceConfiguration = localPersistenceContextCarrier.currentPC.persistenceConfiguration;&lt;br /&gt;      //no current sedimented on threadlocal, use the first, "main" one&lt;br /&gt;    else&lt;br /&gt;      persistenceConfiguration = PersistenceConfiguration.getFirstPersistenceConfiguration();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // exist a PersistentContext for this conf ?&lt;br /&gt;  PersistenceContext persistenceContext = localPersistenceContextCarrier.getPersistenceContext(persistenceConfiguration.name);&lt;br /&gt;  if (persistenceContext == null) {&lt;br /&gt;    persistenceContext = new PersistenceContext(persistenceConfigurationName, null);&lt;br /&gt;    localPersistenceContextCarrier.putPersistenceContext(persistenceContext);&lt;br /&gt;    System.out.println("Creating new pc thlocid:"+localPersistenceContextCarrier.hashCode());&lt;br /&gt;  } else {&lt;br /&gt;    // check if sessions are still good&lt;br /&gt;    if (persistenceContext.session != null &amp;amp;&amp;amp; !(persistenceContext.session.isOpen())) {&lt;br /&gt;      persistenceContext = new PersistenceContext(persistenceConfigurationName, null);&lt;br /&gt;      localPersistenceContextCarrier.putPersistenceContext(persistenceContext);&lt;br /&gt;      System.out.println("Creating currupted new pc thlocid:"+localPersistenceContextCarrier.hashCode());&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  return persistenceContext;&lt;br /&gt;}&lt;br /&gt;}&lt;/threadlocalpersistencecontextcarrier&gt;&lt;/threadlocalpersistencecontextcarrier&gt;&lt;/span&gt;     &lt;/string,persistencecontext&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-8930298637558095391?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/8930298637558095391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=8930298637558095391' title='33 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/8930298637558095391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/8930298637558095391'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2008/08/managing-multiple-databases.html' title='Managing multiple databases transparently over Hibernate'/><author><name>Teamwork's Blog</name><uri>http://www.blogger.com/profile/08359182302556772566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>33</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-5714447919865593539</id><published>2008-07-15T13:53:00.014+02:00</published><updated>2008-12-10T04:04:13.522+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Java as a practical development framework</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.stackoverflow.com/"&gt;&lt;img style="border: 1px solid black; margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_5i3h1CugZXo/SHyfWBjxrNI/AAAAAAAAAMg/K3zVdZRQAIk/s400/screen_0002.jpg" alt="" id="BLOGGER_PHOTO_ID_5223224868567362770" border="0" /&gt;&lt;/a&gt;A great source of informal discussion of ideas and news in the IT world is the podcast at &lt;a target="_blank" href="http://blog.stackoverflow.com/"&gt;blog.stackoverflow.com&lt;/a&gt; of the forthcoming community programming answers’ site &lt;a target="_blank" href="http://stackoverflow.com/"&gt;stackoverflow&lt;/a&gt;. The podcast is held by &lt;a target="_blank" href="http://www.joelonsoftware.com/"&gt;Joel Spolsky&lt;/a&gt; and &lt;a target="_blank" href="http://www.codinghorror.com/blog"&gt;Jeff Atwood&lt;/a&gt;, the first is too well known to need introduction, and Atwood is a open minded programmer who holds an interesting wide scoped IT blog, and is actually leading the new site development. I look forward to using Stackoverflow site when it goes live.&lt;br /&gt;&lt;br /&gt;They have many strong opinions, and you may agree on something and disagree on something else, but to me at least they are fun to listen, as they are both undeniably smart, and are the kind of people that would be nice to have for dinner, which is not always true for developers (but not the ones working in Open Lab :-) ).&lt;br /&gt;&lt;br /&gt;There is one of their opinions, sneaking in now and then, which I find particularly misleading, as I find it both outdated and wrong, and forcing it a bit, but not too much, it sums out as: good and practical oriented programmers (the good ones are those that studied C at the university (???)), are those that now are Windows programmers; the guys who studied Java and kept on with that, are either university freaks that pass their time speculating about trivialities, or lovers of complexity for the sake of it, who do trivial two table persistence by using horribly complex and slow combination of Enterprise Java Beans with on top some pattern implementations in bad code.&lt;br /&gt;&lt;br /&gt;Well, first of all, nobody has been using Enterprise Java Beans (EJB) in the classical sense in Java for years and years (we’re all using &lt;a target="_blank" href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt;, which lead to a revision of the concept of EJB, but nobody really cares about EJB anymore). The fact that you didn’t study pointers and memory allocation through C does not mean that don’t have a deep conceptual approach to programming; if you want to see something deep on the connection between the JVM and its implementation, subscribe the great &lt;a target="_blank" href="http://www.javaspecialists.eu/"&gt;Javaspecialist&lt;/a&gt; mailing list.&lt;br /&gt;&lt;br /&gt;To me there is a strong connection between productivity, quality of code and the features of your IDE. Jetbrain’s &lt;a target="_blank" href="http://www.jetbrains.com/idea/index.html"&gt;Intellij&lt;/a&gt; IDE for Java has made writing Java and web (html, Jsp, JavaScript) code and improving quality through refactoring very easy, and some of these features have been ported to the NET universe (&lt;a target="_blank" href="http://www.jetbrains.com/resharper/index.html"&gt;Resharper&lt;/a&gt;). Same with Hibernate -&gt; &lt;a target="_blank" href="http://www.hibernate.org/343.html"&gt;NHibernate&lt;/a&gt;, &lt;a target="_blank" href="http://lucene.apache.org/"&gt;Lucene&lt;/a&gt; -&gt; &lt;a target="_blank" href="http://incubator.apache.org/lucene.net/"&gt;Lucene.NET&lt;/a&gt;; notice that the flow of innovation is from Java to the others, not the other way round. The Java server and web development environment is great right from a pragmatic perspective. There are many other good practical reasons to pick Java as your choice; e.g. the incredibly wide spectrum of tools and API available, that no one currently can compete with; add to that the widest possible o.s. and database compatibility, and the possibility of deployment at &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; low costs (Linux+Tomcat+MySQL). Java is not&lt;span style="font-style: italic;"&gt; just&lt;/span&gt; the contemporary Cobol: it is &lt;span style="font-style: italic;"&gt;also&lt;/span&gt; the contemporary Cobol, so that it is welcome also in enterprises. That is what is great about being a Java developer: you can use the same technology to answer the needs of corporations or just three guys' company. There are concrete, practical reason to pick it as your server side development platform. So if you are building a server side application where you need the possibility of wide IT integration, like our &lt;a href="http://www.twproject.com/" target="_blank"&gt;Teamwork&lt;/a&gt;, Java is a relevant factor and a good choice. It is not a question of loving Java or NET or PHP: there are concrete reasons to prefer Java, both as a developer and as a customer.&lt;br /&gt;&lt;br /&gt;The (remaining) windows programmers never understood how such an unlikely competitor as Java and Sun (yes, I know that IBM, Oracle helped..) came to win the programming language battle, but that is not a good reason to ignore this. Or how such an uncomfortable server o.s. like Linux became dominant on the server side, but that too can’t be ignored. So writing apps that don’t run in such environments, or that don’t have a really virtual virtual machine, is a not very pragmatic choice in general; with NET you are making a niche choice, which may be fine in some circumstances, but you surely can’t claim to be a paradigm of pragmatism. For an interesting (and informed) praising and critical perspective on Java, see &lt;a target="_blank" href="http://oreilly.com/catalog/9780596100940"&gt;Bruce Tate’s Beyond Java&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And a final note about studying C: that is actually one of the big problems that we have in Open Lab in job interviews: that people come out from Italian engineering university having studied &lt;span style="font-style: italic;"&gt;just&lt;/span&gt; C as a programming language, and so are by now at galactic distance from the reality of programming today, and have to be tought practically everything from scratch. So actually still teaching C is very bad sign, a symptom of the obsolescence of our universities... .&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Pietro Polsinelli&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-5714447919865593539?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/5714447919865593539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=5714447919865593539' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/5714447919865593539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/5714447919865593539'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2008/07/java-as-practical-development-framework.html' title='Java as a practical development framework'/><author><name>Teamwork's Blog</name><uri>http://www.blogger.com/profile/08359182302556772566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_5i3h1CugZXo/SHyfWBjxrNI/AAAAAAAAAMg/K3zVdZRQAIk/s72-c/screen_0002.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-4314515571488179687</id><published>2008-06-08T14:20:00.015+02:00</published><updated>2008-12-10T04:04:14.432+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work spell checker mac osx'/><title type='text'>Open Lab in the Apple!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_SeuR-LLbj4s/SEzz4VrtucI/AAAAAAAAABE/2tNNPXZmZKw/s1600-h/Word2.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_SeuR-LLbj4s/SEzz4VrtucI/AAAAAAAAABE/2tNNPXZmZKw/s320/Word2.jpg" alt="" id="BLOGGER_PHOTO_ID_5209807018179541442" border="0" /&gt;&lt;/a&gt;Finally we have finished the CodeChecker for Mac! It is a spell checker for Word on Macs, using our minoritarian languages web service.&lt;br /&gt;&lt;br /&gt;It was a long journey along the path of AppleScript's philosophy and it was quite instructive for us to learn development in the  Mac World.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_SeuR-LLbj4s/SEz0Mm0QjkI/AAAAAAAAABM/Akr8Ynw7KPk/s1600-h/Word3.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_SeuR-LLbj4s/SEz0Mm0QjkI/AAAAAAAAABM/Akr8Ynw7KPk/s320/Word3.jpg" alt="" id="BLOGGER_PHOTO_ID_5209807366376164930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We realized that Applescript has big&lt;br /&gt;potentials as an automation language, but translating complex macros with various data structures in Applescript wasn't a simple task.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developer.apple.com/tools/xcode/"&gt;X-code&lt;/a&gt; is a powerful development tool, however it doesn't offer useful features like code-completion on Applescript, because Applescript’ structure makes it hard to create an efficient code completion tool; we managed without.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_SeuR-LLbj4s/SEz5-BKlEqI/AAAAAAAAABU/ziyw_n7wgSQ/s1600-h/X-Code.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_SeuR-LLbj4s/SEz5-BKlEqI/AAAAAAAAABU/ziyw_n7wgSQ/s320/X-Code.jpg" alt="" id="BLOGGER_PHOTO_ID_5209813712820834978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Throughout development path we realized that Applescript offers developers flexible solutions, like using calls to other scripting languages like Python or Perl, and this feature was fundamental for some CodeChecker features.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_SeuR-LLbj4s/SEz6cboB6zI/AAAAAAAAABc/f2jKGBcMN3k/s1600-h/Interface+Builder.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_SeuR-LLbj4s/SEz6cboB6zI/AAAAAAAAABc/f2jKGBcMN3k/s320/Interface+Builder.jpg" alt="" id="BLOGGER_PHOTO_ID_5209814235319757618" border="0" /&gt;&lt;/a&gt;Another powerful tool that we used in developing CodeChecker was &lt;a href="http://developer.apple.com/tools/interfacebuilder.html"&gt;InterfaceBuilder&lt;/a&gt;, to 'build' a nice Cocoa user friendly interface, and it worked well. CodeChecker has a nice Mac style interface, with a sliding panel for configuration. InterfaceBuilder is very useful and quite simple to use, moreover integration between X-Code and InterfaceBuilder is quite natural.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_SeuR-LLbj4s/SEz6tpZwjFI/AAAAAAAAABk/_ARVTsvyBAI/s1600-h/Package+Maker.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_SeuR-LLbj4s/SEz6tpZwjFI/AAAAAAAAABk/_ARVTsvyBAI/s320/Package+Maker.jpg" alt="" id="BLOGGER_PHOTO_ID_5209814531075771474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Finally we had to pack the application:&lt;br /&gt;the last step was to make a installer simple to use&lt;br /&gt;and do a complete installation of our product&lt;br /&gt;with the possibility of multiple choices for various type of installations;for this work we used &lt;a href="http://s.sudre.free.fr/Stuff/PackageMaker_Howto.html"&gt;Package Maker&lt;/a&gt;, another Mac tool for developing Mac installers, and I must admit that it did what it had to very well!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_SeuR-LLbj4s/SEz7kSpNviI/AAAAAAAAABs/_PXwylaKCG8/s1600-h/Installer2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_SeuR-LLbj4s/SEz7kSpNviI/AAAAAAAAABs/_PXwylaKCG8/s320/Installer2.jpg" alt="" id="BLOGGER_PHOTO_ID_5209815469859388962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_SeuR-LLbj4s/SEz7zN4vivI/AAAAAAAAAB0/CH01dCZPJv0/s1600-h/Installer3.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_SeuR-LLbj4s/SEz7zN4vivI/AAAAAAAAAB0/CH01dCZPJv0/s320/Installer3.jpg" alt="" id="BLOGGER_PHOTO_ID_5209815726280379122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The final evaluation of this Mac development work is quite positive, if we exclude some initial bad experiences due to limited knowledge of the&lt;br /&gt;local hacks; now we can go much faster.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Roberto Baldi&lt;br /&gt;Matteo Bicocchi&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-4314515571488179687?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/4314515571488179687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=4314515571488179687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/4314515571488179687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/4314515571488179687'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2008/06/open-lab-in-apple.html' title='Open Lab in the Apple!'/><author><name>RBaldi</name><uri>http://www.blogger.com/profile/01482600599923359238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_SeuR-LLbj4s/TQsxjG5GSrI/AAAAAAAAAFk/HsSBeMw6FtY/s1600-R/924ad5b2f098f42419f2f127ca964f81.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_SeuR-LLbj4s/SEzz4VrtucI/AAAAAAAAABE/2tNNPXZmZKw/s72-c/Word2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-7975874733544848652</id><published>2008-04-08T14:21:00.004+02:00</published><updated>2008-12-10T04:04:14.590+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open lab new site'/><title type='text'>New Open Lab site online</title><content type='html'>&lt;a href="http://www.open-lab.com/"&gt;&lt;img id="BLOGGER_PHOTO_ID_5186848698054195890" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_5i3h1CugZXo/R_tjaOc3urI/AAAAAAAAALI/G0m3zxB1j2s/s400/screen_0014.jpg" border="0" /&gt;&lt;/a&gt; A single, wide page. What's in between the texts?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-7975874733544848652?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/7975874733544848652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=7975874733544848652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/7975874733544848652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/7975874733544848652'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2008/04/new-open-lab-site-online.html' title='New Open Lab site online'/><author><name>Teamwork's Blog</name><uri>http://www.blogger.com/profile/08359182302556772566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_5i3h1CugZXo/R_tjaOc3urI/AAAAAAAAALI/G0m3zxB1j2s/s72-c/screen_0014.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-7891346370536343388</id><published>2008-04-07T10:22:00.001+02:00</published><updated>2008-04-07T10:23:38.129+02:00</updated><title type='text'>Integrating OSX clients and JBlooming web services</title><content type='html'>Recently I started to study AppleScript in order to translate a Visual Basic macro for Microsoft Word into AppleScript for Mac Word 2007. The decision to adopt AppleScript was taken because Mac Word doesn't use Visual Basic for macro since from Mac Word 2007. CodeChecker is the macro on which I'm working, it performs text correction using our on line dictionary web service (in the Smallcodes project). The main features of this code checker macro lay in the language where it performs correction, it uses dictionaries of minority languages like Ladin, Occitan, Ghedina. In our CodeChecker script we used SOA technology, that requires a particular library under Windows (SOA webkit 3.0), under Mac osx that library doesn't exist , but it was not a problem, because Applescript has a tool to generate the stub! Myracolous! The first approach with Applescript was quite traumatic because the syntax' logic is completely different from other script languages, it is oriented to a no programmers' audience for sure, in fact most of standard constructs like assignment or declaration is quite out of programming standards. I have to admit that it is a quite powerful scripting language, it allows complete control on system functions, you can also control single applications and use all system libraries, call other scripts made in other languages like Python or Perl and use the result inside the caller Applescript. In first instance Applescript was made to supply some standard system operations like batch operations using automator, but in recent years it was adopted as the scripting language for Microsoft office suite.&lt;br /&gt;Roberto Baldi&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-7891346370536343388?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/7891346370536343388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=7891346370536343388' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/7891346370536343388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/7891346370536343388'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2008/04/integrating-osx-clients-and-jblooming.html' title='Integrating OSX clients and JBlooming web services'/><author><name>Teamwork's Blog</name><uri>http://www.blogger.com/profile/08359182302556772566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-296461249806845691</id><published>2008-04-02T18:49:00.004+02:00</published><updated>2008-12-10T04:04:14.760+01:00</updated><title type='text'>A fundamental contribution: Murphy's laws AIR component</title><content type='html'>&lt;a href="http://www.adobe.com/cfusion/exchange/index.cfm?event=extensionDetail&amp;amp;loc=en_us&amp;amp;extid=1467520"&gt;&lt;img id="BLOGGER_PHOTO_ID_5184693217177090690" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_5i3h1CugZXo/R_O7Auc3uoI/AAAAAAAAAKw/SDRcNsly3JI/s400/screen_0002.jpg" border="0" /&gt;&lt;/a&gt; We published this fundamental contribution to human culture. Click on the image to get it!&lt;br /&gt;&lt;br /&gt;It is a Murphy laws Adobe® AIR™ application viewer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-296461249806845691?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/296461249806845691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=296461249806845691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/296461249806845691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/296461249806845691'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2008/04/fundamental-contribution-murphys-laws.html' title='A fundamental contribution: Murphy&apos;s laws AIR component'/><author><name>Teamwork's Blog</name><uri>http://www.blogger.com/profile/08359182302556772566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_5i3h1CugZXo/R_O7Auc3uoI/AAAAAAAAAKw/SDRcNsly3JI/s72-c/screen_0002.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-4772840692942049422</id><published>2008-04-02T10:50:00.003+02:00</published><updated>2008-12-10T04:04:14.931+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SEO friendly content management system'/><title type='text'>Teamwork sites SEO friendly - with Webwork</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_5i3h1CugZXo/R_NJbOc3umI/AAAAAAAAAKg/SerKzlcbZWI/s1600-h/screen_0001.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5184568328118057570" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_5i3h1CugZXo/R_NJbOc3umI/AAAAAAAAAKg/SerKzlcbZWI/s400/screen_0001.jpg" border="0" /&gt;&lt;/a&gt;Webwork is now SEO friendly! In only two weeks, the Webwork team released a SEO friendly version of the tool, with which we published the new Teamwork site. :-)&lt;br /&gt;&lt;br /&gt;Friendly SEO urls, no 301 redirects, no duplicated keywords, compositional titles... nice!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-4772840692942049422?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/4772840692942049422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=4772840692942049422' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/4772840692942049422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/4772840692942049422'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2008/04/teamwork-sites-seo-friendly-with.html' title='Teamwork sites SEO friendly - with Webwork'/><author><name>Teamwork's Blog</name><uri>http://www.blogger.com/profile/08359182302556772566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_5i3h1CugZXo/R_NJbOc3umI/AAAAAAAAAKg/SerKzlcbZWI/s72-c/screen_0001.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-1558355844250466115</id><published>2008-03-17T20:50:00.004+01:00</published><updated>2008-03-19T09:09:54.022+01:00</updated><title type='text'>A content management system which is a good tool for SEO</title><content type='html'>Open Lab's content management system (CMS), Webwork, is in these days under scrutiny as a tool for Search Engine Optimization (SEO). SEO is an interesting and dynamic field, and after a while of study I noticed a peculiarity: the most indexable site is a static one, but in order to be able to dynamically optimize a site for SEO, you need to have it dynamically generated.&lt;br /&gt;So a step towards SEO is to generate and manage your site with a CMS, but then add functionality to your CMS to generate pages optimal for SEO. For example, it is better to have plain friendly url named and pointing to sections of you web sited, then a constant url with just an id parameter changing all the time. Very bad is&lt;br /&gt;&lt;ul&gt;&lt;li&gt;getting the same document with different urls&lt;/li&gt;&lt;li&gt;links not in href but just in onclicks&lt;/li&gt;&lt;li&gt;having the same metatags on all pages&lt;/li&gt;&lt;/ul&gt;So I had a meeting with the Webwork guys, all this will be supported natively by Webwork.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-1558355844250466115?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/1558355844250466115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=1558355844250466115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/1558355844250466115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/1558355844250466115'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2008/03/content-management-system-which-is-good.html' title='A content management system which is a good tool for SEO'/><author><name>Teamwork's Blog</name><uri>http://www.blogger.com/profile/08359182302556772566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2315245884590246113.post-8727186410310586771</id><published>2008-03-11T17:28:00.012+01:00</published><updated>2008-12-10T04:04:15.096+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open lab developers blog'/><title type='text'>Opening</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_5i3h1CugZXo/R9a68o3TnaI/AAAAAAAAAIs/3kUXRMcA3yQ/s1600-h/OL_logo_vert.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5176530372633271714" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_5i3h1CugZXo/R9a68o3TnaI/AAAAAAAAAIs/3kUXRMcA3yQ/s400/OL_logo_vert.jpg" border="0" /&gt;&lt;/a&gt; I have the pleasure of opening the developer's blog of the Teamwork, Webwork, Smallcodes and Flowork applications, all built over the JBlooming platform.&lt;br /&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;We have used for quite a while &lt;a href="http://twproject.blogspot.com/" target="_blank"&gt;Teamwork's blog&lt;/a&gt; also as a developers blog, but by now its time to dedicate a blog exclusively to technical issues.&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;Started in 2001 as a 4 friends startup company, Open Lab has been growing steadily in these seven years. We first made a leap by acquiring two other software houses in 2003 and 2004; now we are making our second leap, by putting together an enlarged development team and a prettier workplace. We'll call it &amp;lt;big&amp;gt;OpenLab&amp;lt;/big&amp;gt;.&lt;/div&gt;&lt;/big&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;Open Lab is a rare case of an Italian IT company which is not a service company, but a real software house, with products like &lt;a href="http://www.twproject.com/" target="_blank"&gt;Teamwork&lt;/a&gt;, used today in 35 countries, and winner in 2007 of a &lt;a href="http://www.joltawards.com/2007/" target="_blank"&gt;Jolt Award&lt;/a&gt;, or Smallcodes, used by 10 different linguistic communities.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;By real software house I mean not only &lt;em&gt;what&lt;/em&gt; we do, but &lt;em&gt;how&lt;/em&gt;: workplace quality, powerful tools, state of the art technology, a balanced male/female production team, team meetings, &lt;a href="http://www.extremeprogramming.org/rules/overtime.html" target="_blank"&gt;no overwork&lt;/a&gt;, pair programming, all contributes to the construction of a real, solid sotware house.&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;Pietro Polsinelli&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;big&gt;&lt;/big&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2315245884590246113-8727186410310586771?l=jblooming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jblooming.blogspot.com/feeds/8727186410310586771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2315245884590246113&amp;postID=8727186410310586771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/8727186410310586771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2315245884590246113/posts/default/8727186410310586771'/><link rel='alternate' type='text/html' href='http://jblooming.blogspot.com/2008/03/opening-open-lab-developers-blog.html' title='Opening'/><author><name>Teamwork's Blog</name><uri>http://www.blogger.com/profile/08359182302556772566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_5i3h1CugZXo/R9a68o3TnaI/AAAAAAAAAIs/3kUXRMcA3yQ/s72-c/OL_logo_vert.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
