<?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-6080082</id><updated>2012-01-26T16:41:58.516+01:00</updated><category term='Red Hat'/><category term='Kids'/><category term='JBoss'/><category term='java'/><category term='Stuttgart'/><category term='Hibernate'/><category term='Misc'/><category term='comic'/><category term='jopr'/><category term='event'/><category term='fedora'/><category term='book'/><category term='Postgres'/><category term='devoxx08'/><category term='Netbeans'/><category term='running'/><category term='svg'/><category term='jpa'/><category term='food'/><category term='ejb3'/><category term='Eclipse'/><category term='Mac'/><category term='RHQ'/><category term='x2svg'/><category term='jruby'/><category term='Android'/><category term='Photo camera'/><category term='database'/><title type='text'>Some things to remember</title><subtitle type='html'>Random thoughts about random things.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default?start-index=101&amp;max-results=100'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>480</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6080082.post-3243103513282827040</id><published>2012-01-23T22:22:00.001+01:00</published><updated>2012-01-26T16:39:09.545+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Red Hat'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>JBoss, Fedora and more from Red Hat at FOSDEM 2012</title><content type='html'>A lot of folks from Red Hat are visiting &lt;a href="http://www.fosdem.org/2012/"&gt;FOSDEM 2012&lt;/a&gt; this year.&lt;br /&gt; &lt;img src="http://fosdem.org/promo/going-to" style="align:right"&gt;&lt;br /&gt;&lt;br /&gt;I've listed the speakers here - I will myself talk on Saturday on &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In addition to the talks there are also stands:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JBoss: &lt;a href="http://www.jboss.org/"&gt;K building, 1st floor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Fedora: &lt;a href="http://fedoraproject.org/"&gt;K building, ground floor&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;You will be able to get a printed version of this list at the Fedora stand.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Saturday&lt;/h2&gt;&lt;table border="0" cellspacing="0" cellpadding="0" &gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;&lt;strong&gt;WHEN&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;strong&gt;EVENT&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;strong&gt;TRACK &amp;amp; ROOM&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;strong&gt;SPEAKER&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;11:00-11:10&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/welcome"&gt;Welcome to the CrossDesktop Devroom&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;CrossDesktop  (H.1308)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Christophe Fergeau&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;11:00-11:05&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/legal_issues"&gt;Welcome to the Legal Issues DevRoom&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Legal Issues  (AW1.125)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Richard Fontana&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;11:00-11:55&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/boxgrinder_grind_your_appliances_easily"&gt;BoxGrinder : Grind your appliances easily&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;JBoss.org  (K.3.201)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Marek Goldmann&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;11:00-11:05&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/free_java"&gt;Welcome to the Free Java DevRoom&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Free Java  (K.4.401)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Mark Wielaard, Andrew Haley, Andrew Hughes&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;12:00-12:55&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/drools_planner_planning_optimization_by_example"&gt;Drools Planner: Planning optimization by example&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;JBoss.org  (K.3.201)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Geoffrey De Smet&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;12:30-12:55&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/libguestfs"&gt;libguestfs - tools for modifying virtual machine&lt;br /&gt;            disk images&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Virtualization &amp;amp; Cloud  (Chavanne)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Richard Jones&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;13:00-13:25&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/pacemaker_cloud"&gt;Cloud high availability with pacemaker-cloud&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Virtualization &amp;amp; Cloud  (Chavanne)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Pádraig Brady&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;13:00-13:55&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://fosdem.org/2012/schedule/event/openshift"&gt;Openshift&lt;a/&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;JBoss.org  (K.3.201)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Grant Shipley&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;14:00-14:25&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/aeolus"&gt;The Aeolus Project&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Virtualization &amp;amp; Cloud  (Chavanne)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Francesco Vollero&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;14:00-14:55&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/building_jboss_as7_for_fedora"&gt;JBoss AS7 : Building JBoss AS 7 for Fedora&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;JBoss.org  (K.3.201)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Carlo De Wolf&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;15:00-15:50&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://fosdem.org/2012/schedule/event/virt_kvm"&gt;Virtualization with KVM: bottom to top, past to future&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Hypervisors  (Janson)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Paolo Bonzini&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;15:00-15:55&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/jboss_forge_and_arquillian_two_missing_links_in_enterprise_java_development"&gt;JBoss Forge / Arquillian: Two Missing Links in&lt;br /&gt;            Enterprise Java Development&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;JBoss.org  (K.3.201)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Koen Aers&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;15:00-15:25&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;a href="http://fosdem.org/2012/schedule/event/deltacloud"&gt;Open Clouds with Deltacloud API&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Virtualization &amp;amp; Cloud  (Chavanne)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Michal Fojtik&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;15:30-15:55&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/dmtf_deltacloud"&gt;DMTF CIMI and Apache Deltacloud&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Virtualization &amp;amp; Cloud  (Chavanne)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Marios Andreou&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;16:00-16:55&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/infinispan_where_open_source_java_and_in_memory_data_grids_converge"&gt;Infinispan: where open source, Java and in-memory&lt;br /&gt;            data grids converge&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;JBoss.org  (K.3.201)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Manik Surtani&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;16:15-17:00&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/group_picture"&gt;Crossdesktop group picture&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;CrossDesktop  (H.1308)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Christophe Fergeau&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;16:30-17:00&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/the_decline_of_the_gpl"&gt;The (possible) decline of the GPL, and what to do&lt;br /&gt;            about it&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Legal Issues  (AW1.125)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Richard Fontana&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;17:00-17:55&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/recent_and_future_developments_in_the_rhq_systems_monitoring_and_management_framework"&gt;RHQ: Recent and future developments in the RHQ&lt;br /&gt;            systems monitoring and management framework&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;JBoss.org  (K.3.201)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Heiko Rupp&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;17:30-18:00&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/app_store_panel"&gt;Panel on Application Stores&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Legal Issues  (AW1.125)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Richard Fontana&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;18:00-18:55&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/managing_workflows_and_business_rules_with_guvnor_and_the_jbpm_designer"&gt;Guvernor/JBPM : Managing workflows and business&lt;br /&gt;            rules with Guvnor and the jBPM designer&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;JBoss.org  (K.3.201)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Geoffrey De Smet, Marco Rietveld&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;18:00-18:30&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/thermostat"&gt;Thermostat: Taking over the Java tooling world with&lt;br /&gt;            Open Source Software&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Free Java  (K.4.401)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Jon VanAlten, Omair Majid&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td &gt;&lt;p&gt;18:20-18:35&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/pmd5"&gt;PMD5: What can it do for you?&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Lightning Talks (Ferrer)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Romain PELISSE&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;18:30-19:00&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/byteman"&gt;Tracing, Debugging and Testing With Byteman&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Free Java  (K.4.401)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Andrew Dinn&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;h2&gt;Sunday&lt;/h2&gt;&lt;table&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;&lt;strong&gt;WHEN&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;strong&gt;EVENT&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;strong&gt;TRACK &amp;amp; ROOM&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;strong&gt;SPEAKER&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;09:00-09:25&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/spice"&gt;Spice "Open remote computing" introduction&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Virtualization &amp;amp; Cloud  (Chavanne)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Hans de Goede&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;09:30-09:55&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/usb_network_redirect"&gt;USB redirection over the network&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Virtualization &amp;amp; Cloud  (Chavanne)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Hans de Goede&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;10:00-10:45&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/matahari"&gt;Systems Management with Matahari&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Configuration &amp;amp; Systems Management  (K.3.601)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Zane Bitter&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;10:45-11:15&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/gnomeboxes"&gt;Boxes, use other systems with ease&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;CrossDesktop  (H.1308)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Zeeshan Ali (Khattak), Marc-André Lureau&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;11:00-11:15&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/cdt"&gt;Powerful tools for Linux C/C++ developers based on&lt;br /&gt;            Eclipse&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Lightning Talks (Ferrer)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Andrew Overholt&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;11:00-11:25&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/ovirt_intro"&gt;Virtualization Management the oVirt way&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Virtualization &amp;amp; Cloud  (Chavanne)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Itamar Heim&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;11:30-11:55&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/ovirt_engine_core"&gt;oVirt Engine Core: Internals and Infrastructure&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Virtualization &amp;amp; Cloud  (Chavanne)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Omer Frenkel&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;11:30-12:00&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/can_i_legally_do_that"&gt;Can I legally do that?&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Free Java  (K.4.401)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Mark Wielaard&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;12:00-12:25&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/ovirt_vdsm"&gt;VDSM - The oVirt Node Management Agent&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Virtualization &amp;amp; Cloud  (Chavanne)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Federico Simoncelli&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;12:30-13:30&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/openjdk_on_arm"&gt;OpenJDK on ARM: Quo vadis?&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Free Java  (K.4.401)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Andrew Haley&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;15:00-15:55&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/libvirt_lxc_kvm_sandboxes"&gt;Building app sandboxes on top of LXC and KVM with&lt;br /&gt;            libvirt&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Virtualization &amp;amp; Cloud  (Chavanne)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Daniel Berrange&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;15:30-16:00&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/icedtea_and_icedteaweb"&gt;IcedTea and IcedTea-Web&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Free Java  (K.4.401)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Deepak Bhole&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr &gt;&lt;td &gt;&lt;p&gt;16:30-17:00&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;&lt;a href="http://www.fosdem.org/2012/schedule/event/free_java_future"&gt;Discussion on the Future of Free Java&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Free Java  (K.4.401)&lt;/p&gt;&lt;/td&gt;&lt;td &gt;&lt;p&gt;Andrew Haley&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-3243103513282827040?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/3243103513282827040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=3243103513282827040&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3243103513282827040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3243103513282827040'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2012/01/jboss-fedora-and-more-from-red-hat-at.html' title='JBoss, Fedora and more from Red Hat at FOSDEM 2012'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-8655908111449145701</id><published>2012-01-15T20:52:00.001+01:00</published><updated>2012-01-15T21:04:34.104+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Pushing metrics / baselines via REST interface in RHQ</title><content type='html'>A few days ago &lt;a href="http://javablogs.com/Jump.action?id=685875"&gt;I wrote about pulling raw metrics&lt;/a&gt; from RHQ via the REST interface.&lt;br /&gt;&lt;br /&gt;It is also possible to push metrics as well as read and write baselines.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Pushing metrics&lt;/h2&gt;&lt;br /&gt;There are two ways to push numeric metric values into the server:&lt;br /&gt;&lt;h3&gt;Single metric&lt;/h3&gt;&lt;pre&gt;&lt;br /&gt;curl -i -u rhqadmin:rhqadmin \&lt;br /&gt;    http://localhost:7080/rest/1/metric/data/10022/raw/1324656971 \&lt;br /&gt;    -X PUT       \&lt;br /&gt;    -d @/tmp/foo \&lt;br /&gt;    -HContent-Type:application/json&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;With /tmp/foo containing: &lt;br /&gt;&lt;pre&gt; &lt;br /&gt;{"timeStamp": 132465716178, "value": 123, "scheduleId":10023}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that you need to give the schedule id (10022) and the timestamp in the URL. The samples-project also contains an &lt;a href="https://github.com/rhq-project/samples/blob/master/rest-api/python/submit_metric_value.py"&gt;example in Python&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Multiple metrics&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;If you want to push multiple metrics at once you can use this call (of course it will also work for a single one):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;curl -u rhqadmin:rhqadmin  \&lt;br /&gt;   http://localhost:7080/rest/1/metric/data/raw  \&lt;br /&gt;   -X POST      \&lt;br /&gt;   -d @/tmp/foo \&lt;br /&gt;   -HContent-Type:application/json&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;with /tmp/foo containing:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[&lt;br /&gt;  {"timeStamp": 132465716078, "value": 123, "scheduleId":10022},&lt;br /&gt;  {"timeStamp": 132465716079, "value": 223, "scheduleId":10022}&lt;br /&gt;]&lt;br /&gt;&lt;/pre&gt;&lt;h2&gt;Baselines&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Baselines are an interesting feature in the sense that they mark a band in which a dynamic metric usually oscillates. When the metric goes out of those bounds, you can get an alarm. The system usually computes those baselines by taking the minimum and maximum values from the existing dataset for the last &lt;em&gt;n&lt;/em&gt; days (n is configurable). When a baseline is computed, they are also displayed on the large metric graphs. Here the baselines could also be manually set.&lt;br /&gt;&lt;br /&gt;It is now (&lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=781801"&gt;master/RHQ 4.3&lt;/a&gt;) possible to set the computation frequency to 0 to disable the automatic calculation by the server and push baseline data via the REST interface into the server. This allows to e.g. read metrics from a system like R, compute projections for future bands (e.g. via Holt-Winters) or &lt;em&gt;x%&lt;/em&gt; quantiles of the existing data and write the results back as baseline data so that the normal alerting workflow can pick up that data.&lt;br /&gt;&lt;br /&gt;The first call is to obtain the baseline for schedule with id 10013:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;curl -u rhqadmin:rhqadmin \&lt;br /&gt;   http://localhost:7080/rest/1/metric/data/10013/baseline \&lt;br /&gt;   -HContent-Type:application/json &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This call updates the schedule 10013 with new values:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;curl -u rhqadmin:rhqadmin  \&lt;br /&gt;   http://localhost:7080/rest/1/metric/data/10013/baseline \&lt;br /&gt;   -HContent-Type:application/json   \&lt;br /&gt;   -HAccept:application/json         \&lt;br /&gt;   -X PUT                            \ &lt;br /&gt;   -d '{"max":2.58304512E9,          \&lt;br /&gt;        "min":0.119968768E9,         \&lt;br /&gt;        "mean":1.285011894659459E9,  \&lt;br /&gt;        "computeTime":1326477607296}'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-8655908111449145701?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/8655908111449145701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=8655908111449145701&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8655908111449145701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8655908111449145701'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2012/01/pushing-metrics-baselines-via-rest.html' title='Pushing metrics / baselines via REST interface in RHQ'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-2895454561145074134</id><published>2012-01-14T15:54:00.001+01:00</published><updated>2012-01-14T15:54:19.729+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>Polyglot management of a secured AS7</title><content type='html'>JBossAS7 comes with a nice management interface that tools like the built-in admin-console or the console app are using. Next to the "more binary" DMR protocol, there is also a JSON interface available that can be accessed via http. Using this interface allows to manage AS7 from any programing language. &lt;br /&gt;Luckily :-) this interface is secured by default and only accessible for a valid user via http digest authentication.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Set up admin user&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;The first step is to enable a user on the server to use for this management interface:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ cd /jboss-as-7.1.0&lt;br /&gt;$ bin/add-user.sh &lt;br /&gt;&lt;br /&gt;Enter the details of the new user to add.&lt;br /&gt;Realm (ManagementRealm) : &lt;em&gt;&amp;lt;press enter&amp;gt;&lt;/em&gt;&lt;br /&gt;Username : &lt;em&gt;heiko&lt;/em&gt;&lt;br /&gt;Password : &lt;em&gt;&amp;lt;provide password&amp;gt;&lt;/em&gt;&lt;br /&gt;Re-enter Password : &lt;em&gt;&amp;lt;provide password again&amp;gt;&lt;/em&gt;&lt;br /&gt;About to add user 'user' for realm 'ManagementRealm'&lt;br /&gt;Is this correct yes/no? &lt;em&gt;yes&lt;/em&gt;&lt;br /&gt;Added user 'user' to file '/jboss-as-7.1.0/standalone/configuration/mgmt-users.properties'&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now we have created a user 'heiko' with password 'okieh'.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Shell with curl&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;The following command with shut down the server via the management interface:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ curl --digest -u heiko http://localhost:9990/management/ -d '{"operation":"shutdown" }' -HContent-Type:application/json&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Note that for option '-u' only the username is given — curl will ask for the password. One important part here is that to mark the content-type of the data sent as "application/json". Curl will, if this header is not provided, send the request as 'application/x-www-form-urlencoded' which is disallowed by AS7.&lt;br /&gt;&lt;br /&gt;If you run curl with option '-v' you can nicely see the re-negotiation to acquire the nonce from the server in order to compute the digest:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ curl -v --digest -u heiko http://localhost:9990/management/ -d '{"operation":"shutdown" }' -HContent-Type:application/json&lt;br /&gt;Enter host password for user 'heiko': &lt;em&gt;&amp;lt;okieh&amp;gt;&lt;/em&gt;&lt;br /&gt;* About to connect() to localhost port 9990 (#0)&lt;br /&gt;*   Trying 127.0.0.1... connected&lt;br /&gt;* Connected to localhost (127.0.0.1) port 9990 (#0)&lt;br /&gt;* Server auth using Digest with user 'heiko'&lt;br /&gt;&gt; POST /management/ HTTP/1.1&lt;br /&gt;&gt; User-Agent: curl/7.21.7 (x86_64-apple-darwin10.8.0) libcurl/7.21.7 OpenSSL/1.0.0e zlib/1.2.5 libidn/1.22&lt;br /&gt;&gt; Host: localhost:9990&lt;br /&gt;&gt; Accept: */*&lt;br /&gt;&gt; Content-Type:application/json&lt;br /&gt;&gt; Content-Length: 0&lt;br /&gt;&gt; &lt;br /&gt;&amp;lt; HTTP/1.1 401 Unauthorized&lt;br /&gt;&amp;lt; Content-length: 0&lt;br /&gt;&amp;lt; Www-authenticate: Digest realm="ManagementRealm",nonce="6089edca29aa27b064aa1db42d9651eb"&lt;br /&gt;&amp;lt; Date: Fri, 13 Jan 2012 09:54:39 GMT&lt;br /&gt;&amp;lt; &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;First request has been sent and the server replied with a 401 unauthorized and the nonce to use. Now curl continues:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;* Connection #0 to host localhost left intact&lt;br /&gt;* Issue another request to this URL: 'http://localhost:9990/management/'&lt;br /&gt;* Re-using existing connection! (#0) with host localhost&lt;br /&gt;* Connected to localhost (127.0.0.1) port 9990 (#0)&lt;br /&gt;* Server auth using Digest with user 'heiko'&lt;br /&gt;&gt; POST /management/ HTTP/1.1&lt;br /&gt;&gt; Authorization: Digest username="heiko", realm="ManagementRealm", nonce="6089edca29aa27b064aa1db42d9651eb", uri="/management/", response="78b9546e7485b661121e34a72d2979f1"&lt;br /&gt;&gt; User-Agent: curl/7.21.7 (x86_64-apple-darwin10.8.0) libcurl/7.21.7 OpenSSL/1.0.0e zlib/1.2.5 libidn/1.22&lt;br /&gt;&gt; Host: localhost:9990&lt;br /&gt;&gt; Accept: */*&lt;br /&gt;&gt; Content-Type:application/json&lt;br /&gt;&gt; Content-Length: 25&lt;br /&gt;&gt; &lt;br /&gt;&amp;lt; HTTP/1.1 200 OK&lt;br /&gt;&amp;lt; Transfer-encoding: chunked&lt;br /&gt;&amp;lt; Content-type: application/json&lt;br /&gt;&amp;lt; Date: Fri, 13 Jan 2012 09:54:39 GMT&lt;br /&gt;&amp;lt; &lt;br /&gt;* Connection #0 to host localhost left intact&lt;br /&gt;* Closing connection #0&lt;br /&gt;{"outcome" : "success"}&lt;br /&gt;$ &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So we've issued the equest and the server has shutdown. Using the same technique you can also e.g. query the port, the http-connector is listening on (which has the symbolic name of 'http'):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;curl --digest -u heiko http://localhost:9990/management/ -HContent-Type:application/json  --data @-&amp;lt;&amp;lt; -EOF-&lt;br /&gt;{&lt;br /&gt;   "operation":"read-attribute",&lt;br /&gt;   "address":[&lt;br /&gt;       {"socket-binding-group":"standard-sockets"},&lt;br /&gt;       {"socket-binding":"http"}&lt;br /&gt;    ],&lt;br /&gt;   "name":"port"&lt;br /&gt;}&lt;br /&gt;-EOF-&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In this example you also see how to pass the address of the node to inspect and the name of the attribute to the server.&lt;br /&gt;&lt;br /&gt;Beware that if you make a typo in the json-encoding (e.g. separating key and value by comma instead of colon), the server may just respond with a 401 without telling you what went wrong&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Perl&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;It's a long time since I did serious perl coding, so that next example may not be the most elegant. The example shows again, how to retrieve the http port via a 'read-attribute' operation. As I don't want to obsfuscate the code even more, I did just provide the password in the script.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;use JSON qw(objToJson jsonToObj from_json to_json decode_json);&lt;br /&gt;use LWP;&lt;br /&gt;&lt;br /&gt;$host = "localhost";&lt;br /&gt;$port = "9990";&lt;br /&gt;&lt;br /&gt;$realm = "ManagementRealm";&lt;br /&gt;$user = "heiko";&lt;br /&gt;$password = "okieh";&lt;br /&gt;&lt;br /&gt;# Construct url of management api&lt;br /&gt;$url = "http://$host:$port/management";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# the command to send to the server in JSON encoding&lt;br /&gt;$json_data = '&lt;br /&gt;{&lt;br /&gt;   "operation":"read-attribute",&lt;br /&gt;   "address":[&lt;br /&gt;       {"socket-binding-group":"standard-sockets"},&lt;br /&gt;       {"socket-binding":"http"}&lt;br /&gt;    ],&lt;br /&gt;   "name":"port"&lt;br /&gt;}&lt;br /&gt;';&lt;br /&gt;# set up a User agent&lt;br /&gt;my $browser = LWP::UserAgent-&gt;new();&lt;br /&gt;&lt;br /&gt;# Create the request&lt;br /&gt;my $req = HTTP::Request-&gt;new(POST =&gt; $url);&lt;br /&gt;$browser-&gt;credentials("$host:$port",$realm,$user,$password);&lt;br /&gt;$req-&gt;content_type( 'application/json');&lt;br /&gt;$req-&gt;content($json_data);&lt;br /&gt;&lt;br /&gt;# send the request to the server&lt;br /&gt;$res = $browser-&gt;request($req);&lt;br /&gt;&lt;br /&gt;# If we don't get a 200 back, we finish here&lt;br /&gt;die "No success ", $res-&gt;status_line unless $res-&gt;is_success;&lt;br /&gt;&lt;br /&gt;# Get the content from the response&lt;br /&gt;my $seite_code = $res-&gt;content;&lt;br /&gt;print "Received : $seite_code \n";&lt;br /&gt;&lt;br /&gt;# decode the json retieved&lt;br /&gt;my $json = JSON-&gt;new-&gt;utf8;&lt;br /&gt;$obj = $json-&gt;decode($seite_code);&lt;br /&gt;%pairs = %{$obj};  # json-&gt;decode returns a hash ref&lt;br /&gt;# get the result&lt;br /&gt;$httpPort = $pairs{"result"};&lt;br /&gt;print "Http port is $httpPort \n";&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The basic part to handle the digest authentication is &lt;code&gt;$browser-&gt;credentials("$host:$port",$realm,$user,$password);&lt;/code&gt;, which makes LWP transparently handle the creation of the digest and re-sending of the request.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Ruby&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Unlike perl, which I was using a lot in the past, I am not yet familiar with Ruby, so there may be a much better solution -- please provide some feedback. Especially I have not found a good way to automatically handle the digest authentication, so this is done explicitly &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/opt/local/bin/ruby1.9&lt;br /&gt;&lt;br /&gt;require 'json'&lt;br /&gt;require 'net/http'&lt;br /&gt;require 'net/http/digest_auth'&lt;br /&gt;&lt;br /&gt;url = URI.parse('http://localhost:9990/management/')&lt;br /&gt;url.user = 'heiko'&lt;br /&gt;url.password = 'okieh'&lt;br /&gt;&lt;br /&gt;# data to send to retrieve the server name&lt;br /&gt;data = { "operation" =&gt; "read-attribute",&lt;br /&gt;         "address" =&gt; [],&lt;br /&gt;         "name" =&gt; "name"}&lt;br /&gt;&lt;br /&gt;h = Net::HTTP.new url.host, url.port&lt;br /&gt;&lt;br /&gt;# send first request to get nonce&lt;br /&gt;req = Net::HTTP::Post.new url.request_uri&lt;br /&gt;res = h.request req&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So far we have sent a first request to obtain the 'nonce' from the server, so we can compute the digest in the 2n step.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;# compute the digest&lt;br /&gt;digest_auth = Net::HTTP::DigestAuth.new&lt;br /&gt;auth = digest_auth.auth_header url, res['www-authenticate'], 'POST'&lt;br /&gt;&lt;br /&gt;# Now send the real request with the nonce&lt;br /&gt;body = JSON.generate(data)&lt;br /&gt;&lt;br /&gt;puts "Sending "  + body&lt;br /&gt;req = Net::HTTP::Post.new url.request_uri&lt;br /&gt;req.add_field 'Content-Type', 'application/json'&lt;br /&gt;req.add_field 'Authorization', auth&lt;br /&gt;req.body = body&lt;br /&gt;&lt;br /&gt;res = h.request req&lt;br /&gt;&lt;br /&gt;print "Result " + res.body&lt;br /&gt;&lt;br /&gt;# parse the JSON and obtain the 'result' object&lt;br /&gt;data = JSON.parse(res.body)&lt;br /&gt;server_name = data["result"]&lt;br /&gt;print "Server name is " + server_name&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;h2&gt;Thanks&lt;/h2&gt;&lt;br /&gt;I want to thank Darran Lofthouse for helping me to get going with why apparently correct requests fail with a 403 (because of the wrong content type).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-2895454561145074134?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/2895454561145074134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=2895454561145074134&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2895454561145074134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2895454561145074134'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2012/01/polyglot-management-of-secured-as7.html' title='Polyglot management of a secured AS7'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-4753590884124844580</id><published>2012-01-09T11:41:00.001+01:00</published><updated>2012-01-09T11:45:16.639+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Some graphing fun with D3.js</title><content type='html'>Now that the &lt;a href="http://rhq-project.org/"&gt;RHQ&lt;/a&gt; REST api can &lt;a href="http://pilhuhn.blogspot.com/2012/01/analyze-your-rhq-metrics-with-r.html"&gt;expose raw numerical metrics&lt;/a&gt; for the last 7 days, it is possible to create additional graphs for numerics. &lt;a href="http://pilhuhn.blogspot.com/2011/09/rest-coming-to-rhq.html"&gt;As before&lt;/a&gt; I have used &lt;a href="http://mbostock.github.com/d3/"&gt;D3.js&lt;/a&gt; to create the following graphs. The source is now in &lt;a href="http://git.fedorahosted.org/git?p=rhq/rhq.git;a=tree;f=modules/enterprise/gui/rest-war/src/main/webapp;hb=HEAD"&gt;RHQ git master&lt;/a&gt; and will also be in RHQ 4.3.&lt;br /&gt;&lt;br /&gt;The first graph shows the last 7 days of metrics in one go:&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://lh5.ggpht.com/-2hFHu9oM1yY/Twq9hNtSZvI/AAAAAAAAAgY/EMf1JANvhQE/Bildschirmfoto%2525202012-01-09%252520um%25252011.06.27.png?imgmax=800" alt="Last 7 days of metrics" border="0" width="400"  /&gt;&lt;br&gt;raw_graph.html&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This one shows the last 7 days where each span of 24h is represented by a colored line, which allows to compare the values directly - the darker the color, the older the data:&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://lh4.ggpht.com/-zb2zDFfB8cI/Twq-DpQnZ2I/AAAAAAAAAgg/3t7VyEx3bRM/Bildschirmfoto%2525202012-01-09%252520um%25252011.06.05.png?imgmax=800" alt="Bildschirmfoto 2012 01 09 um 11 06 05" border="0" width="400"  /&gt;&lt;br/&gt;raw_graph7.html&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This needs some more work, as the x-axis labeling does not yet take the exact start time into account. &lt;br /&gt;Also time spans that have no values (e.g. because agent is down) should not show a straight line, but no line at all for that period. There should perhaps be a legend about the colors as well.&lt;br /&gt;&lt;br /&gt;I am still very much on the learning side of JavaScript and D3.js and the above is far from the &lt;a href="http://mbostock.github.com/d3/ex/"&gt;beautiful examples&lt;/a&gt; Mike Bostock creates, but I think one can already see the potential power here.&lt;br /&gt;&lt;br /&gt;If anyone is interested to add &lt;a href="https://gist.github.com/1016860"&gt;tooltips for the values&lt;/a&gt; or fix the label for the second graph, please ping me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-4753590884124844580?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/4753590884124844580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=4753590884124844580&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4753590884124844580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4753590884124844580'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2012/01/some-graphing-fun-with-d3js.html' title='Some graphing fun with D3.js'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/-2hFHu9oM1yY/Twq9hNtSZvI/AAAAAAAAAgY/EMf1JANvhQE/s72-c/Bildschirmfoto%2525202012-01-09%252520um%25252011.06.27.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-4867490466221207898</id><published>2012-01-02T15:40:00.001+01:00</published><updated>2012-01-02T15:40:19.172+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Analyze your RHQ metrics with R</title><content type='html'>&lt;div style="text-align:center;"&gt;&lt;img src="http://lh6.ggpht.com/-nfeHjFVv7qc/TwHA3rQGBmI/AAAAAAAAAgQ/4tIyuwOiNeo/Bildschirmfoto%2525202012-01-02%252520um%25252015.34.24.png?imgmax=800" alt="R plot of aggregate metrics" border="0" width="400"  /&gt;&lt;br/&gt;&lt;br /&gt;Plot of metric aggregates in R&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You probably have seen that with RHQ 4.2 you can export the aggregate metrics for the last &lt;em&gt;n&lt;/em&gt; (default 8) hours via the REST api by calling: &lt;br /&gt;&lt;br /&gt;&lt;code&gt;http://localhost:7080/rest/1/metric/data/&amp;lt;scheduleId&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;where &amp;lt;scheduleId&amp;gt; must be a valid numerical schedule.&lt;br /&gt;&lt;br /&gt;The statistical tool &lt;a href="http://www.r-project.org/"&gt;R&lt;/a&gt; allows via "&lt;em&gt;RCurl&lt;/em&gt;" to load data from remote URLs e.g. like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;json_file &amp;lt;- getURL("http://localhost:7080/rest/1/metric/data/10013", httpheader=c(Accept = "application/json"),userpwd="rhqadmin:rhqadmin") &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;RCurl allows you to specify username and password unlike the simple &lt;code&gt;json_file &amp;lt;- "http://..."&lt;/code&gt; calls. The next step is then to transform the received data with the help of the "&lt;em&gt;rjson&lt;/em&gt;" library into R data structures:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;## convert json to list of vectors&lt;br /&gt;json_data &amp;lt;- fromJSON(paste(json_file, collapse=""))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;## convert the embedded data points into a data frame&lt;br /&gt;df &amp;lt;- data.frame(do.call(rbind,json_data$dataPoints))&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;which you can then access and e.g. plot:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;## plot the data &lt;br /&gt;plot(df$timeStamp,df$value,xlab="time",ylab="Free memory (bytes)",xaxt='n',type='l')&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You can find the full example as &lt;a href="https://github.com/rhq-project/samples/blob/master/rest-api/R/plot_metrics.r"&gt;plot_metrics.r&lt;/a&gt; in the &lt;a href="https://github.com/rhq-project/samples"&gt;RHQ samples project&lt;/a&gt; on GitHub.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Some like it raw...&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;RHQ master (this will make it into RHQ 4.3) is now also able to export raw metrics via REST api&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;http://localhost:7080/rest/1/metric/data/10013/raw?duration=259200&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Like above you provide the schedule id and optionally a startTime and endTime or an endTime and a duration (in seconds). If nothing is provided, the data for the last 8h is exported. The following screenshot shows an example plot:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://lh3.ggpht.com/-w-zdtndVYQM/TwG4aPXRVNI/AAAAAAAAAgI/p_oRiozTmTM/Bildschirmfoto%2525202012-01-02%252520um%25252014.35.53.png?imgmax=800" alt="R plot of RHQ metrics" border="0" width="400"  /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The metrics are plotted in black, the average in blue, the 5% and 95% quantils in orange and green and with the help of the TTR library, the 50 samples moving average is plotted in red. The sample code (with slightly different parameters) is also available online as &lt;a href="https://github.com/rhq-project/samples/blob/master/rest-api/R/plot_raw.r"&gt;plot_raw.r&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you find other cool usages like e.g. Holt-Winters prediction on the data, please consider submitting them as example to the samples project.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-4867490466221207898?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/4867490466221207898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=4867490466221207898&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4867490466221207898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4867490466221207898'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2012/01/analyze-your-rhq-metrics-with-r.html' title='Analyze your RHQ metrics with R'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-nfeHjFVv7qc/TwHA3rQGBmI/AAAAAAAAAgQ/4tIyuwOiNeo/s72-c/Bildschirmfoto%2525202012-01-02%252520um%25252015.34.24.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-9043708561856069630</id><published>2011-12-12T12:08:00.001+01:00</published><updated>2011-12-12T12:08:31.873+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Announcing the RHQ samples project</title><content type='html'>I am proud to announce the inception of a the samples project for &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt;. &lt;img src="http://rhq-project.org/download/attachments/1017410/RHQ?version=2&amp;amp;modificationDate=1257543585409 align="right"/&gt;&lt;br /&gt;This is meant to collect samples and extensions around &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt; that could be used in RHQ and also &lt;a href="http://www.jboss.com/products/jbosson"&gt;JBoss ON&lt;/a&gt;. Users can go there and copy and paste the solutions to get a quicker start themselves. &lt;br /&gt;&lt;br /&gt;While this project is started by the RHQ project team, everyone is encouraged to come and use the samples, fork the project and enhance it. To make this process easier, the project is hosted on GitHub at &lt;br /&gt;&lt;br /&gt;&lt;a href="https://github.com/rhq-project/samples" align="center"&gt;https://github.com/rhq-project/samples&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The initial content centers around the new REST api of RHQ, and shows how to use this API from Ruby or Python and how to &lt;a href="https://github.com/rhq-project/samples/tree/master/rest-api/java/jasper"&gt;build reports&lt;/a&gt; from JasperReports.&lt;br /&gt;&lt;br /&gt;Wanja Pernath has also submitted his &lt;a href="https://github.com/rhq-project/samples/tree/master/cli/groupcontrol"&gt;group control&lt;/a&gt; scripts using the CLI in &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt; and &lt;a href="http://www.jboss.com/products/jbosson"&gt;JBoss ON&lt;/a&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/6080082-9043708561856069630?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/9043708561856069630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=9043708561856069630&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/9043708561856069630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/9043708561856069630'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/12/announcing-rhq-samples-project.html' title='Announcing the RHQ samples project'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-8990372683624399630</id><published>2011-11-23T16:28:00.001+01:00</published><updated>2011-11-23T16:28:03.753+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Join me and RHQ in London next monday</title><content type='html'>&lt;p&gt;&lt;img src="http://photos3.meetupstatic.com/photos/event/9/5/e/3/global_31838371.jpeg" border="0" alt="global_31838371.jpeg" /&gt;&lt;/p&gt;&lt;p&gt;As &lt;a href="http://pilhuhn.blogspot.com/2011/10/rhq-and-jboss-on-at-jbug-london.html"&gt;written before&lt;/a&gt;, I will talk at the London JBoss User Group next monday about RHQ and JBoss ON.&lt;/p&gt;&lt;p&gt;You may register on the &lt;a href="http://www.meetup.com/JBoss-User-Group/events/37943312/"&gt;meetup page&lt;/a&gt;, which also lists the venue and the directions to get there.&lt;/p&gt;&lt;p&gt;&lt;img src="http://3.bp.blogspot.com/-FkxJzoiZDts/TqbIwW3vP9I/AAAAAAAAAKw/TFJ2vkabAR4/s640/JBUG+November.jpg" border="0" alt="JBUG+November.jpg" /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-8990372683624399630?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/8990372683624399630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=8990372683624399630&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8990372683624399630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8990372683624399630'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/11/join-me-and-rhq-in-london-next-monday.html' title='Join me and RHQ in London next monday'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-FkxJzoiZDts/TqbIwW3vP9I/AAAAAAAAAKw/TFJ2vkabAR4/s72-c/JBUG+November.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-5101628382025521830</id><published>2011-10-31T21:21:00.001+01:00</published><updated>2011-10-31T21:35:22.504+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ 4.2 released</title><content type='html'>&lt;p&gt;The RHQ team is proud to have released version 4.2 of the systems management and monitoring framework.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh3.ggpht.com/-u_C7d-qzuHo/ToLyx1-BmcI/AAAAAAAAAYE/meJ8r0-tL2s/Bildschirmfoto%2525202011-09-28%252520um%25252011.33.16.png?imgmax=800" border="0" alt="" width="400" /&gt;&lt;/div&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;This release focuses on:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;UI enhancements / bug fixing&lt;/li&gt;&lt;li&gt;Completion of drift management (this allows you to e.g. detect changes to files on your managed platform and to alert on such drift)&lt;/li&gt;&lt;li&gt;Improvements in server config sync (you can basically take (parts of) the configuration of one RHQ server and apply it to a different RHQ server).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In addition to that, the release is the very first to have a (limited) &lt;a href="http://rhq-project.org/display/RHQ/Design-REST"&gt;REST&lt;/a&gt; interface. Another change is the added support for PostgreSQL 9.1.&lt;/p&gt;&lt;p&gt;We want to thank&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Ted Won for contributing Korean installer messages&lt;/li&gt;&lt;li&gt;Rafael Torres for improvements to the Twitter plugins (OAuth support)&lt;/li&gt;&lt;li&gt;All community members that provided input and bug reports&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;As always check the &lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+4.2.0"&gt;release notes&lt;/a&gt; for a more complete list of changes. You can get the &lt;a href="http://sourceforge.net/projects/rhq/files/rhq/rhq-4.2.0/"&gt;downloads from sourceforge&lt;/a&gt;. And please provide us feedback; for the REST interface we are also looking for usage examples.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Heiko Rupp will showcase RHQ 4.2 at the &lt;a href="http://javablogs.com/Jump.action?id=675988"&gt;November meeting of the London JBUG&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-5101628382025521830?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/5101628382025521830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=5101628382025521830&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5101628382025521830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5101628382025521830'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/10/rhq-42-released.html' title='RHQ 4.2 released'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-u_C7d-qzuHo/ToLyx1-BmcI/AAAAAAAAAYE/meJ8r0-tL2s/s72-c/Bildschirmfoto%2525202011-09-28%252520um%25252011.33.16.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-4640130293494086840</id><published>2011-10-27T12:13:00.001+02:00</published><updated>2011-10-27T22:43:36.083+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Evolving interface in REST with JAX-RS (updated)</title><content type='html'>&lt;p&gt;[update] In the earlier version I had if (mediaType==MediaType.xxx), which is wrong. MediaType is no enum, so we need to compare via .equals()[/update]&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;So in &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt; we've introduced the &lt;a href="http://rhq-project.org/display/RHQ/Design-REST"&gt;REST api&lt;/a&gt; and one of the nice things is the ease of use like this:&lt;/p&gt;&lt;pre&gt;  @GET&lt;br /&gt;  @Path("/customer/{id}")&lt;br /&gt;  public Customer getCustomer(@PathParam("id") int custId) ;&lt;/pre&gt;&lt;p&gt;where the implementation code e.g. looks up a Customer object in  the database and then returns it. Clean expressive API.&lt;/p&gt;&lt;p&gt;Now things start getting more interesting when you consider returning XML, JSON and HTML versions of the document. The first naive way goes like this:&lt;/p&gt;&lt;pre style="margin: 8px;"&gt;  @GET&lt;br /&gt;  @Path("/customer/{id}")&lt;br /&gt;  public Customer getCustomer(@PathParam("id") int custId) ;&lt;/pre&gt;&lt;p&gt;Which fails big time for HTML as (at least &lt;a href="http://www.jboss.org/resteasy"&gt;RESTEasy&lt;/a&gt;) does not know how to serialize the Customer object into HTML. So the next version of the API could look like this:&lt;/p&gt;&lt;pre style="margin: 8px;"&gt;  @GET&lt;br /&gt;  @Path("/customer/{id}")&lt;br /&gt;  @Produces({"application/json","application/xml"})&lt;br /&gt;  public Customer getCustomer(@PathParam("id") int custId) ;&lt;/pre&gt;&lt;p&gt;and&lt;/p&gt;&lt;pre style="margin: 8px;"&gt;&lt;pre style="margin: 8px;"&gt; @GET&lt;br /&gt; @Path("/customer/{id}")&lt;br /&gt; @Produces("text/html")&lt;br /&gt; public String getCustomerHtml(@PathParam("id") int custId) ;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Where both methods get the customer from the backend. The first one then returns the object directly (as above) whereas the second one renders the object with the help of Freemarker templates into a HTML string and returns this one. Just returning String in both cases is also not working as one may think. So this two methods that internally use almost the same code (actually the *Html one calls the other to retrieve the Customer object).&lt;/p&gt;&lt;p&gt;This works quite nicely, but now I want to start adding explicit return codes (and also caching information). JAX-RS offers the &lt;code&gt;Response&lt;/code&gt; class for this, where you can e.g. say &lt;code&gt;Response.ok()&lt;/code&gt; or &lt;code&gt;Response.notFound()&lt;/code&gt;. So the interface changes to&lt;/p&gt;&lt;pre style="margin: 8px;"&gt;  @GET&lt;br /&gt;  @Path("/customer/{id}")&lt;br /&gt;  @Produces({"application/json","application/xml"})&lt;br /&gt;  public Response getCustomer(@PathParam("id") int custId) ;&lt;/pre&gt;&lt;p&gt;and&lt;/p&gt;&lt;pre style="margin: 8px;"&gt;&lt;pre style="margin: 8px;"&gt; @GET&lt;br /&gt; @Path("/customer/{id}")&lt;br /&gt; @Produces("text/html")&lt;br /&gt; public Response getCustomerHtml(@PathParam("id") int custId);&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Internally we have the same situation as before, but can now explicitly return the result codes we want. This is still not optimal. Luckily JAX-RS allows to inject the &lt;code&gt;Request&lt;/code&gt; and the &lt;code&gt;HttpHeaders&lt;/code&gt; into the called Java-method, so that we can now write&lt;/p&gt;&lt;pre&gt;  @GET   &lt;br /&gt;  @Path("/customer/{id}")   &lt;br /&gt;  @Produces({"application/json","application/xml","text/html"})   &lt;br /&gt;  Response getCustomer(@PathParam("id") int custId,&lt;br /&gt;&lt;strong&gt;                    @Context HttpHeaders headers&lt;/strong&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;and then in the implementation do the following:&lt;/p&gt;&lt;pre&gt;  MediaType mediaType = &lt;strong&gt;headers&lt;/strong&gt;.getAcceptableMediaTypes().get(0);&lt;/pre&gt;&lt;pre&gt;  ResponseBuilder builder = ...&lt;/pre&gt;&lt;pre&gt;  if (mediaType.equals(MediaType.TEXT_HTML_TYPE)) {&lt;br /&gt;     String html = renderTemplate("customer", customer);&lt;br /&gt;     builder = Response.ok(html, mediaType);&lt;br /&gt;  }&lt;br /&gt;  else {&lt;br /&gt;     builder = Response.ok(customer);&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;So now we have one method doing all the work for us without code duplication and which can then use the same logic for caching and e.g. paging or linking.&lt;/p&gt;&lt;p&gt;Support for caching is now only one more step away:&lt;/p&gt;&lt;pre style="margin: 8px;"&gt;  @GET   &lt;br /&gt;  @Path("/customer/{id}")   &lt;br /&gt;  @Produces({"application/json","application/xml","text/html"})   &lt;br /&gt;  Response getCustomer(@PathParam("id") int custId,&lt;br /&gt;&lt;strong&gt;            @Context Request request&lt;/strong&gt;,&lt;br /&gt;              @Context HttpHeaders headers);&lt;/pre&gt;&lt;p&gt;and in the implementation&lt;/p&gt;&lt;pre&gt;  // Check for conditional get&lt;/pre&gt;&lt;pre&gt;  String tagString = Integer.toString(customer.hashCode());&lt;br /&gt;  EntityTag eTag = new EntityTag(tagString);       &lt;br /&gt;  Date lastModifiedInDb = new Date(customer.getMtime();&lt;br /&gt;&lt;br /&gt;  Response.ResponseBuilder builder = request.&lt;br /&gt;&lt;strong&gt;           evaluatePreconditions&lt;/strong&gt;(lastModifiedInDb,eTag);&lt;/pre&gt;&lt;pre&gt;  if (builder==null ) { &lt;br /&gt;      // we need to send the full resource&lt;br /&gt;      if (mediaType.equals(MediaType.TEXT_HTML_TYPE)) {&lt;br /&gt;            String html = renderTemplate("customer", customer);&lt;br /&gt;            builder = Response.ok(html, mediaType);&lt;br /&gt;      }  else {&lt;br /&gt;            builder = Response.ok(customer);&lt;br /&gt;     }&lt;br /&gt;  } &lt;/pre&gt;&lt;pre&gt;  builder.tag(eTag); // Set ETag on response&lt;/pre&gt;&lt;p&gt;There is of course still a lot to do, but we have now achieved :&lt;/p&gt;&lt;ul&gt;&lt;li&gt;uniform interface independent of the media type&lt;/li&gt;&lt;li&gt;support for conditional sending and thus caching and re-validation by ETag and time stamp&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The last step is to add some hints to the client how long it may cache data without the need to go out to the network to do any caching at all. Again JAX-RS has already support for that:&lt;/p&gt;&lt;pre&gt;  // Create a cache control       &lt;br /&gt;  CacheControl cc = new CacheControl();       &lt;br /&gt;  cc.setMaxAge(300); // Customer objects are valid for 5 mins       &lt;br /&gt;  cc.setPrivate(false); // Proxies may cache this&lt;br /&gt;  builder.cacheControl(cc);&lt;br /&gt;&lt;span style="font-family: Helvetica; white-space: normal;"&gt; &lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-family: Helvetica; white-space: normal;"&gt;This gives the client a hint, that they can consider the customer object valid for 300s = 5min. Proxies on the way are also allowed to cache the returned object. In practice one may make the maxAge depending on e.g. some average update frequencies and also set the "you need to always verify" flag via &lt;/span&gt;&lt;span style="font-family: Helvetica; white-space: normal;"&gt;&lt;code&gt;cc.setMustRevalidate(true)&lt;/code&gt;&lt;/span&gt;&lt;span style="font-family: Helvetica; white-space: normal;"&gt;.&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;I am sure, this is not yet the last version of the interface, but you can see how it can evolve over time and add new features like support for conditional get. And the best part is that so far the clients don't even have to change a single line of code.&lt;/p&gt;&lt;p&gt;In the future we may want to introduce our own media types like appliation/vnd.rhq-customer+json that newer clients then can make use of. The server can dispatch as seen above the media type and return the appropriate representation. The existing clients, that do not know the new media type can still be serviced by the server just sending this "old" version of it.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-4640130293494086840?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/4640130293494086840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=4640130293494086840&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4640130293494086840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4640130293494086840'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/10/evolving-interface-in-rest-with-jax-rs.html' title='Evolving interface in REST with JAX-RS (updated)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-3466183908960626046</id><published>2011-10-24T09:11:00.001+02:00</published><updated>2011-10-27T09:57:29.030+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ and JBoss ON at JBug London (updated)</title><content type='html'>&lt;p&gt;&lt;img src="http://photos3.meetupstatic.com/photos/event/9/5/e/3/global_31838371.jpeg" border="0" alt="global_31838371.jpeg" /&gt;&lt;/p&gt;&lt;p&gt;I will talk on monday, Nov 28th at the London (UK) JBoss User Group about RHQ and JBoss ON. The talk will give an overview over RHQ and JBoss ON, showcase the new features in RHQ 4.2 and also talk a little bit about the &lt;a href="http://javablogs.com/Jump.action?id=672973"&gt;new REST api&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The talk venue is the Skills matter eXchange, where the &lt;a href="http://www.meetup.com/JBoss-User-Group/events/37943312/"&gt;meetup page&lt;/a&gt; has the link to the location and also a link to the registration.&lt;/p&gt;&lt;p&gt;The guys from &lt;a href="http://blog.c2b2.co.uk/"&gt;C2B2&lt;/a&gt; also created a cool poster:&lt;/p&gt;&lt;p&gt;&lt;img src="http://3.bp.blogspot.com/-FkxJzoiZDts/TqbIwW3vP9I/AAAAAAAAAKw/TFJ2vkabAR4/s640/JBUG+November.jpg" border="0" alt="JBUG+November.jpg" /&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-3466183908960626046?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/3466183908960626046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=3466183908960626046&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3466183908960626046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3466183908960626046'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/10/rhq-and-jboss-on-at-jbug-london.html' title='RHQ and JBoss ON at JBug London (updated)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-FkxJzoiZDts/TqbIwW3vP9I/AAAAAAAAAKw/TFJ2vkabAR4/s72-c/JBUG+November.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-8252309763548237435</id><published>2011-10-14T12:25:00.001+02:00</published><updated>2011-10-17T09:07:37.889+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>Small recap of JBoss One Day Talk in Munich (updated)</title><content type='html'>&lt;p&gt;Yesterday I was at &lt;a href="http://www.onedaytalk.org/"&gt;JBoss One Day Talk&lt;/a&gt;, organized by the local &lt;a href="http://jbug-munich.org/"&gt;JBoss Users Group&lt;/a&gt;. The schedule consisted of 18 sessions in three parallel tracks.&lt;/p&gt;&lt;p&gt;&lt;img src="http://onedaytalk.org/images/jboss-header.png" border="0" alt="jboss-header.png" width="400px" /&gt;&lt;/p&gt;&lt;p&gt;One of the main topics was of course JBoss AS 7, where &lt;a href="http://relative-order.blogspot.com/"&gt;Heiko Braun&lt;/a&gt; was giving an overview, &lt;a href="http://jbossosgi.blogspot.com/"&gt;Thomas Diesler&lt;/a&gt; talking about OSGi on AS7 and myself talking about management of the server doing a lot of live demoing.&lt;/p&gt;&lt;p&gt;Other JBoss speakers included &lt;a href="http://kverlaen.blogspot.com/"&gt;Kris Verlaenen&lt;/a&gt; on JBPM5 and Sashin Shinde on &lt;a href="https://openshift.redhat.com/app/"&gt;Open Shift&lt;/a&gt;. And there was Gavin King announced to talk about Ceylon. While I was looking forward to meet Gavin again, I was also afraid that I would need to talk only to myself with the Ceylon talk being in parallel. (Un :-)fortunately Gavin was not able to make it, so I had a great audience.&lt;/p&gt;&lt;p&gt;My buddy Pavlo Baron was talking about Big Data (&lt;a href="http://www.slideshare.net/pavlobaron/harry-potter-and-enormous-data"&gt;slides are available on Slideshare&lt;/a&gt;). While this presentation was not as technical as I hoped, it nevertheless got me thinking about some stuff we could integrate in a future version of RHQ.&lt;/p&gt;&lt;p&gt;This conference was organized for the second time this year and I like the intimate atmosphere a lot. And of course the speakers dinner at Löwenbräukeller :-)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The organizers of One Day Talk have posted some interviews (in German) -- and especially &lt;a href="http://www.youtube.com/user/OneDayTalk#p/u/0/nJes3Pywcyg"&gt;one with Heiko Braun&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-8252309763548237435?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/8252309763548237435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=8252309763548237435&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8252309763548237435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8252309763548237435'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/10/small-recap-of-jboss-one-day-talk-in.html' title='Small recap of JBoss One Day Talk in Munich (updated)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-8600303438291666211</id><published>2011-09-29T14:04:00.001+02:00</published><updated>2011-09-29T14:04:39.602+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Red Hat'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Some notes from the RHQ team meeting (and a team photo)</title><content type='html'>&lt;p&gt;Last week, the whole &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt; development team met in the Red Hat office in Westford (near Boston). It was very nice for me to finally see some of the old colleagues again after two years and also to meet the new colleagues on the team.&lt;/p&gt;&lt;p&gt;And of course, we took a &lt;a href="https://plus.google.com/114249341487134308671/posts/6gNTfxEr1zQ"&gt;team photo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="https://lh4.googleusercontent.com/-JMvIl6zy5L4/ToRahO2HtgI/AAAAAAAAAYM/RDuFMHTPa70/w402/RHQ_team.JPG" border="0" alt="RHQ_team.JPG" width="400" /&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;We had some very good discussions about possible future features (like e.g. supporting a &lt;a href="http://javablogs.com/Jump.action?id=672973"&gt;REST style API &lt;/a&gt;into the system or on the future of alerts) - I will post more information soon. In the mornings we had show'n'tell style session where each developer was presenting some area of work to the team.&lt;/p&gt;&lt;p&gt;After work we did some more recreational things like:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Seeing the Boston Red Sox win &lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=741331"&gt;18:9 in a 4h base ball game&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Playing minigolf at &lt;a href="http://www.kimballfarm.com/"&gt;Kimball Farm&lt;/a&gt; (and ate huge amounts of ice cream)&lt;/li&gt;&lt;li&gt;Had dinner at nice places&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;One of things we also did is to publish some sort or &lt;a href="http://rhq-project.org/display/RHQ/Roadmap"&gt;Roadmap for RHQ&lt;/a&gt; and discussed that we will move the source to GitHub at some time and also split up the build in an easier to build way. We will post about that when we are making more progress on this.&lt;/p&gt;&lt;p&gt;Ah and did I mention "Beer"?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-8600303438291666211?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/8600303438291666211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=8600303438291666211&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8600303438291666211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8600303438291666211'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/09/some-notes-from-rhq-team-meeting-and.html' title='Some notes from the RHQ team meeting (and a team photo)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-7984532266408232926</id><published>2011-09-28T21:13:00.001+02:00</published><updated>2011-10-09T20:54:38.430+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>REST coming to RHQ (updated)</title><content type='html'>&lt;p&gt;In the past few weeks I was also working on implementing a sample REST interface for RHQ (see also &lt;a href="http://javablogs.com/Jump.action?id=667246"&gt;here&lt;/a&gt; and &lt;a href="https://fedorahosted.org/pipermail/rhq-devel/2011-June/000855.html"&gt;here&lt;/a&gt;). At our team meeting I've showcased the work I've done in the heiko-rest branch of our git repository and we have decided to merge that into the RHQ master branch sooner or later.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: &lt;em&gt;this has been merged today (2011/10/09); if you build from source, you need to build the container again.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;To stimulate your appetite I will show some samples what you could do with the REST api:&lt;/p&gt;&lt;p&gt;Returning resources in html representation&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh6.ggpht.com/-Esr_XfTYwcQ/ToLx-F63q8I/AAAAAAAAAX4/W1Ty9irZsgo/Bildschirmfoto%2525202011-09-28%252520um%25252011.31.55.png?imgmax=800" border="0" alt="Bildschirmfoto 2011 09 28 um 11 31 55" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;and as JSON&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh3.ggpht.com/-WDhiHy766Fc/ToLyZ5rNlCI/AAAAAAAAAX8/UpPkzSiOpyU/Bildschirmfoto%2525202011-09-28%252520um%25252012.06.55.png?imgmax=800" border="0" alt="Bildschirmfoto 2011 09 28 um 12 06 55" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Render metric graphs in Javascript with the help of &lt;a href="http://mbostock.github.com/d3/"&gt;D3.js&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh3.ggpht.com/-Pc-oHEDT-00/ToLyk85Zo_I/AAAAAAAAAYA/D40aB4sEchU/Bildschirmfoto%2525202011-09-28%252520um%25252011.32.45.png?imgmax=800" border="0" alt="Bildschirmfoto 2011 09 28 um 11 32 45" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Or an alternative resource tree in Javascript with the help of &lt;a href="http://mbostock.github.com/d3/"&gt;D3.js&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh3.ggpht.com/-u_C7d-qzuHo/ToLyx1-BmcI/AAAAAAAAAYE/meJ8r0-tL2s/Bildschirmfoto%2525202011-09-28%252520um%25252011.33.16.png?imgmax=800" border="0" alt="Bildschirmfoto 2011 09 28 um 11 33 16" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Providing data to an Android client application (this is not very sophisticated yet, but should illustrate the idea):&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;iframe src="http://player.vimeo.com/video/29740860?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="400" height="300" frameborder="0"&gt;&lt;/iframe&gt;&lt;p style="text-align: center;"&gt;&lt;a href="http://vimeo.com/29740860"&gt;RHQpocket as REST client to the RHQ server&lt;/a&gt; from &lt;a href="http://vimeo.com/user5053188"&gt;Heiko W. Rupp&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;List / add / delete favorite resources:&lt;/div&gt;&lt;pre style="text-align: left;"&gt;$ curl localhost:7080/rest/1/user/favorites/resource -u rhqadmin:rhqadmin&lt;br /&gt;[{"resourceWithType":{"@resourceId":"10160","pluginName":"RHQServer"&lt;br /&gt;       ,"resourceName":"Measurement Subsystem","typeId":10235&lt;br /&gt;       ,"typeName":"RHQ Server Measurement Subsystem"}}&lt;br /&gt; ,{"resourceWithType":{"@resourceId":"10361","pluginName":"jboss-as-7"&lt;br /&gt;       ,"resourceName":"\/devel\/jbas7\/jboss-as\/build\/target\/jboss-as-7.1.0.Alpha2-SNAPSHOT","typeId":10055&lt;br /&gt;       ,"typeName":"JBossAS7-Standalone"}}]&lt;/pre&gt;&lt;p style="text-align: left;"&gt;Add resource with id 10013 to favorites:&lt;/p&gt;&lt;pre style="text-align: left;"&gt;$ curl localhost:7080/rest/1/user/favorites/resource/10013 -X PUT -u rhqadmin:rhqadmin&lt;/pre&gt;&lt;pre style="text-align: left;"&gt;$ curl localhost:7080/rest/1/user/favorites/resource -u rhqadmin:rhqadmin&lt;br /&gt;[{"resourceWithType":{"@resourceId":"10013","pluginName":"Platforms"&lt;br /&gt;       ,"resourceName":"en0","typeId":10024&lt;br /&gt;       ,"typeName":"Network Adapter"}}&lt;br /&gt; ,{"resourceWithType":{"@resourceId":"10160","pluginName":"RHQServer"&lt;br /&gt;       ,"resourceName":"Measurement Subsystem","typeId":10235&lt;br /&gt;       ,"typeName":"RHQ Server Measurement Subsystem"}}&lt;br /&gt; ,{"resourceWithType":{"@resourceId":"10361","pluginName":"jboss-as-7"&lt;br /&gt;       ,"resourceName":"\/devel\/jbas7\/jboss-as\/build\/target\/jboss-as-7.1.0.Alpha2-SNAPSHOT","typeId":10055&lt;br /&gt;       ,"typeName":"JBossAS7-Standalone"}}]&lt;/pre&gt;&lt;p style="text-align: left;"&gt;And remove it again from favorites:&lt;/p&gt;&lt;pre style="text-align: left;"&gt;$ curl localhost:7080/rest/1/user/favorites/resource/10013 -X DELETE -u rhqadmin:rhqadmin&lt;/pre&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Of course those are only some examples and should illustrate that:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;the api will be usable from different clients&lt;/li&gt;&lt;li&gt;from different programming languages&lt;/li&gt;&lt;li&gt;it will allow write / update access&lt;/li&gt;&lt;li&gt;it will allow users to write extensions to RHQ like e.g. Über-consoles that we do not even think of&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;We were also thinking of the possibility for agents in other languages being able to push events and metrics over this interface.&lt;/p&gt;&lt;p&gt;The code is currently in the &lt;a href="http://git.fedorahosted.org/git/?p=rhq/rhq.git;a=shortlog;h=refs/heads/heiko-rest"&gt;heiko-rest&lt;/a&gt; branch in &lt;a href="http://git.fedorahosted.org/git/?p=rhq/rhq.git;a=summary"&gt;RHQ-git&lt;/a&gt; (at fedorahosted), but we plan to merge it into master as soon as possible. If you want to try the code, check out the branch and either build RHQ from scratch. Or try running /etc/dev-utils/setup-rest/setup.sh to populate the server with the needed libraries (edit that file first), then build server/jar and gui/rest-war in dev-mode so that the artifacts are copied to the server. Then edit rhq.ear/META-INF/application.xml to include the rest war.  Of course all this will not be needed after we have merged the code in the master, as the normal build will then have all the artifacts.&lt;/p&gt;&lt;p&gt;The code for the Android app is available from &lt;a href="https://github.com/pilhuhn/RHQpocket"&gt;my repository on GitHub&lt;/a&gt;&lt;/p&gt;&lt;p&gt;An important part of this whole effort is &lt;strong&gt;your input&lt;/strong&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Provide us with your requirements e.g. on the &lt;a href="http://rhq-project.org/display/RHQ/Design-REST"&gt;Design - REST&lt;/a&gt; page of the RHQ-Wiki&lt;/li&gt;&lt;li&gt;Contribute to the code&lt;/li&gt;&lt;li&gt;Show us your examples you have built on top of the API (and perhaps even contribute them)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Please help us making this great so that you can create great stuff with the interface.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-7984532266408232926?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/7984532266408232926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=7984532266408232926&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7984532266408232926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7984532266408232926'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/09/rest-coming-to-rhq.html' title='REST coming to RHQ (updated)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-Esr_XfTYwcQ/ToLx-F63q8I/AAAAAAAAAX4/W1Ty9irZsgo/s72-c/Bildschirmfoto%2525202011-09-28%252520um%25252011.31.55.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-2193526125979066158</id><published>2011-09-26T13:29:00.001+02:00</published><updated>2011-09-26T13:29:53.041+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ 4.1 released</title><content type='html'>&lt;p&gt;Actually this is not new, but already three weeks old - I wanted to add it here, for completeness sake:&lt;/p&gt;&lt;p&gt;RHQ 4.1.0 has been released on Sept 2nd. Make sure you read the &lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+4.1.0"&gt;release notes&lt;/a&gt; and then proceed to the &lt;a href="http://sourceforge.net/projects/rhq/files/rhq/rhq-4.1.0/"&gt;download&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Major changes include translations of the UI into Chinese, Japanese and Portuguese. Big thanks go to Fusayuki Minamoto, Jijun Liu, Zhongqianglee and Rafael Torres Coelho Soares. Also in this release we have started to detect changes in configurations and files ("Drift"), made enhancements in the area of Bundles (provisioning) and added a first shot at a plugin to manage &lt;a href="http://www.jboss.org/jbossas"&gt;JBoss AS 7&lt;/a&gt;. Last but not least, Elias Ross has enhanced the SNMPTrapd plugin.&lt;/p&gt;&lt;p&gt;As always: please try the release and give us feedback.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-2193526125979066158?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/2193526125979066158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=2193526125979066158&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2193526125979066158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2193526125979066158'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/09/rhq-41-released.html' title='RHQ 4.1 released'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-1051509222488464229</id><published>2011-08-11T18:04:00.001+02:00</published><updated>2011-08-11T18:04:16.878+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ 4.1.0 BETA released</title><content type='html'>&lt;p&gt;&lt;img style="border: 0px initial initial;" src="http://rhq-project.org/download/attachments/1017410/RHQ?version=2&amp;amp;modificationDate=1257543585409" alt="" align="right" /&gt;&lt;/p&gt;&lt;p&gt;The RHQ team has just released version 4.1.0.&lt;strong&gt;beta&lt;/strong&gt; of the RHQ systems management and monitoring suite. This release serves as a preview of the upcoming version 4.1.0 and has a wealth of new features.&lt;/p&gt;&lt;p&gt;Some of the new features are work in progress and will only be finished after 4.1, which means that you can still influence the features with your ideas and feedback.&lt;/p&gt;&lt;p&gt;&lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+4.1.0+beta"&gt;Release notes are on the RHQ wiki &lt;/a&gt;and also contain the link to the download at the bottom.&lt;/p&gt;&lt;p&gt;&lt;div&gt;We want to especially thank Elias Ross, Fusayuki Minamoto, Jijun Liu, Zhongqianglee&lt;/div&gt;&lt;div&gt;and Rafael Torres Coelho Soares for their contributions (even if some are not in this build)&lt;/div&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-1051509222488464229?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/1051509222488464229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=1051509222488464229&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1051509222488464229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1051509222488464229'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/08/rhq-410-beta-released.html' title='RHQ 4.1.0 BETA released'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6690573805438000695</id><published>2011-08-08T11:02:00.001+02:00</published><updated>2011-08-11T15:16:26.469+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Some progress with REST for RHQ and new questions</title><content type='html'>&lt;p&gt;&lt;img src="http://rhq-project.org/download/attachments/1017410/RHQ?version=2&amp;amp;modificationDate=1257543585409" alt="" align="right" /&gt;&lt;/p&gt;&lt;p&gt;As &lt;a href="https://fedorahosted.org/pipermail/rhq-devel/2011-June/000855.html"&gt;written some time ago&lt;/a&gt; on the &lt;a href="https://fedorahosted.org/mailman/listinfo/rhq-devel"&gt;rhq-devel mailing list&lt;/a&gt;, I've started implementing a RESTful interface for &lt;a href="http://rhq-project.org/"&gt;RHQ&lt;/a&gt;. A page on the RHQ wiki shows the requirement and some progress about the implemented API. Development currently happens in a &lt;a href="http://git.fedorahosted.org/git/?p=rhq/rhq.git;a=shortlog;h=refs/heads/heiko-rest"&gt;personal feature branch&lt;/a&gt; in order to have some code to play around and gather some experience from.&lt;/p&gt;&lt;p&gt;One thing that I found out over the weekend is that at least with JAX-B setting up the interface and REST resource classes is far from trivial and I have been surprised a lot by interesting error messages.&lt;/p&gt;&lt;p&gt;Anyway, the current state of the API is already in a somewhat usable shape (mostly read-only at the moment). The implementation has been done via &lt;a href="http://www.jboss.org/resteasy"&gt;RESTeasy&lt;/a&gt; (RE). Security integration with the RHQ security model is also done and the session bean methods can just use a Subject called &lt;em&gt;caller&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;So, having solved some stuff rises even more &lt;strong&gt;questions&lt;/strong&gt;:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Would stuff get easier when not trying to support XML, but only Json?&lt;/li&gt;&lt;li&gt;How to use much / more of the original RHQ domain model without running into LazyLoadExceptions all over the place (RE runs as a servlet to do the marshalling - at this point in time the connection to the entity manager is already closed).&lt;/li&gt;&lt;li&gt;How to implement linking between related classes / concepts. E.g. a Resource can have Alerts. Now instead of embedding Alert elements when returning a Resource object, I would like to at most have a list of Links to &lt;code&gt;/alert/{id}&lt;/code&gt;. I feel that the answer may have to do with the next question&lt;/li&gt;&lt;li&gt;In RHQ we often pass just primitive ids around (e.g. &lt;code&gt;int resourceId&lt;/code&gt;) How can easily turn them into a link to the target Resource (given that Resource lives below &lt;code&gt;/resource/{id}&lt;/code&gt;)&lt;/li&gt;&lt;li&gt;In the Atom-PUB linking I would add links to sub-resources like e.g. &lt;code&gt;/resource/1234/availability&lt;/code&gt; or &lt;code&gt;/resource/1234/schedules&lt;/code&gt; without  the need to first obtain those values from the database.&lt;/li&gt;&lt;li&gt;Does it make sense to transfer date/times as long? Especially as Json seems to have some issues there. Complex date strings require a lot of processing on server and client.&lt;/li&gt;&lt;li&gt;Is there a preferred way to expose id elements ((XML) attribute, element, not at all? With Atom-PUB links present, I think the id would not need any special treatment at all, as it is available in the URI of the resource and in the link. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;A part of the solution to questions 3+4 seem to be to only use Objects in REST domain objects, as the marshalling will skip elements where the corresponding object is null, so for e.g. the parent Resource it is enough to initialize its resource with the Resource id to only include this, but not all the other fields that should then be obtained from their real URI.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;But then I am not sure how much my ideas are RESTful at all :-)&lt;/p&gt;&lt;p&gt;I would love to get some feedback here.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-6690573805438000695?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6690573805438000695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6690573805438000695&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6690573805438000695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6690573805438000695'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/08/some-progress-with-rest-for-rhq-and.html' title='Some progress with REST for RHQ and new questions'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-5416063424106350583</id><published>2011-07-29T10:42:00.001+02:00</published><updated>2011-07-29T10:42:29.442+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comic'/><title type='text'>How to survive conf calls with elevator music</title><content type='html'>&lt;p&gt;I guess you all know the situation: you have dialed into a conference call but the leader is not yet present. So the conference call bridge plays elevator music or soft jazz or ... When you hear that the first time it is nice but for people that spend a good part of the day in virtual meetings this gets boring. You end up in a state like this:&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh6.ggpht.com/-Q6xFMOoJaPY/TjJxBKU3tmI/AAAAAAAAAWk/_3i3QLeJezI/meeting-elevator.png?imgmax=800" border="0" alt="Meeting elevator" width="297" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Actually there is a solution to this:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh5.ggpht.com/-1obsK6IXo4U/TjJyQsx0O7I/AAAAAAAAAWs/ewYrRtKvfxY/Meeting-good.png?imgmax=800" border="0" alt="Meeting good" width="359" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;And meetings may even become more interesting if you do not pull out the head-phones when the meeting actually starts :-)&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-5416063424106350583?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/5416063424106350583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=5416063424106350583&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5416063424106350583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5416063424106350583'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/07/how-to-survive-conf-calls-with-elevator.html' title='How to survive conf calls with elevator music'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-Q6xFMOoJaPY/TjJxBKU3tmI/AAAAAAAAAWk/_3i3QLeJezI/s72-c/meeting-elevator.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-2227083346985980543</id><published>2011-07-27T12:08:00.001+02:00</published><updated>2011-07-27T12:08:36.814+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ tip of the day: plugin version</title><content type='html'>&lt;p&gt;I recently had the issue while working on the AS7 plugin that no matter what version I was using in the maven pom, the server always printed a message like the following on deployment:&lt;/p&gt;&lt;pre&gt;22:09:51,082 INFO  [ProductPluginDeployer] Newer version of [jboss-as-7] plugin &lt;br /&gt;   found (version 4.0.0-SNAPSHOT) - older version (4.0.0-SNAPSHOT ....&lt;/pre&gt;&lt;p&gt;And this happened with a pom version of 4.1.0-SNAPSHOT. The manifest file also showed 4.1* and the file name also had 4.1.0* in it and not 4.0.0.&lt;/p&gt;&lt;p&gt;It turned out that I had an explicit entry like this in the plugin descriptor, rhq-plugin.xml:&lt;/p&gt;&lt;pre&gt;&amp;lt;plugin name="jboss-as-7"        &lt;br /&gt;        displayName="JBoss-AS-7-Plugin"&lt;br /&gt;        package="org.rhq.modules.plugins.jbossas7"&lt;br /&gt;        version="&lt;strong&gt;4.0.0-SNAPSHOT&lt;/strong&gt;" &amp;gt;&lt;/pre&gt;&lt;p&gt;This explicit version overwrites all the other version qualifiers that maven creates; and a maven release cycle will not update it as well. After removing the version attribute from the plugin element, versioning was as expected.&lt;/p&gt;&lt;p&gt;So if you need a stable version, encode it in the plugin descriptor. Otherwise leave it to the build magic to provide the version.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-2227083346985980543?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/2227083346985980543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=2227083346985980543&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2227083346985980543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2227083346985980543'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/07/rhq-tip-of-day-plugin-version.html' title='RHQ tip of the day: plugin version'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-4730438114746153223</id><published>2011-07-15T09:29:00.001+02:00</published><updated>2011-07-15T09:29:35.045+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>Updated slides from my JFS talk about JBossAS7 available</title><content type='html'>&lt;p&gt;I've put the updated slides of my &lt;a href="http://www.java-forum-stuttgart.de/abstracts.html#A4"&gt;presentation&lt;/a&gt; about "Neuerungen in &lt;a href="http://www.jboss.org/as7"&gt;JBossAS7&lt;/a&gt;" at this year's&lt;a href="http://www.java-forum-stuttgart.de/index.html"&gt; Java-Forum-Stuttgart&lt;/a&gt; online. You can &lt;a href="http://www.pilhuhn.de/hwr/misc/JFS2011.pdf"&gt;download them as PDF&lt;/a&gt;.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-4730438114746153223?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/4730438114746153223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=4730438114746153223&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4730438114746153223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4730438114746153223'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/07/updated-slides-from-my-jfs-talk-about.html' title='Updated slides from my JFS talk about JBossAS7 available'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-7863455645893634883</id><published>2011-06-22T16:43:00.001+02:00</published><updated>2011-06-28T17:26:08.717+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>Who's messing with my classes - IntelliJ! (UPDATED)</title><content type='html'>&lt;p&gt;So I have the following code in one of my classes:&lt;/p&gt;&lt;pre&gt;    public void setName(@NotNull String name) {&lt;br /&gt;        this.name = name;&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;In some situations when I use them, I get errors like this (I do not want to discuss right now that the annotation is wrong when I am complaining about it throwing errors):&lt;/p&gt;&lt;pre&gt;Caused by: java.lang.IllegalArgumentException: Argument 0 for @NotNull&lt;br /&gt;   parameter of org/rhq/core/domain/resource/Resource.setName must not&lt;br /&gt;   be null&lt;br /&gt;        at org.rhq.core.domain.resource.Resource.setName(Resource.java)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;The &lt;code&gt;@NotNull&lt;/code&gt; Annotation is coming from the Jetbrains &lt;code&gt;org.jetbrains.annotations&lt;/code&gt; package.&lt;/p&gt;&lt;p&gt;Decompiling &lt;code&gt;Resource.class&lt;/code&gt; with &lt;code&gt;jad Resource.class&lt;/code&gt; shows this:&lt;/p&gt;&lt;pre&gt;    public void setName(String name)&lt;br /&gt;    {&lt;br /&gt;        if(name == null)&lt;br /&gt;        {&lt;br /&gt;            throw new IllegalArgumentException("Argument 0 for @NotNull parameter of org/rhq/core/domain/resource/Resource.setName must not be null");&lt;br /&gt;        } else&lt;br /&gt;        {&lt;br /&gt;            this.name = name;&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&lt;p&gt;So someone is inserting this check for &lt;code&gt;if(name==null)&lt;/code&gt; on compile time. As we are building with maven and other team members do not see this, it looks like a local issue. But then, other team members have a very similar environment than I do.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;[UPDATE]&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I was suspecting IntelliJ already, as my colleague &lt;a href="http://freshjava.blogspot.com/"&gt;Ian&lt;/a&gt; was talking about the @NotNull compiler setting, but I turned that off and on and it had no effect.&lt;/p&gt;&lt;p&gt;After the comment by &lt;a href="http://www.blogger.com/profile/16657240494706707555"&gt;Scott Vachalek&lt;/a&gt; I went over this again -- especially as we are not using the IntelliJ compiler in our maven runs. I enabled the option, and compiled on command line. Nothing happened.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh5.ggpht.com/-G61A4slQ4YE/TgnwqjHNteI/AAAAAAAAATE/uaAUL21WtWE/Bildschirmfoto%2525202011-06-28%252520um%25252017.02.12.png?imgmax=800" border="0" alt="Bildschirmfoto 2011 06 28 um 17 02 12" width="307" /&gt;&lt;/div&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;And then today I was running some unit tests from within IntelliJ and saw the "Looking for classes to compile ..." message in IntelliJ UI and then also messages about compiling. Then ran &lt;em&gt;jad&lt;/em&gt; again and saw those checks again.&lt;/p&gt;&lt;p&gt;So it turns out that IntelliJ is compiling my classes with those @NotNull annotations again. And as this is in a maven build, it is putting the resulting classes in the places where a command line compile would also put them. My next command line build will then see that the class files are newer than the sources and not recompile them, but just include them in the resulting artifact.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-7863455645893634883?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/7863455645893634883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=7863455645893634883&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7863455645893634883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7863455645893634883'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/06/who-messing-with-my-classes.html' title='Who&amp;#39;s messing with my classes - IntelliJ! (UPDATED)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/-G61A4slQ4YE/TgnwqjHNteI/AAAAAAAAATE/uaAUL21WtWE/s72-c/Bildschirmfoto%2525202011-06-28%252520um%25252017.02.12.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-4016001993273281275</id><published>2011-06-06T11:17:00.001+02:00</published><updated>2011-06-06T11:31:16.462+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>Seemingly common RESTEasy error and a solution</title><content type='html'>&lt;p&gt;So I was playing with &lt;a href="http://www.jboss.org/resteasy"&gt;RESTeasy&lt;/a&gt; a bit and using the &lt;a href="http://docs.jboss.org/resteasy/docs/2.2.0.GA/userguide/html_single/index.html#d0e56"&gt;standalone servlet method&lt;/a&gt; of exposing REST services was very easy and straightforward.&lt;/p&gt;&lt;p&gt;And then I thought, ok, let me now do the &lt;a href="http://docs.jboss.org/resteasy/docs/2.2.0.GA/userguide/html_single/index.html#RESTEasy_EJB_Integration"&gt;EJB integration on a JBoss AS 4.2.3&lt;/a&gt; - and ran into the following error:&lt;/p&gt;&lt;p&gt;&lt;code&gt;java.lang.RuntimeException: Class is not a root resource.  It, or one of its interfaces must be annotated with @Path: $Proxy862 implements: org.rhq.enterprise.server.rest.ResourceHandlerLocal org.jboss.ejb3.JBossProxy&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Which was strange as I did have the &lt;code&gt;@Path&lt;/code&gt; annotation present:&lt;/p&gt;&lt;pre&gt;@Local&lt;br /&gt;@Produces({"application/json","application/xml","text/plain"})&lt;br /&gt;@Path("/resource")&lt;br /&gt;public interface ResourceHandlerLocal {&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Googling around showed, others have/had the same issue; but as so often, no solution was given. After some digging around I found the issue: the error message is a bit misleading, and I was actually missing a &lt;code&gt;@ApplicationPath("/rest")&lt;/code&gt; annotation, which defines the "root context" and which is not needed in the simple standalone war case.&lt;/p&gt;&lt;p&gt;So I implemented a subclass of &lt;code&gt;javax.ws.rs.core.Application&lt;/code&gt; which is marked with this &lt;code&gt;ApplicationPath&lt;/code&gt; annotation and registered it in &lt;code&gt;web.xml&lt;/code&gt;:&lt;/p&gt;&lt;pre&gt;&amp;lt;!DOCTYPE web-app PUBLIC&lt;br /&gt; "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"&lt;br /&gt; "http://java.sun.com/dtd/web-app_2_3.dtd" &amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;web-app&amp;gt;&lt;br /&gt;    &amp;lt;display-name&amp;gt;RHQ Rest interface&amp;lt;/display-name&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;context-param&amp;gt;&lt;br /&gt;        &amp;lt;param-name&amp;gt;resteasy.jndi.resources&amp;lt;/param-name&amp;gt;&lt;br /&gt;        &amp;lt;param-value&amp;gt;rhq/ResourceHandlerBean/local&amp;lt;/param-value&amp;gt;&lt;br /&gt;        &amp;lt;description&amp;gt;List of jndi names of EJBs local interfaces that define REST stuff&amp;lt;/description&amp;gt;&lt;br /&gt;    &amp;lt;/context-param&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;servlet&amp;gt;&lt;br /&gt;        &amp;lt;servlet-name&amp;gt;Resteasy&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;        &amp;lt;servlet-class&amp;gt;&lt;br /&gt;            org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher&lt;br /&gt;        &amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;init-param&amp;gt;&lt;br /&gt;            &amp;lt;param-name&amp;gt;resteasy.scan&amp;lt;/param-name&amp;gt;&lt;br /&gt;            &amp;lt;param-value&amp;gt;false&amp;lt;/param-value&amp;gt;&lt;br /&gt;        &amp;lt;/init-param&amp;gt;&lt;strong&gt; &amp;lt;init-param&amp;gt;&lt;br /&gt;            &amp;lt;param-name&amp;gt;javax.ws.rs.Application&amp;lt;/param-name&amp;gt;&lt;br /&gt;            &amp;lt;param-value&amp;gt;org.rhq.enterprise.server.rest.RHQApplication&amp;lt;/param-value&amp;gt;&lt;br /&gt;        &amp;lt;/init-param&amp;gt;&lt;/strong&gt;&lt;br /&gt;    &amp;lt;/servlet&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;        &amp;lt;servlet-name&amp;gt;Resteasy&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;        &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;    &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&amp;lt;/web-app&amp;gt;&lt;/pre&gt;&lt;p&gt;And now the REST provider is starting nicely :)&lt;/p&gt;&lt;p&gt;Of course, if you are using JBoss AS 6 or the upcoming AS7, you do not need to go through all this, as they have RESTeasy already integrated and ready to go.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-4016001993273281275?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/4016001993273281275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=4016001993273281275&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4016001993273281275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4016001993273281275'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/06/seemingly-common-resteasy-error-and.html' title='Seemingly common RESTEasy error and a solution'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-7970215419914097877</id><published>2011-06-04T22:44:00.001+02:00</published><updated>2011-06-04T22:44:59.795+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Two nice days at Android DevCamp Stuttgart 2</title><content type='html'>&lt;p&gt;&lt;div style="text-align: left;"&gt;In Stuttgart, we had an &lt;a href="http://androidcamp-stuttgart.mixxt.de/"&gt;Android Developer Camp&lt;/a&gt; organized by the local &lt;a href="http://stuttgart.gtugs.org/"&gt;Google Technology User Group&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: left;"&gt;This was a two day camp with workshops and a hackathon on the first day and a bar camp style set of sessions on the second one.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh4.ggpht.com/-tJTO0rCcJcY/TeqTpqtb_bI/AAAAAAAAASc/9NthTzPk3es/Heiko_droids_adcs2.jpg?imgmax=800" border="0" alt="Heiko droids adcs2" width="365" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Some of the almost 200 plush Androids&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;On the first day I went to the Hackathon and worked on Android 3 aka Honeycomb migration issues together with Fridger from Openintents. On the second day I was in a few sessions about app mashups, home screen widgets, git and also gave a session that was talking about what I have done in the Android 2-&amp;gt;3 migration so far. My hope was to learn from some participants, but it looks like tablets are not yet that popular. Slides of my session &lt;a href="http://androidcamp-stuttgart.mixxt.de/networks/files/file.67160"&gt;are here&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: left;"&gt;Samsung, who were one of the main sponsors of the event, sent some developer advocates with new 8.9 and 10.1 tablets to play with, which was nice too.&lt;/div&gt;&lt;div style="text-align: left;"&gt;Food was good and the Androids were plenty, so this was a good event. Thanks to all sponsors and the organization team.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-7970215419914097877?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/7970215419914097877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=7970215419914097877&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7970215419914097877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7970215419914097877'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/06/two-nice-days-at-android-devcamp.html' title='Two nice days at Android DevCamp Stuttgart 2'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-tJTO0rCcJcY/TeqTpqtb_bI/AAAAAAAAASc/9NthTzPk3es/s72-c/Heiko_droids_adcs2.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-8793091665079206839</id><published>2011-05-23T21:10:00.001+02:00</published><updated>2011-05-23T21:10:08.098+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ 4.0.1 released</title><content type='html'>&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: center;"&gt;&lt;img style="border: 0px initial initial;" src="http://lh3.ggpht.com/_OdJrfDwRKLM/TbnKOw9WjyI/AAAAAAAAASE/tOO9lxJo95I/RHQ-logo-wallpaper.png?imgmax=800" border="0" alt="RHQ logo wallpaper" width="400" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;The &lt;a href="http://rhq-project.org/"&gt;RHQ&lt;/a&gt; team has just released version 4.0.1 of its server management and monitoring software.&lt;/p&gt;&lt;p&gt;This release is a bugfix release over &lt;a href="http://javablogs.com/Jump.action?id=654840"&gt;RHQ 4 which was released earlier this month&lt;/a&gt;. The biggest change is the addition of support for IE 7 and 8, as well as the fix for a memory leak that came from how JBossAS internally has set up the pools for MDBs and SLSBs.&lt;/p&gt;&lt;p&gt;You can browse the full &lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+4.0.1"&gt;release notes&lt;/a&gt;, which also contain a link to the download.&lt;/p&gt;&lt;p&gt;Jay Shaughnessy has &lt;a href="http://jayshaughnessy.blogspot.com/2011/05/smartgwt-ie7-ie8-support.html"&gt;written a blog post &lt;/a&gt;on what was necessary with SmartGWT to get it to work on IE7 and 8.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-8793091665079206839?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/8793091665079206839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=8793091665079206839&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8793091665079206839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8793091665079206839'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/05/rhq-401-released.html' title='RHQ 4.0.1 released'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_OdJrfDwRKLM/TbnKOw9WjyI/AAAAAAAAASE/tOO9lxJo95I/s72-c/RHQ-logo-wallpaper.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-3010073292315340415</id><published>2011-05-04T21:52:00.001+02:00</published><updated>2011-05-04T21:52:00.810+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>And I thought JBossAS had long stack traces ...</title><content type='html'>&lt;blockquote&gt;&lt;p&gt;05-04 21:49:32.865: ERROR/AndroidRuntime(10036): FATAL EXCEPTION: main        java.lang.IndexOutOfBoundsException: Invalid index 12, size is 12        at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)        at java.util.ArrayList.get(ArrayList.java:308)        at de.bsd.zwitscher.StatusAdapter.getView(StatusAdapter.java:79)        at android.widget.AbsListView.obtainView(AbsListView.java:1943)        at android.widget.ListView.makeAndAddView(ListView.java:1756)        at android.widget.ListView.fillDown(ListView.java:656)        at android.widget.ListView.fillSpecific(ListView.java:1314)        at android.widget.ListView.layoutChildren(ListView.java:1587)        at android.widget.AbsListView.onLayout(AbsListView.java:1794)        at android.view.View.layout(View.java:9330)        at android.view.ViewGroup.layout(ViewGroup.java:3795)        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1542)        at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1527)        at android.widget.LinearLayout.onLayout(LinearLayout.java:1316)        at android.view.View.layout(View.java:9330)        at android.view.ViewGroup.layout(ViewGroup.java:3795)        at android.widget.FrameLayout.onLayout(FrameLayout.java:400)        at android.view.View.layout(View.java:9330)        at android.view.ViewGroup.layout(ViewGroup.java:3795)        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1542)        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1403)        at android.widget.LinearLayout.onLayout(LinearLayout.java:1314)        at android.view.View.layout(View.java:9330)        at android.view.ViewGroup.layout(ViewGroup.java:3795)        at android.widget.FrameLayout.onLayout(FrameLayout.java:400)        at android.view.View.layout(View.java:9330)        at android.view.ViewGroup.layout(ViewGroup.java:3795)        at android.widget.FrameLayout.onLayout(FrameLayout.java:400)        at android.view.View.layout(View.java:9330)        at android.view.ViewGroup.layout(ViewGroup.java:3795)        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1542)        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1403)        at android.widget.LinearLayout.onLayout(LinearLayout.java:1314)        at android.view.View.layout(View.java:9330)        at android.view.ViewGroup.layout(ViewGroup.java:3795)        at android.widget.FrameLayout.onLayout(FrameLayout.java:400)        at android.view.View.layout(View.java:9330)        at android.view.ViewGroup.layout(ViewGroup.java:3795)        at android.widget.FrameLayout.onLayout(FrameLayout.java:400)        at android.view.View.layout(View.java:9330)        at android.view.ViewGroup.layout(ViewGroup.java:3795)        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1542)        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1403)        at android.widget.LinearLayout.onLayout(LinearLayout.java:1314)        at android.view.View.layout(View.java:9330)        at android.view.ViewGroup.layout(ViewGroup.java:3795)        at android.widget.FrameLayout.onLayout(FrameLayout.java:400)        at android.view.View.layout(View.java:9330)        at android.view.ViewGroup.layout(ViewGroup.java:3795)        at android.view.ViewRoot.performTraversals(ViewRoot.java:1201)        at android.view.ViewRoot.handleMessage(ViewRoot.java:1944)        at android.os.Handler.dispatchMessage(Handler.java:99)        at android.os.Looper.loop(Looper.java:126)        at android.app.ActivityThread.main(ActivityThread.java:3997)        at java.lang.reflect.Method.invokeNative(Native Method)        at java.lang.reflect.Method.invoke(Method.java:491)        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)        at dalvik.system.NativeStart.main(Native Method)&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-3010073292315340415?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/3010073292315340415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=3010073292315340415&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3010073292315340415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3010073292315340415'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/05/and-i-thought-jbossas-had-long-stack.html' title='And I thought JBossAS had long stack traces ...'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-4498354604493564967</id><published>2011-05-04T10:39:00.001+02:00</published><updated>2011-05-24T20:52:01.956+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ 4 - alerting on call time data</title><content type='html'>&lt;p&gt;One of the features of &lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+4.0.0"&gt;RHQ 4&lt;/a&gt; (I think it was hidden in RHQ 3 already) is alerting on Call time data (aka Response time data). This code was contributed by Frank Brüseke quite some time ago (thanks again, Frank).&lt;/p&gt;&lt;p&gt;By default that feature is hidden&lt;em&gt; (in&lt;/em&gt;&lt;em&gt;RHQ 3 only; RHQ 4 has it enabled by default)&lt;/em&gt;, so you first have to enable it in the system settings:&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh5.ggpht.com/_OdJrfDwRKLM/TcENQwgkI_I/AAAAAAAAASI/quW_n3tOcps/Bildschirmfoto%202011-05-04%20um%2009.54.41.png?imgmax=800" border="0" alt="Bildschirmfoto 2011 05 04 um 09 54 41" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;System settings&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Now (and don't forget to enable the gathering of call time data) when you go to a resource that has calltime data (e.g. stateless session beans or web apps), you can define alerts on call time data. In the first step, you select one of the two available options:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh3.ggpht.com/_OdJrfDwRKLM/TcEN1WM072I/AAAAAAAAASM/bSgLNg72ns8/Bildschirmfoto%202011-05-04%20um%2010.14.54.png?imgmax=800" border="0" alt="Bildschirmfoto 2011 05 04 um 10 14 54" width="324" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Add alert condition&lt;/div&gt;&lt;div style="text-align: left;"&gt;Here you can select crossing/matching of a threshold or change of a calltime value. In the last step you need to provide the call time entry to check and some reference values:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh5.ggpht.com/_OdJrfDwRKLM/TcEOVAfzgjI/AAAAAAAAASQ/Z5R8CXfNW_w/Bildschirmfoto%202011-05-04%20um%2010.15.05.png?imgmax=800" border="0" alt="Bildschirmfoto 2011 05 04 um 10 15 05" width="328" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Select condition values and comparator&lt;/div&gt;&lt;div style="text-align: left;"&gt;In the last section you can also give a regular expression on what to alert; this allows you limit e.g. the methods that will be checked for SLSBs or the URLs for web applications.&lt;/div&gt;&lt;div style="text-align: left;"&gt;As always: please provide feedback. When the feedback is positive, we may un-hide this feature for future versions of RHQ.&lt;/div&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-4498354604493564967?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/4498354604493564967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=4498354604493564967&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4498354604493564967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4498354604493564967'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/05/rhq-4-alerting-on-call-time-data_04.html' title='RHQ 4 - alerting on call time data'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_OdJrfDwRKLM/TcENQwgkI_I/AAAAAAAAASI/quW_n3tOcps/s72-c/Bildschirmfoto%202011-05-04%20um%2009.54.41.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-2653710795467221629</id><published>2011-05-04T10:34:00.001+02:00</published><updated>2011-05-04T10:34:19.163+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ 4 - alerting on call time data</title><content type='html'>&lt;p&gt;One of the features of &lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+4.0.0"&gt;RHQ 4&lt;/a&gt; (I think it was hidden in RHQ 3 already) is alerting on Call time data (aka Response time data). This code was contributed by Frank Brüseke long quite some time ago.&lt;/p&gt;&lt;p&gt;By default that feature is hidden, so you first have to enable it in the system settings:&lt;/p&gt;&lt;p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh5.ggpht.com/_OdJrfDwRKLM/TcENQwgkI_I/AAAAAAAAASI/quW_n3tOcps/Bildschirmfoto%202011-05-04%20um%2009.54.41.png?imgmax=800" border="0" alt="Bildschirmfoto 2011 05 04 um 09 54 41" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;System settings&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Now (and don't forget to enable the gathering of call time data) when you go to a resource that has calltime data (e.g. stateless session beans or web apps), you can define alerts on call time data. In the first step, you select one of the two available options:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh3.ggpht.com/_OdJrfDwRKLM/TcEN1WM072I/AAAAAAAAASM/bSgLNg72ns8/Bildschirmfoto%202011-05-04%20um%2010.14.54.png?imgmax=800" border="0" alt="Bildschirmfoto 2011 05 04 um 10 14 54" width="324" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Add alert condition&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Here you can select crossing/matching of a threshold or change of a calltime value. In the last step you need to provide the call time entry to check and some reference values:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh5.ggpht.com/_OdJrfDwRKLM/TcEOVAfzgjI/AAAAAAAAASQ/Z5R8CXfNW_w/Bildschirmfoto%202011-05-04%20um%2010.15.05.png?imgmax=800" border="0" alt="Bildschirmfoto 2011 05 04 um 10 15 05" width="328" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Select condition values and comparator&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;In the last section you can also give a regular expression on what to alert; this allows you limit e.g. the methods that will be checked for SLSBs or the URLs for web applications.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;As always: please provide feedback. When the feedback is positive, we may un-hide this feature for future versions of RHQ.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-2653710795467221629?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/2653710795467221629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=2653710795467221629&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2653710795467221629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2653710795467221629'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/05/rhq-4-alerting-on-call-time-data.html' title='RHQ 4 - alerting on call time data'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_OdJrfDwRKLM/TcENQwgkI_I/AAAAAAAAASI/quW_n3tOcps/s72-c/Bildschirmfoto%202011-05-04%20um%2009.54.41.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-4091529830499521412</id><published>2011-05-02T22:19:00.001+02:00</published><updated>2011-05-02T22:19:45.209+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ 4 released</title><content type='html'>&lt;p&gt;&lt;div style="text-align: center;"&gt;&lt;em&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh3.ggpht.com/_OdJrfDwRKLM/TbnKOw9WjyI/AAAAAAAAASE/tOO9lxJo95I/RHQ-logo-wallpaper.png?imgmax=800" border="0" alt="RHQ logo wallpaper" width="400" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/em&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;The RHQ team is proud to have released version &lt;strong&gt;4.0&lt;/strong&gt; of &lt;strong&gt;&lt;a href="http://rhq-project.org/"&gt;RHQ&lt;/a&gt;&lt;/strong&gt; monitoring and management project after 10 month of hard work. Most prominent change is the huge rewrite of most parts of the GUI in GWT.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh6.ggpht.com/_OdJrfDwRKLM/Tbm6B3gVBzI/AAAAAAAAASA/c1py032k1Jo/Bildschirmfoto%202011-04-28%20um%2021.02.19.png?imgmax=800" border="0" alt="Bildschirmfoto 2011 04 28 um 21 02 19" width="400" /&gt;&lt;/div&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;New features include:&lt;/strong&gt;&lt;/p&gt;&lt;ul style="font-size: 10pt; line-height: 13pt; list-style-type: disc;"&gt;&lt;li style="font-size: 10pt; line-height: 13pt; padding: 0px; margin: 0px;"&gt;new SmartGWT-based GUI &lt;/li&gt;&lt;li&gt;support for Postgres 9.0&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; padding: 0px; margin: 0px;"&gt;support for deleting Agent plugins&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; padding: 0px; margin: 0px;"&gt;support for executing an RHQ CLI script when an alert fires (for more info, see &lt;a class="external-link" style="color: #4a5d75; font-weight: bold; font-size: 12px; text-decoration: none !important;" rel="nofollow" href="http://metlos.wordpress.com/2011/03/08/scripted-alert-notifications-in-rhq/"&gt;this blog&lt;/a&gt;)&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; padding: 0px; margin: 0px;"&gt;improved authorization for content repositories - public/private repos, repo owners, and MANAGE_REPOSITORIES priv&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; padding: 0px; margin: 0px;"&gt;Much improved MySQL agent-plugin (by Steve Milidge)&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; padding: 0px; margin: 0px;"&gt;New logfile alert-sender (by Steve Milidge)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Note that Internet Explorer is not fully supported (we expect to fully support it soon) - FireFox and Webkit-based browsers are fine.&lt;/p&gt;&lt;p&gt;You can browse &lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+4.0.0"&gt;the release notes&lt;/a&gt; to see a more detailed list of changes, new features and also known issued.&lt;/p&gt;&lt;p&gt;The &lt;a href="https://sourceforge.net/projects/rhq/files/rhq/rhq-4.0.0/"&gt;binaries are available from SourceForge&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-4091529830499521412?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/4091529830499521412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=4091529830499521412&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4091529830499521412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4091529830499521412'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/05/rhq-4-released.html' title='RHQ 4 released'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_OdJrfDwRKLM/TbnKOw9WjyI/AAAAAAAAASE/tOO9lxJo95I/s72-c/RHQ-logo-wallpaper.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-4015742455727475490</id><published>2011-04-21T17:29:00.001+02:00</published><updated>2011-04-21T17:29:11.905+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ 4 candidate release is out and waits for testing</title><content type='html'>&lt;p&gt;&lt;img style="float: right;" src="http://rhq-project.org/download/attachments/1017410/RHQ?version=2&amp;amp;modificationDate=1257543585409" border="0" alt="RHQ" /&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;RHQ team is &lt;a href="http://www.rhq-project.org/display/RHQ/RHQ+4.0+Release+Plan"&gt;planning&lt;/a&gt; to release &lt;strong&gt;RHQ 4&lt;/strong&gt; end of next week. And while we know that there are &lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=585306"&gt;areas that need more love&lt;/a&gt;, we want to encourage every one to test the &lt;strong&gt;release candidate, &lt;/strong&gt;&lt;a href="https://sourceforge.net/projects/rhq/files/rhq/rhq-4.0.0.CR/"&gt;&lt;strong&gt;RHQ 4 CR&lt;/strong&gt;&lt;/a&gt;over the long week end and report back (critical) bugs, so that we have a chance to fix them for the final version.&lt;/p&gt;&lt;p&gt;Download is on &lt;a href="http://sourceforge.net/projects/rhq/files/rhq/rhq-4.0.0.CR/"&gt;SourceForge&lt;/a&gt; and the &lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+4.0+CR"&gt;release notes can be found on rhq-project.org&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Speaking of giving some love: if you are willing to do some &lt;strong&gt;translations&lt;/strong&gt; of the UI messages into your native language, &lt;strong&gt;please contact me&lt;/strong&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-4015742455727475490?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/4015742455727475490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=4015742455727475490&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4015742455727475490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4015742455727475490'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/04/rhq-4-candidate-release-is-out-and.html' title='RHQ 4 candidate release is out and waits for testing'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-7331510068288112979</id><published>2011-03-21T10:56:00.001+01:00</published><updated>2011-03-21T10:56:32.161+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ tab sweep</title><content type='html'>&lt;p&gt;We had a productive time since last tab sweep and released a &lt;a href="http://javablogs.com/Jump.action?id=640801"&gt;third developer preview&lt;/a&gt; of &lt;a href="http://rhq-project.org/"&gt;RHQ&lt;/a&gt;, as well as &lt;a href="http://javablogs.com/Jump.action?id=646100"&gt;&lt;strong&gt;RHQ 4.0.0 Beta 1&lt;/strong&gt;&lt;/a&gt;. Please give the beta a try and report issues, as well as file feature requests.&lt;/p&gt;&lt;p&gt;The &lt;a href="http://www.jboss.org/webinars"&gt;JBoss developers webinars&lt;/a&gt; series had a session about RHQ. The &lt;a href="http://vimeo.com/19992280"&gt;recording is available on Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Ian Springer has answered the forums post about &lt;a href="http://community.jboss.org/message/592490#592490"&gt;"JBoss AS 5.1 and RHQ"&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IRC&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;As you probably know, RHQ team is hanging out on IRC in &lt;a href="irc://irc.freenode.net/#rhq"&gt;irc://irc.freenode.net/#rhq&lt;/a&gt;. If your access to IRC is blocked for whatever reasons, you can still try to use the &lt;a href="http://webchat.freenode.net/?channels=rhq"&gt;web front end&lt;/a&gt; to join us.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Blog postings&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I've written: &lt;a href="http://javablogs.com/Jump.action?id=637411"&gt;An explanation of metrics and their per minute counterparts&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Mazz has written two blog posts: &lt;a href="http://management-platform.blogspot.com/2011/02/alerting-and-remote-script-execution.html"&gt;Alerting and Remote Script Execution&lt;/a&gt; and an update on &lt;a href="http://management-platform.blogspot.com/2011/01/bundle-provisioning-via-rhq.html"&gt;Bundle provisioning with RHQ&lt;/a&gt; both with flash demos.&lt;/p&gt;&lt;p&gt;Speaking of Bundles, John Sanda has created a &lt;a href="http://johnsanda.blogspot.com/2011/02/rhq-bundle-recipe-for-deploying-jboss.html"&gt;bundle receipt for deploying JBossAS&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Lukáš Krejčí has written about &lt;a href="http://metlos.wordpress.com/2011/03/08/scripted-alert-notifications-in-rhq/"&gt;running CLI scripts as alert notifications&lt;/a&gt;. This feature made it into RHQ 4 beta 1.&lt;/p&gt;&lt;p&gt;Jay Shaughnessy has written a hint about &lt;a href="http://jayshaughnessy.blogspot.com/2011/02/smartgwt-tip-regex-evaluation.html"&gt;regular expression evaluation in GWT&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Developer mailing list &lt;/strong&gt;(&lt;a href="https://fedorahosted.org/mailman/listinfo/rhq-devel"&gt;subscribe here&lt;/a&gt;)&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;We had some discussions about a new &lt;a href="https://fedorahosted.org/pipermail/rhq-devel/2011-March/000670.html"&gt;Auditing subsystem&lt;/a&gt; (this would be a great topic to start RHQ hacking, as this can be (mostly) done in great isolation to the existing code base.&lt;/p&gt;&lt;p&gt;Another discussion went around the &lt;a href="https://fedorahosted.org/pipermail/rhq-devel/2011-February/000584.html"&gt;new Summary/Activity pages for groups&lt;/a&gt; and about displaying &lt;a href="https://fedorahosted.org/pipermail/rhq-devel/2011-February/000605.html"&gt;recent package history and bundle deployments on those&lt;/a&gt;.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-7331510068288112979?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/7331510068288112979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=7331510068288112979&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7331510068288112979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7331510068288112979'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/03/rhq-tab-sweep.html' title='RHQ tab sweep'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-2170223406854292807</id><published>2011-03-14T14:30:00.001+01:00</published><updated>2011-03-14T14:30:14.054+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ 4 beta 1 available</title><content type='html'>&lt;p&gt;Last week the &lt;strong&gt;first beta version of RHQ 4&lt;/strong&gt; has been made available. This beta is the first large milestone towards a &lt;a href="http://rhq-project.org/"&gt;RHQ&lt;/a&gt; 4 release later this year. The bigest part of the UI has been transitioned to GWT and is now in a state for serious testing.&lt;/p&gt;&lt;p&gt;One new cool feature made it in to the beta (since the last &lt;a href="http://javablogs.com/Jump.action?id=640801"&gt;DP3&lt;/a&gt; release): there is now an &lt;a href="http://metlos.wordpress.com/2011/03/08/scripted-alert-notifications-in-rhq/"&gt;alert sender that can run CLI scripts&lt;/a&gt; when an alert has fired.&lt;/p&gt;&lt;p&gt;Check the &lt;a href="http://www.rhq-project.org/display/RHQ/Release+Notes+4.0+Beta1"&gt;release notes page&lt;/a&gt; which also contains the link to the downloads.&lt;/p&gt;&lt;p&gt;As always: please give us feedback!&lt;/p&gt;&lt;p style="font-size: 13px;"&gt;&lt;strong&gt;Tell us your story about RHQ&lt;/strong&gt;&lt;/p&gt;&lt;p style="font-size: 13px;"&gt;We are interested on how you use RHQ. Please reply in the &lt;a href="http://community.jboss.org/thread/163960"&gt;forums&lt;/a&gt; or the &lt;a href="https://fedorahosted.org/mailman/listinfo/rhq-users"&gt;rhq-users mailing list&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-2170223406854292807?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/2170223406854292807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=2170223406854292807&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2170223406854292807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2170223406854292807'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/03/rhq-4-beta-1-available.html' title='RHQ 4 beta 1 available'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-1378602911086073085</id><published>2011-02-18T12:53:00.001+01:00</published><updated>2011-02-18T12:53:57.805+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ 4 DP3 is out, webinar recording available</title><content type='html'>&lt;p&gt;The third preview of RHQ 4 has been released yesterday.&lt;/p&gt;&lt;p&gt;From the release announcement:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;We have just released RHQ 4.0 Developer Preview 3. This release is &lt;br /&gt;intended for developers and other interested parties who want a &lt;br /&gt;first-hand look at upcoming changes in RHQ 4.0, in particular the new &lt;br /&gt;GWT UI. Please note that this release is not intended for production use &lt;br /&gt;or serious testing.&lt;br /&gt;&lt;br /&gt;New Features:&lt;br /&gt;* Improved dashboard&lt;br /&gt;* Improved operations UI (for single resource)&lt;br /&gt;* Improved bundles UI&lt;br /&gt;* System settings have been ported to GWT&lt;br /&gt;* Support for Postgres 9.0&lt;br /&gt;* Support for deleting agent plugins&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The &lt;a href="http://www.rhq-project.org/display/RHQ/Release+Notes+4.0+DP3"&gt;release notes&lt;/a&gt; tell you more and also contain the download link.&lt;/p&gt;&lt;p/&gt;&lt;p&gt;Two weeks ago, I have given a webinar "Overview of RHQ and JBossON". The recording is now available from Vimeo:&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;iframe src="http://player.vimeo.com/video/19992280" width="400" height="300" frameborder="0"&gt;&lt;/iframe&gt;&lt;p&gt;&lt;a href="http://vimeo.com/19992280"&gt;Overview of RHQ and JBoss Operations Network&lt;/a&gt; from &lt;a href="http://vimeo.com/jbossdeveloper"&gt;JBoss Developer&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-1378602911086073085?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/1378602911086073085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=1378602911086073085&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1378602911086073085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1378602911086073085'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/02/rhq-4-dp3-is-out-webinar-recording.html' title='RHQ 4 DP3 is out, webinar recording available'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-4246335347767134175</id><published>2011-02-04T18:09:00.001+01:00</published><updated>2011-02-07T09:26:58.838+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Metrics in RHQ and their per minute counterparts</title><content type='html'>&lt;p&gt;In RHQ we support some kinds of metrics:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Dynamic: metric values are 'randomly' going up and down. An example could be the free main memory of a computer&lt;/li&gt;&lt;li&gt;Trendsup: a metric whose values are monotonically increasing. This could e.g. be the number of transactions committed or request served&lt;/li&gt;&lt;li&gt;Trendsdown: the counterpart of trendsup where values are monotonically decreasing.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Usually the absolute number of commits or requests does not really tell much. More interesting is the dirst deviation by time: how many requests are coming in per minute. Here you can directly see if you have a request storm coming in or if it is quiet.&lt;/p&gt;&lt;p&gt;Now lets have a look at an excerpt from a screen shot of the metrics table in RHQ:&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh6.ggpht.com/_OdJrfDwRKLM/TUwsbAlFmEI/AAAAAAAAARU/72a0qRvizVs/metrics2.png?imgmax=800" border="0" alt="Metrics2" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Screenshot from RHQ UI (non-interesting lines cut out)&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Here we see that the minimum number of requests served in the last 1day was 327.100 and the maximum number was 333.540. This sounds strange at first glance. Actually this does not mean within the last 24h we served somewhere between 327k and 333k requests, but rather that at the start of the last 24h period, the counter was at 327k and at then end it was at 333k. The following diagram illustrates this:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh6.ggpht.com/_OdJrfDwRKLM/TUwySzgKJ3I/AAAAAAAAARY/7A0OGcxf9w0/metrics3.png?imgmax=800" border="0" alt="Metrics3" width="279" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;The position in time of the green bar is "now".&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;And now we can do the math:&lt;/div&gt;&lt;div style="text-align: left;"&gt;333540 - 327100 = 6440 requests in the last 24h&lt;/div&gt;&lt;div style="text-align: left;"&gt;6440 / ( 26 * 60 ) = 4.47 requests per minute (on average)&lt;/div&gt;&lt;div style="text-align: left;"&gt;And those 4.47 requests are the 4.6 you see as avg. requests per minute in above graph (modulo some rounding issues).&lt;/div&gt;&lt;p&gt;The counter for "requests served" will be reset to zero when the web-app is started again e.g. by fully restarting the web-container (or app server) .&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-4246335347767134175?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/4246335347767134175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=4246335347767134175&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4246335347767134175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4246335347767134175'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/02/metrics-in-rhq-and-their-per-minute.html' title='Metrics in RHQ and their per minute counterparts'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_OdJrfDwRKLM/TUwsbAlFmEI/AAAAAAAAARU/72a0qRvizVs/s72-c/metrics2.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-3418630770716330119</id><published>2011-01-12T09:45:00.001+01:00</published><updated>2011-01-12T09:45:01.273+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>Please take a few seconds for a poll about RHQ 4</title><content type='html'>&lt;p&gt;Please take a few seconds for this poll to &lt;a href="http://community.jboss.org/polls/1058"&gt;tell us what you think about RHQ 4&lt;/a&gt; so far.&lt;/p&gt;&lt;p&gt;You need to be logged in with your JBoss community account. Then just select an option and click on submit. Done.&lt;/p&gt;&lt;p&gt;Of course you can leave comments on that page too. The poll ends in two weeks.&lt;/p&gt;&lt;p&gt;Thanks&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-3418630770716330119?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/3418630770716330119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=3418630770716330119&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3418630770716330119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3418630770716330119'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/01/please-take-few-seconds-for-poll-about.html' title='Please take a few seconds for a poll about RHQ 4'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-8046078157782496262</id><published>2011-01-10T16:57:00.001+01:00</published><updated>2011-02-07T10:48:47.033+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ tab sweep (updated)</title><content type='html'>&lt;p&gt;Issue 2/2011 of German &lt;a href="http://it-republik.de/jaxenter/java-magazin-ausgaben/Clojure-000430.html"&gt;JavaMagazin&lt;/a&gt; features a 5 page article about RHQ. Currently this is available in the printed version, and also on the &lt;a href="http://it-republik.de/jaxenter/artikel/Systemmanagement-mit-RHQ-3559.html"&gt;JavaMagazin home page&lt;/a&gt; later on.&lt;/p&gt;&lt;p&gt;There is a new video on Vimeo about &lt;a href="http://vimeo.com/18624567"&gt;using the standalone plugin container&lt;/a&gt; for plugin development. The start scripts are now also available for &lt;a href="https://sourceforge.net/projects/rhq/files/rhq/standalone-container/"&gt;download from SourceForge&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If you don't want to run the agent as root, but need to access resources like postgresql.conf, &lt;a href="http://javablogs.com/Jump.action?id=628457"&gt;use ACLs&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If you want to monitor apache httpd, you can try an &lt;a href="https://github.com/pilhuhn/rhq-apache-bmx"&gt;experimental plugin&lt;/a&gt; that uses mod_bmx to talk to apache (the GitHub downloads section contains a binary version of the plugin; you still need to install mod_bmx in httpd).&lt;/p&gt;&lt;p&gt;John Sanda has written a plugin, that can use &lt;a href="https://github.com/jsanda/rhq-altlang"&gt;Clojure files to do the actual plugin work&lt;/a&gt;. So if you find writing the plugin code in Java boring, just use Clojure :-) (See also &lt;a href="https://github.com/jsanda/rhq-altlang"&gt;this article from John&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;And then of course &lt;a href="http://javablogs.com/Jump.action?id=623124"&gt;RHQ 4 DP 2 is out &lt;/a&gt;(since start of December).&lt;/p&gt;&lt;p&gt;And last but not least:&lt;/p&gt;&lt;p&gt;The Cool Stuff section of the JBoss community website now has some &lt;a href="http://jboss.org/coolstuff/desktopwallpapers/rhq.html"&gt;RHQ wallpapers&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-8046078157782496262?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/8046078157782496262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=8046078157782496262&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8046078157782496262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8046078157782496262'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2011/01/rhq-tab-sweep.html' title='RHQ tab sweep (updated)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-8826417203287788282</id><published>2010-12-30T15:46:00.001+01:00</published><updated>2010-12-31T11:24:32.299+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='Postgres'/><title type='text'>Running the RHQ agent as root? Alternatives? ACLs!</title><content type='html'>&lt;p&gt; &lt;/p&gt;&lt;p&gt;Some &lt;a href="http://rhq-project.org/"&gt;RHQ&lt;/a&gt; plugins require access to some resources that are normally only readable by &lt;em&gt;root&lt;/em&gt; or the respective owner. The example I am using here is the postgres plugin. This plugin needs access to &lt;code&gt;$PGDATA/postgresql.conf&lt;/code&gt; in order to show the configuration in the UI (and to possibly update it).&lt;/p&gt;&lt;p&gt;Unfortunately postgres requires this file to be owned by user &lt;em&gt;postgres&lt;/em&gt; and only be read(-writable) by this user (mode 600) and the directory containing this file (&lt;code&gt;$PGDATA&lt;/code&gt;) is also required to be owned by user &lt;em&gt;postgres&lt;/em&gt; and only be accessible by user &lt;em&gt;postgres&lt;/em&gt; (mode 700).&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;One way to access the data it to run the RHQ agent as &lt;em&gt;root&lt;/em&gt; and be done. But even if the agent does not do any harm, many admins don't feel comfortable with it - especially when using plugins from third parties that they don't have the source for. Or when using the script plugin, which can use shell scripts to do its work.&lt;/p&gt;&lt;p&gt;Luckily there is an easy way to get around this limitation: ACLs&lt;/p&gt;&lt;p&gt;ACL (access control lists) are a posix feature that is implemented in most (all) modern system these days. The way to set and query them are different unfortunately.&lt;/p&gt;&lt;p&gt;On &lt;a href="http://www.redhat.com/"&gt;Red Hat&lt;/a&gt;&lt;a href="http://www.redhat.com/rhel/"&gt;Enterprise Linux&lt;/a&gt; (and &lt;a href="http://fedoraproject.org/"&gt;Fedora&lt;/a&gt; and probably all other Linuxes) you can set them like this ('hrupp' is used as agent user):&lt;/p&gt;&lt;pre class="prettyprint" style="color: #007000; font-family: monospace; line-height: inherit; background-color: #fafafa; margin-top: 0.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; overflow-x: auto; overflow-y: auto; padding: 10px; border: 1px solid #cccccc;"&gt;postgres$ pwd&lt;br /&gt;/var/db/postgres&lt;br /&gt;postgres$ setfacl -m u:hrupp:rw $PGDATA/postgresql.conf&lt;br /&gt;postgres$ setfactl -m u:hrupp:x $PGDATA&lt;/pre&gt;&lt;p&gt;&lt;code&gt;ls&lt;/code&gt; shows that there are ACLs enabled:&lt;/p&gt;&lt;pre class="prettyprint" style="color: #007000; font-family: monospace; line-height: inherit; background-color: #fafafa; margin-top: 0.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; overflow-x: auto; overflow-y: auto; padding: 10px; border: 1px solid #cccccc;"&gt;root# ls -lsa&lt;br /&gt; 8 drwx--x---+ 13 postgres postgres  4096 Dec 21 14:04 .&lt;br /&gt;24 -rw-rw----+  1 postgres postgres 16872 Dec 17 12:11 postgresql.conf&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;See the little + in the perms? That indicates an active ACL. Those can be queried via getfacl:&lt;/p&gt;&lt;pre class="prettyprint" style="color: #007000; font-family: monospace; line-height: inherit; background-color: #fafafa; margin-top: 0.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; overflow-x: auto; overflow-y: auto; padding: 10px; border: 1px solid #cccccc;"&gt;root# getfacl .&lt;br /&gt;# file: .&lt;br /&gt;# owner: postgres&lt;br /&gt;# group: postgres&lt;br /&gt;user::rwx&lt;br /&gt;user:hrupp:--x&lt;br /&gt;group::---&lt;br /&gt;mask::--x&lt;br /&gt;other::---&lt;p&gt; &lt;/p&gt;&lt;p&gt;root# getfacl postgresql.conf&lt;br /&gt;# file: postgresql.conf&lt;br /&gt;# owner: postgres&lt;br /&gt;# group: postgres&lt;br /&gt;user::rw-&lt;br /&gt;user:hrupp:rw-&lt;br /&gt;group::---&lt;br /&gt;mask::rw-&lt;br /&gt;other::---&lt;br /&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;Also remember that the mount options need to enable ACLs first.:&lt;/p&gt;&lt;pre class="prettyprint" style="color: #007000; font-family: monospace; line-height: inherit; background-color: #fafafa; margin-top: 0.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; overflow-x: auto; overflow-y: auto; padding: 10px; border: 1px solid #cccccc;"&gt;root# grep acl /etc/fstab&lt;br /&gt;/dev/mapper/VG_data-data1       /var/db     ext4    defaults,&lt;strong&gt;acl&lt;/strong&gt;    1 3&lt;br /&gt;&lt;/pre&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;On Mac OS X the command to see them in directory listings is '&lt;code&gt;ls -lea&lt;/code&gt;' (shown below). To set an ACL you can use &lt;code&gt;chmod&lt;/code&gt; (here 'hrupp' is used as agent user):&lt;/p&gt;&lt;pre class="prettyprint" style="color: #007000; font-family: monospace; line-height: inherit; background-color: #fafafa; margin-top: 0.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; overflow-x: auto; overflow-y: auto; padding: 10px; border: 1px solid #cccccc;"&gt;postgres$ pwd&lt;br /&gt;/var/db/postgres&lt;br /&gt;postgres$ chmod +a "hrupp allow read,write" postgresql.conf&lt;br /&gt;postgres$ ls -le postgresql.conf&lt;br /&gt; -rw-------+ 1 postgres  postgres  16759 Jul 22  2009 postgresql.conf&lt;br /&gt;0: user:hrupp allow read,write&lt;br /&gt;postgres$ chmod +a "hrupp allow execute" .&lt;br /&gt;postgres$ ls -lea&lt;br /&gt;drwx------+ 23 postgres  postgres    782 Dec 30 15:00 . &lt;br /&gt;0: user:hrupp allow search&lt;br /&gt;-rw-------+  1 postgres  postgres  16759 Jul 22  2009 postgresql.conf &lt;br /&gt;0: user:hrupp allow read,write&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;The '0:' tells us that this is the first acl on the file. If there were more acls set, they would be enumerated there as well and evaluated in order.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;I have been told that recent Windows versions also support POSIX ACLs, so this should work there as well.&lt;/p&gt;&lt;p&gt;---&lt;/p&gt;&lt;p&gt;This tip was brought to you by the excellent &lt;a href="https://www.redhat.com/courses/rh135_red_hat_system_administration_2_and_rhcsa_exam/"&gt;RHCSA training&lt;/a&gt;.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-8826417203287788282?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/8826417203287788282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=8826417203287788282&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8826417203287788282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8826417203287788282'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/12/running-rhq-agent-as-root-alternatives.html' title='Running the RHQ agent as root? Alternatives? ACLs!'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-8171024344974844723</id><published>2010-12-29T09:05:00.001+01:00</published><updated>2010-12-29T09:05:12.267+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>A pitfall in PendingIntent (with solution)</title><content type='html'>&lt;p&gt;The Android documentation has a nice overview chapter about how to notifiy the user with &lt;a href="http://developer.android.com/guide/topics/ui/notifiers/notifications.html"&gt;status bar notifications&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The example text works quite nicely and the user gets informed and can then call back into the application. But when working on &lt;a href="http://javablogs.com/Jump.action?id=623652"&gt;Zwitscher&lt;/a&gt; it did not work as intended by me. But lets start slowly.&lt;/p&gt;&lt;p&gt;Setting up a  notifiction goes along the lines of (taken from the &lt;a href="http://developer.android.com/guide/topics/ui/notifiers/notifications.html"&gt;developer guide&lt;/a&gt;):&lt;/p&gt;&lt;pre class="prettyprint" style="color: #007000; font-family: monospace; line-height: inherit; background-color: #fafafa; margin-top: 0.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; overflow-x: auto; overflow-y: auto; padding: 10px; border: 1px solid #cccccc;"&gt;&lt;br /&gt;Intent notificationIntent = new Intent(this, MyClass.class);&lt;br /&gt;PendingIntent contentIntent = &lt;br /&gt;  PendingIntent.getActivity(this, 0, notificationIntent, 0);&lt;br /&gt;notification.setLatestEventInfo(context, "Title", &lt;br /&gt;    "something went wrong", contentIntent);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;where a PendingIntent is set up as a "pointer" and stored by the system so that when the user selects the notification in the status bar the target activity specified in the notificationIntent can be called.&lt;/p&gt;&lt;p&gt;Now sometimes you want to attach some additional data to the intent to be delivered - like a longer explanation why your action failed. You would go like:&lt;/p&gt;&lt;pre class="prettyprint" style="color: #007000; font-family: monospace; line-height: inherit; background-color: #fafafa; margin-top: 0.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; overflow-x: auto; overflow-y: auto; padding: 10px; border: 1px solid #cccccc;"&gt;Intent notificationIntent = new Intent(context,MyClass.class);&lt;br /&gt; notificationIntent.putExtra("key","value");        &lt;br /&gt; notificationIntent.putExtra("key2",someCounter++);&lt;/pre&gt;&lt;p&gt;to add the payload. And in MyClass you would get the data via&lt;/p&gt;&lt;pre class="prettyprint" style="color: #007000; font-family: monospace; line-height: inherit; background-color: #fafafa; margin-top: 0.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; overflow-x: auto; overflow-y: auto; padding: 10px; border: 1px solid #cccccc;"&gt;Intent intent = getIntent();        &lt;br /&gt;Bundle bundle = intent.getExtras();        &lt;br /&gt;String head = bundle.getString("key");        &lt;br /&gt;Integer body = bundle.getInt("key2");&lt;/pre&gt;&lt;p&gt;Now when the notification fires,  the intent is created and attached to the PendingIntent and this shows up in the status bar&lt;/p&gt;&lt;p&gt;User then selects the status bar to see the longer message and presses this area to see the full details. This means that the system delivers "out of the blue" the created Intent message and thus starts MyClass-activity, which then pulls the payload from the intent.&lt;/p&gt;&lt;p&gt;When you do this a few times in a row you will see that the passed counter (&lt;code&gt;someCounter&lt;/code&gt;) does increase in your sending activity, but that the receiver always shows the initial value. Canceling the notification in the sender does not help here.&lt;/p&gt;&lt;p&gt;This comes from the fact, that the system does not assume that only because we pass a new Intent object to the pending intent, we want this new intent object to be delivered and just keeps the old (initial) pending intent alive.&lt;/p&gt;&lt;p&gt;To get the desired semantics, we need to pass a flag to tell the system:&lt;/p&gt;&lt;pre class="prettyprint" style="color: #007000; font-family: monospace; line-height: inherit; background-color: #fafafa; margin-top: 0.5em; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; overflow-x: auto; overflow-y: auto; padding: 10px; border: 1px solid #cccccc;"&gt;PendingIntent pintent = &lt;br/&gt;   PendingIntent.getActivity(context,0,intent,&lt;b&gt;PendingIntent.FLAG_CANCEL_CURRENT&lt;/b&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This flag (&lt;code&gt;FLAG_CANCEL_CURRENT&lt;/code&gt;) tells the system that the old pending intent is no longer valid and it should cancel (=remove) it and then create a fresh one for us. There are more possible flags, which are described on the javadoc page for &lt;a href="http://developer.android.com/reference/android/app/PendingIntent.html"&gt;PendingIntent&lt;/a&gt;.&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;You can see a full example in the &lt;a href="http://bsd.de/zwitscher/"&gt;Zwitscher&lt;/a&gt; source code &lt;a href="https://github.com/pilhuhn/ZwitscherA"&gt;on github&lt;/a&gt; in the&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/UpdateStatusTask.java"&gt;UpdateStatusTask&lt;/a&gt;::createNotifitcation method (sender)&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/ErrorDisplayActivity.java"&gt;ErrorDisplayActivity&lt;/a&gt;::onCreate() method (receiver)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;And remember that Zwitscher is live on the Android market - download and try it :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-8171024344974844723?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/8171024344974844723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=8171024344974844723&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8171024344974844723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8171024344974844723'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/12/pitfall-in-pendingintent-with-solution.html' title='A pitfall in PendingIntent (with solution)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-1003426239854594074</id><published>2010-12-11T14:40:00.001+01:00</published><updated>2010-12-11T14:40:47.344+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Zwitscher is on the market</title><content type='html'>&lt;p&gt;&lt;a href="http://bsd.de/zwitscher"&gt;Zwitscher&lt;/a&gt;, my Twitter client for Android(*) is now available in the Android-Market.&lt;/p&gt;&lt;p style="font-size: 11px;"&gt;&lt;img src="http://lh5.ggpht.com/_OdJrfDwRKLM/TQN-KghD-wI/AAAAAAAAAQ0/V-2wqgJTSEo/zwitscher_on_market.jpg?imgmax=800" border="0" alt="zwitscher_on_market.png" height="400" align="center" /&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;While v0.50 has still rough edges it is what I am basically using as my main and only Twitter client on my mobile. I've completely deleted the official Twitter app :-)&lt;/p&gt;&lt;p&gt;Zwitscher is open source and hosted on &lt;a href="https://github.com/pilhuhn/ZwitscherA"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-1003426239854594074?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/1003426239854594074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=1003426239854594074&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1003426239854594074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1003426239854594074'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/12/zwitscher-is-on-market.html' title='Zwitscher is on the market'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_OdJrfDwRKLM/TQN-KghD-wI/AAAAAAAAAQ0/V-2wqgJTSEo/s72-c/zwitscher_on_market.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-5706153131046240552</id><published>2010-12-09T17:36:00.001+01:00</published><updated>2010-12-09T17:42:39.118+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>New preview release of RHQ 4 available</title><content type='html'>&lt;p&gt; &lt;/p&gt;&lt;p&gt;We have just made a new developer preview release of RHQ available. This release features a lot of changes and improvements in the UI, that is rewritten in GWT.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh6.ggpht.com/_OdJrfDwRKLM/TQEFfUpDViI/AAAAAAAAAQw/fY6ntwglc8g/Rupp_RHQ_Dashboard.jpg?imgmax=800" border="0" alt="Rupp_RHQ_Dashboard.png" width="400" /&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Major new features&lt;/strong&gt;: &lt;span style="white-space: pre;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Improved LDAP support&lt;/li&gt;&lt;li&gt;Default dashboard improvements &lt;span style="white-space: pre;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Improved Resource Inventory support &lt;span style="white-space: pre;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Breadcrumbs no longer used &lt;span style="white-space: pre;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;I18N&lt;/li&gt;&lt;li&gt;New Help section: Docs from the &lt;a href="http://www.rhq-project.org/"&gt;www.rhq-project.org&lt;/a&gt; are now available directly through the app. &lt;/li&gt;&lt;li&gt;GWT-based user and role edit views finished&lt;/li&gt;&lt;li&gt;Metric and Alert template views converted from JSF to GWT&lt;/li&gt;&lt;li&gt;Much improved MySQL plugin (by Steve Milidge)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;More detailed release notes can be found here: &lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+4.0+DP2"&gt;http://rhq-project.org/display/RHQ/Release+Notes+4.0+DP2&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Please check out this release and &lt;strong&gt;give us&lt;/strong&gt; as much &lt;strong&gt;feedback&lt;/strong&gt; as you can. Also we are very interested in getting more translations&lt;/p&gt;&lt;p&gt;The release can be downloaded from the link within the release notes&lt;/p&gt;&lt;p&gt;Thanks to everyone who contributed.  Heiko (on behalf of the RHQ team)&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-5706153131046240552?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/5706153131046240552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=5706153131046240552&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5706153131046240552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5706153131046240552'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/12/new-preview-release-of-rhq-4-available.html' title='New preview release of RHQ 4 available'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_OdJrfDwRKLM/TQEFfUpDViI/AAAAAAAAAQw/fY6ntwglc8g/s72-c/Rupp_RHQ_Dashboard.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-9021144668708819172</id><published>2010-12-08T17:08:00.001+01:00</published><updated>2010-12-08T17:15:33.279+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Red Hat'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>I am a RHCSA now :-)</title><content type='html'>&lt;p&gt;Last week I spend the whole week in the Red Hat training center here in Stuttgart, participating in the Red Hat Certified System Administrator (RHCSA) fast track course and exam. The RHCSA is probably still very unknown and better known under its previous name "RHCT". RHCSA runs on RHEL 6.&lt;/p&gt;&lt;p&gt;The fast track training consists of some more basic aspects of system administration like installing and enabling services, setting up networking in the first half and some more advanced topics like ACLs, SELinux, LVM (with encryption and snapshots) in the second part. The course material works with brand new RHEL 6 stuff and also the exam is on RHEL 6. Top notch!&lt;/p&gt;&lt;p&gt;Friday was exam time. As I am not allowed to talk about this only so far: this is a real-world get things done kind of exam and not some multiple choice test.&lt;/p&gt;&lt;p&gt;And then I was waiting for exam results - and today I got it: I passed and I am now a RHCSA! :-)))&lt;/p&gt;&lt;p&gt;Cert number is &lt;a href="https://www.redhat.com/wapps/training/certification/verify.html?certNumber=100-003-383"&gt;100-003-383&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-9021144668708819172?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/9021144668708819172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=9021144668708819172&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/9021144668708819172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/9021144668708819172'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/12/i-am-rhcsa-now.html' title='I am a RHCSA now :-)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-3270365972690670662</id><published>2010-12-07T10:36:00.001+01:00</published><updated>2010-12-07T10:36:51.000+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='Postgres'/><title type='text'>PGDayEU 2010</title><content type='html'>&lt;p&gt;I had the big luck to be able to attend the first day of &lt;a href="http://2010.pgday.eu/"&gt;PGDay EU&lt;/a&gt; conference here in Stuttgart. Conference was held at the SI-Erlebniszentrum - a location well known to me as the Java Forum Stuttgart took place there for many years.&lt;/p&gt;&lt;p&gt;The conference had around 200 attendees and the main tracks were given in two large rooms. Almost all of the "celebrities" like Simon Riggs, Dave Fetter, Magnus Hagander, Heikki Linnegas, Bruce Momijan (with this son!) were there.&lt;/p&gt;&lt;p&gt;I am not too much a database expert, so talks were very technical to me :) But not non-understandable :-)&lt;/p&gt;&lt;p&gt;One definitively cool talk was given by Gianni Ciolly from 2ndquadrant: he was playing chess against postgres (http://twitpic.com/3dfojr and http://yfrog.com/2q3nq01j). Gianni showed the SQL involved and then played against the DB. The chess figures involved were just done by UTF-8 characters :-)&lt;/p&gt;&lt;p&gt;Bruce Momijan talked about rapid upgrades from 8.x (or even 9.0) to 9.x via the re-written db_upgrade. With it upgrades of a huge database can take as little as 44 seconds (in link mode). Definitively something to have a look at.&lt;/p&gt;&lt;p&gt;After lunch I talked about "Servermonitoring mit RHQ" (in German). I had ~ 40 attendees, which was nice. There definitively was interest and I got some good questions afterwards. I've put my slides online at &lt;a href="http://www.pilhuhn.de/hwr/misc/PGDay_EU_2010.pdf"&gt;http://www.pilhuhn.de/hwr/misc/PGDay_EU_2010.pdf&lt;/a&gt; . If you want to know more about RHQ, visit &lt;a href="http://www.rhq-project.org/"&gt;http://rhq-project.org&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;After attending Simon Riggs' talk about replication, I went to Devrim Gündüz, who was talking about failover using the Red Hat Cluster suite. This talk was very nicely presented with a lot of involvement of the speaker :-)&lt;/p&gt;&lt;p&gt;In the evening EnterpriseDB sponsored a party with food and drinks. There were lots of interesting talks at the tables going on, people all were very nice.&lt;/p&gt;&lt;p&gt;So this PGDay was a very positive experience for me. Unfortunately I could not make it to the 2nd day with more interesting talks.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-3270365972690670662?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/3270365972690670662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=3270365972690670662&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3270365972690670662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3270365972690670662'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/12/pgdayeu-2010.html' title='PGDayEU 2010'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6297909135866739397</id><published>2010-11-26T18:03:00.001+01:00</published><updated>2010-11-26T18:04:31.169+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comic'/><title type='text'>At the release meeting ...</title><content type='html'>&lt;p&gt; &lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh5.ggpht.com/_OdJrfDwRKLM/TO_okNSFqhI/AAAAAAAAAQs/f8E-sirLCss/ReleaseMeeting.jpg?imgmax=800" border="0" alt="ReleaseMeeting.png" width="400" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-6297909135866739397?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6297909135866739397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6297909135866739397&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6297909135866739397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6297909135866739397'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/11/at-release-meeting.html' title='At the release meeting ...'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_OdJrfDwRKLM/TO_okNSFqhI/AAAAAAAAAQs/f8E-sirLCss/s72-c/ReleaseMeeting.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6780765563744087291</id><published>2010-11-20T14:29:00.001+01:00</published><updated>2010-11-22T09:49:24.912+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Using formatted text (in code) on Android</title><content type='html'>&lt;p&gt;Putting text into a TextView on Android is easy - you just use &lt;a href="http://developer.android.com/reference/android/widget/TextView.html#setText(java.lang.CharSequence)"&gt;TextView.setText(text)&lt;/a&gt; unlike other overloaded methods with the same name, you can not just use a String with Html formatting to format the passed text.&lt;/p&gt;&lt;p&gt;In order to do so, you either need to obtain the text from a resource file, use &lt;a href="http://developer.android.com/reference/android/text/Html.html#fromHtml(java.lang.String)"&gt;Html.fromHtml(String html)&lt;/a&gt; helper method or create a &lt;a href="http://developer.android.com/reference/android/text/SpannableString.html"&gt;SpannableString&lt;/a&gt; that can then be passed to the method.&lt;/p&gt;&lt;p&gt;Html.fromHtml() is actually very convenient:&lt;/p&gt;&lt;pre&gt;String s = "This is a &amp;lt;b&amp;gt;fat&amp;lt;/b&amp;gt; string";&lt;/pre&gt;&lt;pre&gt;TextView tv = .. ;&lt;/pre&gt;&lt;pre&gt;tv.setText(Html.fromHtml(s));&lt;/pre&gt;&lt;p&gt;But while working on Zwitscher I saw that Html.fromHtml() is actually very expensive to use, as internally it is using the whole arsenal of XML parsing.&lt;/p&gt;&lt;p&gt;Plan B is using SpannableString...&lt;/p&gt;&lt;p&gt;Creating such a text is a bit complicated as you need to deal with individual Spans and so on, which I found inconvenient.&lt;/p&gt;&lt;p&gt;So I've introduced a &lt;a href="https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/helper/SpannableBuilder.java"&gt;SpannableBuilder&lt;/a&gt; helper class to make this process easier.&lt;/p&gt;&lt;p&gt;Usage is as follows:&lt;/p&gt;&lt;pre&gt;SpannableBuilder builder = new SpannableBuilder(context);&lt;/pre&gt;&lt;pre&gt;builder.append(status.getRetweetedStatus().getUser().getName(),Typeface.BOLD)      &lt;br /&gt;      .appendSpace()&lt;br /&gt;      .append(R.string.resent_by, Typeface.NORMAL)                &lt;br /&gt;      .appendSpace()                &lt;br /&gt;      .append(status.getUser().getName(), Typeface.BOLD);&lt;/pre&gt;&lt;pre&gt;textView.setText(builder.toString());&lt;/pre&gt;&lt;p&gt;Using this helper class does not trigger any XML parsing and is thus a lot faster than Html.fromHtml().&lt;/p&gt;&lt;p&gt;So far only methods that deal with TypeFaces are implemented, but extending the class for modifications of the background would be easy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-6780765563744087291?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6780765563744087291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6780765563744087291&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6780765563744087291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6780765563744087291'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/11/using-formatted-text-on-android.html' title='Using formatted text (in code) on Android'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6700197602202730328</id><published>2010-11-20T12:36:00.001+01:00</published><updated>2010-11-22T11:49:18.480+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Using the camera (from your programs) on Android is easy ...</title><content type='html'>&lt;p&gt;... if you know how to do it.&lt;/p&gt;&lt;p&gt;If you don't know it, it can be a PITA as I have e.g. described at the &lt;a href="http://jugs.org/protokolle2010.html#02112010"&gt;Android-Tech-Talk&lt;/a&gt; in Stuttgart.&lt;/p&gt;&lt;p&gt;For &lt;a href="http://bsd.de/zwitscher/"&gt;Zwitscher&lt;/a&gt; I was for quite some time trying to enable it to take pictures and upload them to pictures services like with other Twitter clients. So I started looking at the documentation and found a &lt;a href="http://developer.android.com/resources/faq/commontasks.html#captureimages"&gt;How To entry&lt;/a&gt; which basically points to the documentation for the &lt;a href="http://developer.android.com/reference/android/hardware/Camera.html"&gt;Camera&lt;/a&gt;.  So I've been trying around with the preview stuff and was googling like crazy and so on, but this turned out to be too complicated for me to follow in the short term.&lt;/p&gt;&lt;p&gt;Yesterday I was reading about Intents in the Documentation and what &lt;a href="http://developer.android.com/guide/appendix/g-app-intents.html"&gt;Google Intents&lt;/a&gt; are available. This brought me to the idea of investigating if the camera could also be called that way.&lt;/p&gt;&lt;p&gt;So I've googled for "&lt;a href="http://www.google.de/search?client=safari&amp;amp;rls=en&amp;amp;q=android+camer+app+intent&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;amp;redir_esc=&amp;amp;ei=0K7nTPGOIczJswbz9s2QCQ#hl=de&amp;amp;expIds=17259,26473,27022,27692&amp;amp;xhr=t&amp;amp;q=android+camera+app+intent&amp;amp;cp=14&amp;amp;pf=p&amp;amp;sclient=psy&amp;amp;client=safari&amp;amp;rls=en&amp;amp;source=hp&amp;amp;aq=f&amp;amp;aqi=&amp;amp;aql=&amp;amp;oq=&amp;amp;gs_rfai=&amp;amp;pbx=1&amp;amp;fp=1a70fc51dc685e4b"&gt;android camera app intent&lt;/a&gt;" and found &lt;a href="http://www.pocketpc.ch/android-entwicklung/94973-hilfe-kamera-aufrufen.html#post627526"&gt;this forum post&lt;/a&gt; which explains how to do it.&lt;/p&gt;&lt;p&gt;Basically start the camera via:&lt;/p&gt;&lt;div class="line alt1" style="outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;span class="content" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 3.3em !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0.5em !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 2px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: #f6f6f6 !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; display: block !important; border-left-style: solid !important; border-left-color: #026cbf !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important;"&gt;&lt;span class="block" style="background-image: url(http://www.pocketpc.ch/wrapping.png) !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; clear: none !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 1.5em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; display: block !important; text-indent: -1.5em !important; background-position: 0px 1.1em !important; background-repeat: no-repeat no-repeat !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;Intent intent = &lt;/code&gt;&lt;code class="keyword" style="font-style: normal !important; font-weight: bold !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #006699 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;new &lt;/code&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2" style="outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;span class="content" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 3.3em !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0.5em !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 2px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: #f6f6f6 !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; display: block !important; border-left-style: solid !important; border-left-color: #026cbf !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important;"&gt;&lt;span class="block" style="background-image: url(http://www.pocketpc.ch/wrapping.png) !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; clear: none !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 1.5em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; display: block !important; text-indent: -1.5em !important; background-position: 0px 1.1em !important; background-repeat: no-repeat no-repeat !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;startActivityForResult(intent, &lt;/code&gt;&lt;code class="value" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #009900 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;1&lt;/code&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;and then later when the picture has been taken fetch the picture in the onActivityResult() callback:&lt;/p&gt;&lt;div class="line alt1" style="outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;span class="content" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 3.3em !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0.5em !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 2px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: #f6f6f6 !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; display: block !important; border-left-style: solid !important; border-left-color: #026cbf !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important;"&gt;&lt;span class="block" style="background-image: url(http://www.pocketpc.ch/wrapping.png) !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; clear: none !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 1.5em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; display: block !important; text-indent: -1.5em !important; background-position: 0px 1.1em !important; background-repeat: no-repeat no-repeat !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;code class="color1" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #808080 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;@Override&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2" style="outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;span class="content" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 3.3em !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0.5em !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 2px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: #f6f6f6 !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; display: block !important; border-left-style: solid !important; border-left-color: #026cbf !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important;"&gt;&lt;span class="block" style="background-image: url(http://www.pocketpc.ch/wrapping.png) !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; clear: none !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 1.5em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; display: block !important; text-indent: -1.5em !important; background-position: 0px 1.1em !important; background-repeat: no-repeat no-repeat !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;code class="keyword" style="font-style: normal !important; font-weight: bold !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #006699 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;public &lt;/code&gt;&lt;code class="keyword" style="font-style: normal !important; font-weight: bold !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #006699 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;void &lt;/code&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;onActivityResult(&lt;/code&gt;&lt;code class="keyword" style="font-style: normal !important; font-weight: bold !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #006699 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;int &lt;/code&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;requestCode, &lt;/code&gt;&lt;code class="keyword" style="font-style: normal !important; font-weight: bold !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #006699 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;int &lt;/code&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;resultCode,Intent data) {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt1" style="outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;span class="content" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 3.3em !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0.5em !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 2px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: #f6f6f6 !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; display: block !important; border-left-style: solid !important; border-left-color: #026cbf !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important;"&gt;&lt;span class="block" style="background-image: url(http://www.pocketpc.ch/wrapping.png) !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; clear: none !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 1.5em !important; margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 32px !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; display: block !important; text-indent: -1.5em !important; background-position: 0px 1.1em !important; background-repeat: no-repeat no-repeat !important; border: 0px !important initial !important initial !important;"&gt;&lt;code class="keyword" style="font-style: normal !important; font-weight: bold !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #006699 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;super&lt;/code&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;.onActivityResult(requestCode, resultCode, data);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2" style="outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;span class="content" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 3.3em !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0.5em !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 2px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: #f6f6f6 !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; display: block !important; border-left-style: solid !important; border-left-color: #026cbf !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important;"&gt;&lt;span class="block" style="background-image: url(http://www.pocketpc.ch/wrapping.png) !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; clear: none !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 1.5em !important; margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 32px !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; display: block !important; text-indent: -1.5em !important; background-position: 0px 1.1em !important; background-repeat: no-repeat no-repeat !important; border: 0px !important initial !important initial !important;"&gt;&lt;code class="keyword" style="font-style: normal !important; font-weight: bold !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #006699 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;if&lt;/code&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;(requestCode==&lt;/code&gt;&lt;code class="value" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #009900 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;1&lt;/code&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&amp;amp;&amp;amp; resultCode==RESULT_OK) {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt1" style="outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;span class="content" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 3.3em !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0.5em !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 2px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: #f6f6f6 !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; display: block !important; border-left-style: solid !important; border-left-color: #026cbf !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important;"&gt;&lt;span class="block" style="background-image: url(http://www.pocketpc.ch/wrapping.png) !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; clear: none !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 1.5em !important; margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 64px !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; display: block !important; text-indent: -1.5em !important; background-position: 0px 1.1em !important; background-repeat: no-repeat no-repeat !important; border: 0px !important initial !important initial !important;"&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;Bitmap bitmap = (Bitmap) data.getExtras().get(&lt;/code&gt;&lt;code class="string" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: blue !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;"data"&lt;/code&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2" style="outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;span class="content" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 3.3em !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0.5em !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 2px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: #f6f6f6 !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; display: block !important; border-left-style: solid !important; border-left-color: #026cbf !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important;"&gt;&lt;span class="block" style="background-image: url(http://www.pocketpc.ch/wrapping.png) !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; clear: none !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 1.5em !important; margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 32px !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; display: block !important; text-indent: -1.5em !important; background-position: 0px 1.1em !important; background-repeat: no-repeat no-repeat !important; border: 0px !important initial !important initial !important;"&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt1" style="outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;span class="content" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 3.3em !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0.5em !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 2px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: #f6f6f6 !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; display: block !important; border-left-style: solid !important; border-left-color: #026cbf !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important;"&gt;&lt;span class="block" style="background-image: url(http://www.pocketpc.ch/wrapping.png) !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; clear: none !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 1.5em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; display: block !important; text-indent: -1.5em !important; background-position: 0px 1.1em !important; background-repeat: no-repeat no-repeat !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;This takes a small picture suitable for e.g. Twitter.&lt;/p&gt;&lt;p&gt;To take a larger picture you need to tell the intent where to store a larger picture and pick it up from that location.&lt;span style="color: #5c5c5c; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace; line-height: 13px;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="content" style="margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 3.3em !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0.5em !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 2px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: #f6f6f6 !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; clear: none !important; display: block !important; border-left-style: solid !important; border-left-color: #026cbf !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important;"&gt;&lt;span class="block" style="background-image: url(http://www.pocketpc.ch/wrapping.png) !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; clear: none !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 1.5em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 1em !important; display: block !important; text-indent: -1.5em !important; background-position: 0px 1.1em !important; background-repeat: no-repeat no-repeat !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;&lt;code class="plain" style="font-style: normal !important; font-weight: normal !important; font-family: Consolas, Monaco, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; line-height: 1.1em !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; text-align: left !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; font-size: 1em !important; clear: none !important; display: inline !important; color: #000000 !important; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important; border: 0px !important initial !important initial !important;"&gt;intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, path)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;So you see - if you know all this, it is fairly easy to start the camera, take a picture and then use it later. No dealing with PreviewHolder and all that stuff.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-6700197602202730328?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6700197602202730328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6700197602202730328&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6700197602202730328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6700197602202730328'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/11/using-camera-on-android-is-easy.html' title='Using the camera (from your programs) on Android is easy ...'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-5279561872195109022</id><published>2010-11-04T09:55:00.001+01:00</published><updated>2010-11-04T09:55:55.887+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='Postgres'/><title type='text'>Small tip when repeatedly doing upgrade testing</title><content type='html'>&lt;p&gt;Suppose you want to test upgrading your software from version x to y. This often includes updates of database schemas, tables and content.&lt;/p&gt;&lt;p&gt;The obvious way to do this is&lt;/p&gt;&lt;pre&gt;do {&lt;br /&gt;  install version x&lt;br /&gt;  quit x&lt;br /&gt;  install version y&lt;br /&gt;  verify upgrade&lt;br /&gt;} while (upgrade was bad)&lt;/pre&gt;&lt;p&gt;The install version x step here is usually time consuming and involves UI interactions.&lt;/p&gt;&lt;p&gt;A better approach here is to&lt;/p&gt;&lt;pre&gt;install version x&lt;br /&gt;create a db backup&lt;br /&gt;verified = false&lt;br /&gt;while (not verified )  {&lt;br /&gt;  install version y&lt;br /&gt;  if ( upgrade good )&lt;br /&gt;      verified = true&lt;br /&gt;  else&lt;br /&gt;      install db backup&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;With &lt;a href="http://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt; taking a backup  would look like this:&lt;/p&gt;&lt;pre&gt;pg_dump -f &lt;em&gt;outfile&lt;/em&gt; -b -C &lt;em&gt;dbname&lt;/em&gt;&lt;/pre&gt;&lt;p&gt;e.g.:&lt;/p&gt;&lt;pre&gt;pg_dump -f ~/jon231.dump -b -C jon231&lt;/pre&gt;&lt;p&gt;and then the re-install:&lt;/p&gt;&lt;pre&gt;pg_restore &lt;em&gt;outfile&lt;/em&gt;&lt;/pre&gt;&lt;p&gt;e.g.:&lt;/p&gt;&lt;pre&gt;pg_restore ~/jon231.dump&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-5279561872195109022?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/5279561872195109022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=5279561872195109022&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5279561872195109022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5279561872195109022'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/11/small-tip-when-repeatedly-doing-upgrade.html' title='Small tip when repeatedly doing upgrade testing'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-7715351550199973264</id><published>2010-11-03T21:43:00.001+01:00</published><updated>2010-11-08T09:10:36.961+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Mein erster Android-Vortrag - und wie geht nun es weiter?</title><content type='html'>&lt;p&gt;Gestern habe ich bei der &lt;a href="http://stuttgart.gtugs.org/"&gt;STUGTUG&lt;/a&gt; in Zusammenarbeit mit der &lt;a href="http://jugs.org/"&gt;JUGS&lt;/a&gt; beim Android TechTalk meinen ersten Vortrag zum Thema gehalten.&lt;/p&gt;&lt;p&gt;Ich wurde gefragt, ob ich so über meine ersten Erfahrungen erzählen könne, was ich dann auch gemacht habe - nachdem ich mich an Hand von konkreten Beispielen in eine Materie einarbeiten muss habe ich eben von den Erfahrungen mit meiner ersten App, &lt;a href="http://javablogs.com/Jump.action?id=605888"&gt;Zwitscher&lt;/a&gt;, berichtet (&lt;a href="http://www.pilhuhn.de/hwr/misc/Android-Talk_20101102.pdf"&gt;Folien gibt es hier&lt;/a&gt; und hier &lt;a href="http://vimeo.com/16547800"&gt;das Video&lt;/a&gt;). Peter Hoffmann hat &lt;a href="http://peter-hoffmann.com/2010/google-technology-user-group-android-talks-google-developer-day.html"&gt;einen Review&lt;/a&gt; geschrieben, wie &lt;a href="http://stuttgartgtug.blogspot.com/2010/11/android-tech-talks-2010.html"&gt;auch Benny&lt;/a&gt;. Alle Videos sind in &lt;a href="http://vimeo.com/album/1469592"&gt;diesem Album&lt;/a&gt; zusammengefasst.&lt;/p&gt;&lt;p&gt;Die Auswertung der Feedback-Bögen gibt ein eher gemischtes Bild. Von "Sehr gut" bis "Kann ich nichts mit anfangen, weil ..."  "... ich nicht weiss was eine Activity ist", "... ich das schon seit Jahren mache" war alles dabei. Der Notendurchschnitt lag bei 2,8.&lt;/p&gt;&lt;p&gt;Mein Fehler war hier offensichtlich, für Anfänger in der Android-Programmierung schon zu tief in der Materie gewesen zu sein, während für die "alten Hasen" nicht so viel Neues dabei war.&lt;/p&gt;&lt;p&gt;Deswegen habe ich mir jetzt mal vorgenommen, möglichst bald einen &lt;strong&gt;Workshop für Einsteiger&lt;/strong&gt; anzubieten, bei dem eine kleine Applikation von Null aus aufgebaut werden soll. Der Workshop wird dabei nicht nur "Frontalunterricht" sein, sondern die Teilnehmer sollen / müssen selbst Hand anlegen (Java SE Kenntnisse müssen vorhanden sein).&lt;/p&gt;&lt;p&gt;Hierzu nun ein paar Fragen:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Wird so was (= Einsteiger-Workshop) überhaupt gewünscht?&lt;/li&gt;&lt;li&gt;Was ist ein möglicher Zeitrahmen (am Abend, Samstag, Wochenende, Weihnachtsfeiertag, ...)&lt;/li&gt;&lt;li&gt;Was darf es kosten? Der Workshop ist non-Profit, aber Räume, WLAN, Getränke und Brötchen / Pizza kosten einfach Geld&lt;/li&gt;&lt;li&gt;Was für eine App soll es werden?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Ich habe auch eine Idee für einen umfangreicheren Workshop im Hinterkopf, möchte dazu erst mal noch nichts verraten ;-)&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-7715351550199973264?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/7715351550199973264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=7715351550199973264&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7715351550199973264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7715351550199973264'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/11/mein-erster-android-vortrag-und-wie.html' title='Mein erster Android-Vortrag - und wie geht nun es weiter?'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-305785038083671844</id><published>2010-11-02T14:01:00.001+01:00</published><updated>2010-11-02T14:09:03.031+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ tab sweep</title><content type='html'>&lt;p&gt;It has been a while since &lt;a href="http://javablogs.com/Jump.action?id=596311"&gt;the last tab sweep&lt;/a&gt;, so quite some material has accumulated:&lt;/p&gt;&lt;p&gt;First and notably: we now have &lt;a href="http://bit.ly/dwX82H"&gt;&lt;strong&gt;contributor guidelines&lt;/strong&gt;&lt;/a&gt;, which should make it easier for everyone to get contributions into &lt;a href="http://rhq-project.org/"&gt;RHQ&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Alexander Kiefer&lt;/strong&gt; has finsihed his master thesis work on the Nagios Plugin and the dynamic types detection. The later work needs to picked up and worked on further. A big part of the resource type (and metric scheduling and .... code depends on the static nature of the metadata in the plugin descriptors. The code is currently in the &lt;a href="http://git.fedorahosted.org/git/?p=rhq/rhq.git;a=shortlog;h=refs/heads/nagios"&gt;nagios branch in git&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Anyway: &lt;strong&gt;congrats Alex&lt;/strong&gt; and many thanks for your work and also &lt;strong&gt;thanks to your employer, &lt;a href="http://www.dillinger.de/dh/index.shtml.en"&gt;AG der Dillinger Hütten&lt;/a&gt;&lt;/strong&gt;,&lt;strong&gt;&lt;/strong&gt;for sponsoring this work.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Steve Millidge contributed&lt;/strong&gt; a large &lt;a href="http://javablogs.com/Jump.action?id=611796"&gt;overhaul of the MySQL plugin&lt;/a&gt; to RHQ - thanks Steve!&lt;/p&gt;&lt;p&gt;The team is currently working on transitioning the UI to &lt;strong&gt;GWT&lt;/strong&gt; for &lt;strong&gt;RHQ 4&lt;/strong&gt;. To see what is going on, you can have a look at &lt;a href="http://javablogs.com/Jump.action?id=607904"&gt;a short video overview&lt;/a&gt; or play with the &lt;a href="http://javablogs.com/Jump.action?id=604957"&gt;first developer preview&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;And then there was conference season for me and I gave talks at &lt;a href="http://www.jboss.org/events/JUDCon/JUDCon2010Berlin.html"&gt;JUDCon Berlin&lt;/a&gt; and &lt;a href="http://www.onedaytalk.org/"&gt;1daytalk Munich&lt;/a&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Overview over RHQ at 1 day talk (German) [&lt;a href="https://fedorahosted.org/pipermail/rhq-devel/2010-October/000361.html"&gt;slides&lt;/a&gt;, &lt;a href="http://onedaytalk.org/index.php/gallery"&gt;photo gallery&lt;/a&gt; ]&lt;/li&gt;&lt;li&gt;Overview over RHQ at JUDCon (this talk was not planned, slides as in 1 day talk above. A part of the talk is available as &lt;a href="http://vimeo.com/16424369"&gt;video on vimeo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Writing plugins for RHQ and the admin console. Slides are linked &lt;a href="http://www.jboss.org/events/JUDCon/JUDCon2010Berlin.html"&gt;at the JUDCon page&lt;/a&gt; as well as a &lt;a href="http://vimeo.com/16171314"&gt;video recording&lt;/a&gt; from the talk.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Mazz&lt;/strong&gt; has written an interesting article on how to do some RHQ agent &lt;a href="http://management-platform.blogspot.com/2010/10/using-byteman-to-analyze-rhq-agent.html"&gt;profiling via Byteman&lt;/a&gt;. He also wrote about &lt;a href="http://management-platform.blogspot.com/2010/08/remotely-installing-agent.html"&gt;remotely installing agents&lt;/a&gt; on yet unmanaged machines.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Joseph Marques&lt;/strong&gt; has written a short article on the &lt;a href="http://josephmarques.wordpress.com/2010/08/04/rhqs-powerful-new-search-facility/"&gt;new search functionality&lt;/a&gt; and a longer analysis on &lt;a href="http://josephmarques.wordpress.com/2010/07/30/gwt-compilation-performance/"&gt;GWT compile performance&lt;/a&gt; - this is quite interesting and for sure also helpful for other projects that want to use GWT.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;John Sanda&lt;/strong&gt; has written a whole series of articles on usage of the RHQ cli:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 17px;"&gt;&lt;a href="http://johnsanda.blogspot.com/2010/09/dealing-asynchronous-workflows-in-cli.html"&gt;Asynchronous workflows&lt;/a&gt;: This article describes a common pattern used in RHQ and then considers what impact that this can have on the CLI.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 17px;"&gt;&lt;a href="http://johnsanda.blogspot.com/2010/09/updating-metric-collection-schedules.html"&gt;Updating metric collection schedules&lt;/a&gt; from the CLI&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 17px;"&gt;&lt;a href="http://johnsanda.blogspot.com/2010/08/building-rhq-client.html"&gt;Building an RHQ client&lt;/a&gt; (like a CLI)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 17px;"&gt;&lt;a href="http://johnsanda.blogspot.com/2010/08/utility-functions-for-rhq-cli.html"&gt;Utility functions&lt;/a&gt; for the CLI&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 17px;"&gt;&lt;a href="http://johnsanda.blogspot.com/2010/08/auto-import-resources-into-inventory.html"&gt;Auto import of resources&lt;/a&gt; via CLI script&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Jay Shaughnessy&lt;/strong&gt; has also written an article about the RHQ CLI. He is talking about &lt;a href="http://jayshaughnessy.blogspot.com/2010/08/scripted-provisioning-with-rhq-30-and.html"&gt;using the provisioning feature&lt;/a&gt; from the CLI.&lt;/p&gt;&lt;p&gt;﻿&lt;strong&gt;Lukáš Krejčí&lt;/strong&gt; has also written a series of articles:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://metlos.wordpress.com/2010/10/06/upgrading-resources-in-rhq/"&gt;Upgrading resources in RHQ&lt;/a&gt; talks about programmatically changing resource information on plugin upgrades&lt;/li&gt;&lt;li&gt;&lt;a href="http://metlos.wordpress.com/2010/09/15/how-to-export-data-from-a-db-using-jpa-model/"&gt;Exporting database data using a JPA model&lt;/a&gt; and its 2nd part:&lt;/li&gt;&lt;li&gt;&lt;a href="http://metlos.wordpress.com/2010/09/20/database-setup-for-testng-tests/"&gt;Database setup for TestGN tests&lt;/a&gt; with the export from the previous post.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;As always, please give us (and / or the article writers feedback).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-305785038083671844?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/305785038083671844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=305785038083671844&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/305785038083671844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/305785038083671844'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/11/rhq-tab-sweep.html' title='RHQ tab sweep'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-5650803485239334231</id><published>2010-10-18T12:03:00.001+02:00</published><updated>2010-10-18T12:09:24.504+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Overhauled MySQL plugin for RHQ</title><content type='html'>&lt;p&gt;I have just pushed a &lt;strong&gt;contribution&lt;/strong&gt; by &lt;strong&gt;Steve Millidge&lt;/strong&gt; to &lt;a href="http://rhq-project.org/"&gt;RHQ&lt;/a&gt; master. He overhauled the existing MySQL plugin big time, so that it now auto discovers the MySQL server with its databases and users.&lt;/p&gt;&lt;p&gt;Also the number of gathered metrics is vastly improved. The new code is currently only &lt;a href="http://git.fedorahosted.org/git/?p=rhq/rhq.git;a=commit;h=28ae734397d49586094f973c0db81f06fc394791"&gt;in master (in git)&lt;/a&gt;, but will also show up in the next &lt;a href="http://javablogs.com/Jump.action?id=604957"&gt;RHQ build&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Here is a small screen shot (with the current state of the &lt;a href="http://javablogs.com/Jump.action?id=607904"&gt;RHQ 4 UI&lt;/a&gt;) that shows what has been discovered on my local MySQL 5.1.51 instance.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh6.ggpht.com/_OdJrfDwRKLM/TLwbHZMAqdI/AAAAAAAAAQk/W9F4R4ETu4E/Bildschirmfoto%202010-10-18%20um%2011.58.06.jpg?imgmax=800" border="0" alt="Bildschirmfoto 2010-10-18 um 11.58.06.png" width="400" /&gt;&lt;/div&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;As always, try it out and please give us and Steve feedback ( I am sure he also accepts pints as feedback :-)&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-5650803485239334231?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/5650803485239334231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=5650803485239334231&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5650803485239334231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5650803485239334231'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/10/overhauled-mysql-plugin-for-rhq.html' title='Overhauled MySQL plugin for RHQ'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_OdJrfDwRKLM/TLwbHZMAqdI/AAAAAAAAAQk/W9F4R4ETu4E/s72-c/Bildschirmfoto%202010-10-18%20um%2011.58.06.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-8139822920885409868</id><published>2010-10-16T21:30:00.001+02:00</published><updated>2010-10-16T21:50:04.317+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android and the title bar progress indicator</title><content type='html'>&lt;p&gt; &lt;/p&gt;&lt;p&gt;I just spent quite some time trying to figure out how to get a tiny little spinning progress thingy in the title bar of my application. And to be honest, while there is a lot of documentation out there, it is far from trivial to finally implement it.&lt;/p&gt;&lt;p&gt;The best "how to" is just  few weeks old and the &lt;a href="http://kmansoft.wordpress.com/2010/09/23/adding-views-to-standard-window-title-bar/"&gt;author also wanted to have such a thing&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Basically steps are: define a custom layout for the title bar, ask the system to allow replacing the title bar, set the content layout, only then set the custom title bar layout and then obtain a reference to the &lt;code&gt;ProgressBar&lt;/code&gt; object.&lt;/p&gt;&lt;p&gt;As the post above is quite extensive, I just want to emphasis on the latter points:&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;pre&gt;&lt;span style="color: #d4004b;"&gt;protected &lt;/span&gt;&lt;span style="color: #d4004b;"&gt;void&lt;/span&gt; onCreate(Bundle savedInstanceState) {&lt;/pre&gt;&lt;pre&gt;&lt;span style="color: #d4004b;"&gt;super&lt;/span&gt;.onCreate(savedInstanceState);&lt;/pre&gt;&lt;pre&gt;   requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); &lt;span style="color: #00c100;"&gt;// 1&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;   setContentView(R.layout.single_tweet);        &lt;span style="color: #00c100;"&gt;// 2&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;   getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,&lt;/pre&gt;&lt;pre&gt;                              R.layout.window_title); &lt;span style="color: #00c100;"&gt;// 3&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;   pg = (ProgressBar) findViewById(R.id.title_progress_bar); &lt;span style="color: #00c100;"&gt;// 4&lt;/span&gt;&lt;/pre&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Comments for the lines above:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Ask the system to allow for a custom window title&lt;/li&gt;&lt;li&gt;Set the content view of the whole window&lt;/li&gt;&lt;li&gt;set the layout for the custom title&lt;/li&gt;&lt;li&gt;Obtain the reference to the progress bar&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;If this order is not honored, &lt;code&gt;pg&lt;/code&gt;, the reference to the &lt;code&gt;ProgressBar&lt;/code&gt; will be &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;The layout for the title is shown in above post, so I'll not repeat it here.&lt;/p&gt;&lt;p&gt;The second important aspect is the usage of the ProgressBar. The main thread of execution in Android is the UI thread. And when a callback is running, the UI is not updating while such a callback is running. So, the following is not starting the progress indicator:&lt;/p&gt;&lt;pre&gt;   &lt;span style="color: #d4004b;"&gt;public &lt;/span&gt;&lt;span style="color: #d4004b;"&gt;void&lt;/span&gt; myButtonPressedCallback(View v) {&lt;/pre&gt;&lt;pre&gt;      ﻿pg.setVisibility(ProgressBar.VISIBLE);&lt;/pre&gt;&lt;pre&gt;      doSomeThingLongRunning();&lt;/pre&gt;&lt;pre&gt;﻿      pg.setVisibility(ProgressBar.INVISIBLE);&lt;/pre&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;p&gt;The state of the progress indicator will only be set after myButton..() has returned. In oder to correclty handle this, you need to e.g. use an AsyncTask:&lt;span style="line-height: 0px;"&gt;﻿&lt;/span&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;pre&gt;﻿    &lt;span style="color: #d4004b;"&gt;private &lt;/span&gt;&lt;span style="color: #d4004b;"&gt;class&lt;/span&gt; DownloadImageTask &lt;span style="color: #d4004b;"&gt;extends&lt;/span&gt; AsyncTask&amp;lt;User, Void,Bitmap&amp;gt; {&lt;/pre&gt;&lt;pre&gt;        &lt;span style="color: #d4004b;"&gt;protected &lt;/span&gt;&lt;span style="color: #d4004b;"&gt;void&lt;/span&gt; onPreExecute() {&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;            &lt;span style="color: #d4004b;"&gt;super&lt;/span&gt;.onPreExecute();&lt;/pre&gt;&lt;pre&gt;            pg.setVisibility(ProgressBar.VISIBLE);&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;pre&gt;        &lt;span style="color: #d4004b;"&gt;protected&lt;/span&gt; Bitmap doInBackground(User... users) {&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-family: Helvetica; white-space: normal;"&gt;&lt;pre style="margin: 8px;"&gt;﻿          doSomeThingLongRunning();&lt;/pre&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;pre&gt;        &lt;span style="color: #d4004b;"&gt;protected &lt;/span&gt;&lt;span style="color: #d4004b;"&gt;void&lt;/span&gt; onPostExecute(Bitmap result) {&lt;/pre&gt;&lt;pre&gt;           pg.setVisibility(ProgressBar.INVISIBLE);&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;p&gt; &lt;/p&gt;&lt;pre&gt;   }&lt;/pre&gt;&lt;p&gt;In this case, the ProgressBar is made visible in onPreExecute() (which runs in the UI thread. Then the background thread is started to do the long running computation and after this has finished, onPostExecute() runs again in the UI thread, where you can 'switch off' the ProgressBar again.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-8139822920885409868?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/8139822920885409868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=8139822920885409868&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8139822920885409868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8139822920885409868'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/10/android-and-title-bar-progress.html' title='Android and the title bar progress indicator'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6096024474271712621</id><published>2010-10-15T20:37:00.001+02:00</published><updated>2010-10-15T21:18:12.689+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android app lifecycle or "why do I sometimes get an empty screen?"</title><content type='html'>&lt;p&gt; &lt;/p&gt;&lt;p&gt;Many examples on the net for Android programs use something like this:&lt;/p&gt;&lt;pre&gt;&lt;span style="color: #d4004b;"&gt;  public &lt;/span&gt;&lt;span style="color: #d4004b;"&gt;class&lt;/span&gt; MyActivity &lt;span style="color: #d4004b;"&gt;extends&lt;/span&gt; Activity {&lt;/pre&gt;&lt;pre&gt;    &lt;span style="color: #d4004b;"&gt;protected &lt;/span&gt;&lt;span style="color: #d4004b;"&gt;void&lt;/span&gt; onCreate(Bundle savedState) {&lt;/pre&gt;&lt;pre&gt;&lt;span style="color: #d4004b;"&gt;         super&lt;/span&gt;.onCreate(savedState);&lt;br /&gt;         doSomeSetup(); // e.g. login to a remote site&lt;br /&gt;         dispatchToOtherActivity();&lt;br /&gt;    }&lt;br /&gt;  }&lt;/pre&gt;&lt;p&gt;This is usually fine, but in some situations you end up with an application that just shows an empty screen. You may wonder what happens here.&lt;/p&gt;&lt;p&gt;Actually if you have a look the &lt;a href="http://developer.android.com/guide/topics/fundamentals.html#actlife"&gt;Android Application Lifecycle&lt;/a&gt; , you will see that &lt;code&gt;onCreate()&lt;/code&gt; will only be called when the application is 'cold started'.&lt;/p&gt;&lt;p&gt;If the application is just resumed, &lt;code&gt;onCreate()&lt;/code&gt; is not called again and and thus the dispatch to the next activity never happens. The application just sits on the empty screen.&lt;/p&gt;&lt;p&gt;There is an easy solution: &lt;code&gt;onResume()&lt;/code&gt; is always called when the application comes to foreground again no matter if the app was cold started or just came to foreground again. So the above code could also read:&lt;/p&gt;&lt;pre style="margin: 8px;"&gt;&lt;span style="color: #d4004b;"&gt;﻿public &lt;/span&gt;&lt;span style="color: #d4004b;"&gt;class&lt;/span&gt; MyActivity &lt;span style="color: #d4004b;"&gt;extends&lt;/span&gt; Activity {&lt;/pre&gt;&lt;pre style="margin: 8px;"&gt;   &lt;span style="color: #d4004b;"&gt;protected &lt;/span&gt;&lt;span style="color: #d4004b;"&gt;void&lt;/span&gt; onCreate(Bundle savedState) {&lt;/pre&gt;&lt;pre style="margin: 8px;"&gt;&lt;span style="color: #d4004b;"&gt;         super&lt;/span&gt;.onCreate(savedState);&lt;br /&gt;         doSomeSetup(); // e.g. login to a remote site&lt;br /&gt;   }&lt;br /&gt;   ﻿&lt;span style="color: #d4004b;"&gt;protected &lt;/span&gt;&lt;span style="color: #d4004b;"&gt;void&lt;/span&gt; onResume() {&lt;/pre&gt;&lt;pre style="margin: 8px;"&gt;&lt;span style="color: #d4004b;"&gt;         super&lt;/span&gt;.onResume();&lt;br /&gt;         if (!loggedIn()) &lt;br /&gt;                doSomeSetup()&lt;br /&gt;         ﻿&lt;span style="font-family: monospace; white-space: pre;"&gt;dispatchToOtherActivity();&lt;/span&gt;&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Now on cold start, the login is done in &lt;code&gt;onCreate()&lt;/code&gt; and then control goes to &lt;code&gt;onResume()&lt;/code&gt; that dispatches to the next activity.  On warm start, &lt;code&gt;onResume()&lt;/code&gt; is directly called, that can check if the login is still valid.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-6096024474271712621?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6096024474271712621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6096024474271712621&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6096024474271712621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6096024474271712621'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/10/android-app-lifecycle-or-do-i-sometimes.html' title='Android app lifecycle or &amp;quot;why do I sometimes get an empty screen?&amp;quot;'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-8179760671946958816</id><published>2010-10-11T11:56:00.001+02:00</published><updated>2010-10-11T13:50:29.549+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>JUDCon Berlin review (with pictures)</title><content type='html'>&lt;p&gt;&lt;img src="http://www.jboss.org/events/JUDCon/JUDCon2010Berlin/mainColumnParagraphs/0/image/judconberline_logo.png" border="0" alt="judconberline_logo.png" width="400"/&gt;&lt;/p&gt;&lt;p&gt;I've been at &lt;a href="http://www.jboss.org/events/JUDCon/JUDCon2010Berlin.html"&gt;JUDCon Berlin&lt;/a&gt; for the last two days and this has been a very good experience. The conference venue (&lt;a href="http://www.jboss.org/events/JUDCon/JUDCon2010Berlin/venue.html"&gt;Radialsystem V&lt;/a&gt;) was just perfect, my hotel was next door to the venue, and we had a lot of good presentations.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh3.ggpht.com/_OdJrfDwRKLM/TLLcOJGYpYI/AAAAAAAAAP0/ViSiTdC_Ttc/IMAG0126.jpg?imgmax=800" border="0" alt="Radialsystem V" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;(Radialsystem V from outside)&lt;/div&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Ok, this was a little sparse.&lt;/p&gt;&lt;p&gt;After last JUDCon in Boston was well received, the JBoss team decided to do another JUDCon outside of the US to meet more of the community. The choice was made to go to Berlin (probably because JBossWorld Berlin was huge too :-)&lt;/p&gt;&lt;p&gt;I've submitted a talk on plugin development for &lt;a href="http://rhq-project.org/"&gt;RHQ&lt;/a&gt; and the JBossAS admin-console, which was accepted, so I had the luck to go to JUDCon.&lt;/p&gt;&lt;p&gt;I arrived already on Wednesday evening, went to the hotel and later to a cocktail bar (&lt;a href="http://www.qype.com/place/22673-Sanatorium-23-Berlin"&gt;Sanatorium 23&lt;/a&gt;) together with Tobias Hartwig, Mark Little, Bruno Georges, Marek Goldmann, Bela Ban and some others.&lt;/p&gt;&lt;p&gt;On Thursday JUDCon started with a "keynote" by Mark Little and then continued in two parallel tracks. I first went to the BlackTie talk by Tom Jenkinson - and after the talk it became apparent that the next presenter, Bill Burke, was not able to make it to the conference in time (he still was in Krakow at the JDD). So I took over and presented an overview over RHQ. The room was still full, nearly no one left even as Galder was advertising his Infinispan talk :-) As I did not prepare slides for the talk, I took the ones I used the week before at &lt;a href="http://javablogs.com/Jump.action?id=607547"&gt;OneDayTalk&lt;/a&gt; (they are linked there). The biggest time of the talk I did a live demo of RHQ 3 including installing RHQ from scratch, taking my computer into inventory and showing the UI. As time was running out (45 mins aren't that much :-), I could not show provisioning. After the talk I got a lot of questions - directly at the end of the session and also throughout the day.&lt;/p&gt;&lt;p&gt;Next, there was lunch in the big room with a speech given by a representative from &lt;a href="http://www.ingres.com/"&gt;Ingres&lt;/a&gt;, the sponsor of JUDCon. After lunch, sessions continued and I attended the two talks by Jesper Pedersen (IronJacamar and Tattletale - the latter is definitively something I need to look into) and then one by Steve Ross-Talbot about Savara before I gave my talk about writing plugins for RHQ.&lt;/p&gt;&lt;p&gt;This talk went quite well until the point where I tried to load my generated plugin into the IDE and the IDE just hang. And then when trying to compile, mvn gave me an error about some git problem. This something I need to look into. Nevertheless, I guess my audience got the idea on what is needed to do.&lt;/p&gt;&lt;p&gt;After dinner, where an iPad was given away by Ingres (Red Hat employees were not eligible :-( ) Hackfest started with some lightning talks were Jesper was quickly presenting about JBoss AS 7 (&lt;a href="http://github.com/jbossas/jboss-as"&gt;now on GitHub&lt;/a&gt;). Hackfest went until 1am when were thrown out of the venue.&lt;/p&gt;&lt;p&gt;Friday started with another series of talks. targeted around jBPM and Rules and other relevant themes like Errai and CDi or performance. I sneaked in many talks for a bit.&lt;/p&gt;&lt;p&gt;JUDCon has finished at 5:30pm with most of the participants staying 'til then end. I went to the airport and back to Stuttgart.&lt;/p&gt;&lt;p&gt;JUDCon was a great experience with lots of good talks and conversations. Participants were happy to get information from the source, from the people who know the stuff best as they have written it in the first place.&lt;/p&gt;&lt;p&gt;And for me it was a great pleasure too to meet my colleagues, who I normally only read in emails, blog posts or on Irc.&lt;/p&gt;&lt;p&gt;Slides to all talks are supposed to show up on the &lt;a href="http://www.jboss.org/events/JUDCon/JUDCon2010Berlin.html"&gt;JUDCon page&lt;/a&gt; very soon.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh4.ggpht.com/_OdJrfDwRKLM/TLLfSAGlItI/AAAAAAAAAP8/VZtJgFj5Woc/IMAG0127.jpg?imgmax=800" border="0" alt="IMAG0127.jpg" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;(Tom Jenkinson)&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh3.ggpht.com/_OdJrfDwRKLM/TLLfTaZXV7I/AAAAAAAAAQA/tFt96_fPjLE/IMAG0131.jpg?imgmax=800" border="0" alt="IMAG0131.jpg" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;(Jesper Pedersen on JBossAS 7)&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh4.ggpht.com/_OdJrfDwRKLM/TLLfUWbQKgI/AAAAAAAAAQE/8tU2heQIK3g/IMAG0132.jpg?imgmax=800" border="0" alt="IMAG0132.jpg" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;(Heiko Braun on Errai)&lt;/div&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-8179760671946958816?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/8179760671946958816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=8179760671946958816&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8179760671946958816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8179760671946958816'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/10/judcon-berlin-review-with-pictures.html' title='JUDCon Berlin review (with pictures)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_OdJrfDwRKLM/TLLcOJGYpYI/AAAAAAAAAP0/ViSiTdC_Ttc/s72-c/IMAG0126.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-9213084116664820670</id><published>2010-10-05T11:30:00.001+02:00</published><updated>2010-10-13T22:49:50.198+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Re-write Excel files with POI 3.6</title><content type='html'>&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://poi.apache.org/"&gt;Apache POI&lt;/a&gt; is a well known (java) project to handle reading and writing MS-Office documents. Another project in that area is &lt;a href="http://jexcelapi.sourceforge.net/"&gt;jexcel&lt;/a&gt; (Lars Vogel has written a &lt;a href="http://www.vogella.de/articles/JavaExcel/article.html"&gt;tutorial on its usage&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;I was using POI in the past to just write new documents. Now I needed to read a worksheet and update it. POI has a nice "&lt;a href="http://poi.apache.org/spreadsheet/quick-guide.html#ReadWriteWorkbook"&gt;busy developers guide&lt;/a&gt;" on this, which did not directly work for me, so I've updated it to work for me:&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;&lt;span style="color: #921167;"&gt;import&lt;/span&gt; org.apache.poi.ss.usermodel.Row;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;&lt;span style="color: #921167;"&gt;import&lt;/span&gt; org.apache.poi.ss.usermodel.Sheet;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;&lt;span style="color: #921167;"&gt;import&lt;/span&gt; org.apache.poi.ss.usermodel.Workbook;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;&lt;span style="color: #921167;"&gt;import&lt;/span&gt; org.apache.poi.hssf.usermodel.HSSFWorkbook;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;&lt;span style="color: #921167;"&gt;import&lt;/span&gt; org.apache.poi.ss.usermodel.Cell;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;...&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt; &lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;﻿&lt;span style="color: #921167;"&gt;public &lt;/span&gt;&lt;span style="color: #921167;"&gt;void&lt;/span&gt; run() {&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt; &lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px;"&gt;Workbook wb;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #4f9073;"&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt; // Check if Workbook is present - otherwise create it&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;&lt;span style="color: #921167;"&gt; try&lt;/span&gt; {&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;InputStream inp = &lt;span style="color: #921167;"&gt;new&lt;/span&gt; FileInputStream(&lt;span style="color: #211cc7;"&gt;WB_NAME&lt;/span&gt;);&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;wb = &lt;span style="color: #921167;"&gt;new&lt;/span&gt; HSSFWorkbook(inp);&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;} &lt;span style="color: #921167;"&gt;catch&lt;/span&gt; (Exception e) {&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;wb = &lt;span style="color: #921167;"&gt;new&lt;/span&gt; HSSFWorkbook();&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;}&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #4f9073;"&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt; // Now write to it&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;&lt;span style="color: #921167;"&gt; try&lt;/span&gt; {&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #4f9073;"&gt;// Check if we have our sheet&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;&lt;span style="color: #921167;"&gt; if&lt;/span&gt; (wb.getNumberOfSheets()==0) {&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;wb.createSheet(&lt;span style="color: #4726f9;"&gt;"Overview"&lt;/span&gt;);&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;}&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;Sheet sheet = wb.getSheetAt(0);&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px;"&gt; &lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #4f9073;"&gt;// Write row=2, cell=3 ==&amp;gt; D3&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;Row row = sheet.getRow(2);&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;&lt;span style="color: #921167;"&gt; if&lt;/span&gt; (row==&lt;span style="color: #921167;"&gt;null&lt;/span&gt;) &lt;span style="color: #4f9073;"&gt;// empty sheet&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;row = sheet.createRow(2);&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;Cell cell = row.getCell(3);&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;&lt;span style="color: #921167;"&gt; if&lt;/span&gt; (cell == &lt;span style="color: #921167;"&gt;null&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;cell = row.createCell(3);&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;cell.setCellType(Cell.&lt;span style="color: #211cc7;"&gt;CELL_TYPE_STRING&lt;/span&gt;);&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;cell.setCellValue(&lt;span style="color: #4726f9;"&gt;"a test"&lt;/span&gt;);&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px;"&gt; &lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #4f9073;"&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt; // Write the output to a file&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;FileOutputStream fileOut = &lt;span style="color: #921167;"&gt;new&lt;/span&gt; FileOutputStream(&lt;span style="color: #211cc7;"&gt;WB_NAME&lt;/span&gt;);&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;wb.write(fileOut);&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;fileOut.close();&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;}&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;&lt;span style="color: #921167;"&gt; catch&lt;/span&gt; (Exception e) {&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;e.printStackTrace();&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;}&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;}&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Of course your mileage may wary :-)&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-9213084116664820670?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/9213084116664820670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=9213084116664820670&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/9213084116664820670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/9213084116664820670'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/10/re-write-excel-files-with-poi-36.html' title='Re-write Excel files with POI 3.6'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-3400946483966361177</id><published>2010-10-04T14:46:00.001+02:00</published><updated>2010-10-04T14:46:42.686+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ 4 UI preview video</title><content type='html'>&lt;p&gt;I've put a video on Youtube, that shows a quick preview of the RHQ 4 UI work. As you know the UI is being rewritten in GWT and we have posted &lt;a href="http://javablogs.com/Jump.action?id=604957"&gt;a developer preview&lt;/a&gt; some time ago.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;If you did not install this preview, here is a chance to get a glance at what we're working on.&lt;br /&gt;&lt;/p&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/qIhd5q2iw4M?fs=1&amp;amp;hl=de_DE"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/qIhd5q2iw4M?fs=1&amp;amp;hl=de_DE" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p/&gt;&lt;br /&gt;As always: please give us feedback!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-3400946483966361177?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/3400946483966361177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=3400946483966361177&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3400946483966361177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3400946483966361177'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/10/rhq-4-ui-preview-video.html' title='RHQ 4 UI preview video'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-3838839989670446432</id><published>2010-10-02T15:34:00.001+02:00</published><updated>2010-10-04T12:06:01.254+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Small review of OneDayTalk (with pictures)</title><content type='html'>&lt;p&gt;Yesterday I was in Munich at the &lt;a href="http://onedaytalk.org/"&gt;JBoss One Day Talk&lt;/a&gt; conference, talking about RHQ. The conference was organized by the &lt;a href="http://www.jbug-munich.org/"&gt;Munich JBoss User Group&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Conference was very nice - like a big family event. Met some (JBoss) colleagues like Emmanuel Bernard, Manik and Navin Surtani, Thomas Diesler and Heiko Braun, as well as others like Andreas and the organizing Serge Pagop (who also works for Red Hat now). Also met Java Rockstar Adam Bien.&lt;/p&gt;&lt;p&gt;My talk about RHQ went mostly well - had around 40-50 listeners and got some good questions after the talk. The downside was that I spending a little too much time on the slides and general aspects so that I was not able to fully show the new RHQ 4 UI or even the provisioning subsystem.&lt;/p&gt;&lt;p&gt;If you want to new about the new UI, you can download the &lt;a href="http://javablogs.com/Jump.action?id=604957"&gt;developer preview&lt;/a&gt; we released some time ago or checkout this &lt;a href="http://www.youtube.com/watch?v=qIhd5q2iw4M"&gt;video on YouTube&lt;/a&gt;. And come to &lt;a href="http://www.jboss.org/events/JUDCon/JUDCon2010Berlin.html"&gt;JUDCon in Berlin&lt;/a&gt; next week to see it in action as well, as learn about plugin development.&lt;/p&gt;&lt;p&gt;My slides from the talk are also &lt;a href="http://www.pilhuhn.de/hwr/misc/Onedaytalk_2010.pdf"&gt;available as PDF&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Here are some impressions from the OneDayTalk:&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh5.ggpht.com/_OdJrfDwRKLM/TKmB5REGBjI/AAAAAAAAAPg/hqZZbU1H-C0/1285917563401.jpg?imgmax=800" border="0" alt="Adam Bien on stage" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;(Adam Bien, hacking live on stage)&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh4.ggpht.com/_OdJrfDwRKLM/TKmCIvyYtKI/AAAAAAAAAPk/49SPaxDI3JY/1285930860468.jpg?imgmax=800" border="0" alt="Manik Surtani" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;(Manik Surtani, talking about Infinispan)&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh6.ggpht.com/_OdJrfDwRKLM/TKmCRdsXiwI/AAAAAAAAAPo/-8iJ_oyeN38/1285938503373.jpg?imgmax=800" border="0" alt="Volker Bergmann" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;(Volker Bergman on performance testing)&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh4.ggpht.com/_OdJrfDwRKLM/TKmCZoIAf0I/AAAAAAAAAPs/3bH_dg7uI_4/1285946457928.jpg?imgmax=800" border="0" alt="Navin Surtani and Emanuel" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;(Navin Surtani and Emanuel Bernard)&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh4.ggpht.com/_OdJrfDwRKLM/TKmCgxKbV_I/AAAAAAAAAPw/MAo24UGoHqQ/1285951278162.jpg?imgmax=800" border="0" alt="Löwenbräukeller" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;(After-talk-Party at Löwenbräukeller)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-3838839989670446432?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/3838839989670446432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=3838839989670446432&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3838839989670446432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3838839989670446432'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/10/small-review-of-onedaytalk-with.html' title='Small review of OneDayTalk (with pictures)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_OdJrfDwRKLM/TKmB5REGBjI/AAAAAAAAAPg/hqZZbU1H-C0/s72-c/1285917563401.jpg?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6177062309538532917</id><published>2010-09-26T21:55:00.001+02:00</published><updated>2010-09-26T21:55:25.587+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Zwitscher, a twitter client for Android</title><content type='html'>&lt;p&gt;Today I finally came around implementing list support for what is my Hello World of learning Android, a Twitter client called &lt;em&gt;Zwitscher&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;Main screen looks like this:&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://bsd.de/zwitscher/main-screen.png" border="0" alt="main-screen.png" width="400" /&gt;&lt;/div&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;You can see support for lists as first class citizens.&lt;/p&gt;&lt;p&gt;Zwitscher is still in a very early stage and of course contains bugs and unimplemented features.&lt;/p&gt;&lt;p&gt;Zwitscher is released as open source - to learn more about it, visit its home page at ﻿&lt;a href="http://bsd.de/zwitscher/"&gt;http://bsd.de/zwitscher/&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-6177062309538532917?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6177062309538532917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6177062309538532917&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6177062309538532917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6177062309538532917'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/09/zwitscher-twitter-client-for-android.html' title='Zwitscher, a twitter client for Android'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-127750699491380390</id><published>2010-09-22T16:01:00.001+02:00</published><updated>2010-09-22T16:01:35.374+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>First developer preview of RHQ4 available</title><content type='html'>&lt;p&gt;We have just put a first developer preview of the new RHQ 4 UI online.&lt;/p&gt;&lt;p&gt;This preview is &lt;strong&gt;NOT&lt;/strong&gt; intended &lt;strong&gt;FOR PRODUCTION&lt;/strong&gt; or serious testing, but should rather be seen as an insight on what we are working on.&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh4.ggpht.com/_OdJrfDwRKLM/TJoDAHpBnSI/AAAAAAAAAPc/kQFsVZfGCfg/Rupp-RHQ-Dashboard.jpg?imgmax=800" border="0" alt="RHQ4 Dashboard" width="400" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;To learn more about the preview, visit the &lt;a href="http://rhq-project.org/display/RHQ/Release+notes+RHQ+4+DP1"&gt;release notes page&lt;/a&gt; from where you can also download it.&lt;/div&gt;&lt;div style="text-align: left;"&gt;As always feedback is very welcome (this includes patches and other code submissions) -- check the &lt;a href="http://rhq-project.org/display/RHQ/Contributions"&gt;contributions page&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;If you want to use RHQ for more more serious work, please use &lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+3.0.0"&gt;RHQ 3&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-127750699491380390?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/127750699491380390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=127750699491380390&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/127750699491380390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/127750699491380390'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/09/first-developer-preview-of-rhq4.html' title='First developer preview of RHQ4 available'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_OdJrfDwRKLM/TJoDAHpBnSI/AAAAAAAAAPc/kQFsVZfGCfg/s72-c/Rupp-RHQ-Dashboard.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-2651881082758378119</id><published>2010-07-30T10:47:00.001+02:00</published><updated>2010-07-30T14:55:22.435+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ (Jopr) tab sweep (updated)</title><content type='html'>So since the last tab sweep I have accumulated quite some links.&lt;br /&gt;&lt;br /&gt;First and foremost there is the &lt;a href="http://javablogs.com/Jump.action?id=591238"&gt;Release of RHQ 3.0 (final)&lt;/a&gt;. As we are phasing out the word "Jopr", the &lt;a href="http://javablogs.com/Jump.action?id=591777"&gt;Jopr bits are now always included in RHQ&lt;/a&gt;.&lt;br /&gt;This release has been reflected in other publications like&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.opennet.ru/opennews/art.shtml?num=27268"&gt;Translated announce on Opennet.ru&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.dzone.com/links/expanded_alerting_and_configuration_in_rhq_3.html"&gt;DZone summary of RHQ 3&lt;/a&gt; article&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://stfw.ru/page.php?id=15136"&gt;stfw.ru&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://jaxenter.com/rhq-3-0-0-final-and-gaelyk-0-4-1-released-27767.html"&gt;News article at Jaxenter.de&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;RHQ 3 has a new bundle provisioning feature. This &lt;a href="http://javablogs.com/Jump.action?id=593000"&gt;article&lt;/a&gt; talks about bundle formats and a simple generator to create bundles for deployment by RHQ.&lt;br /&gt;Mazz explains how to deploy in his article &lt;a href="http://management-platform.blogspot.com/2010/06/provisioning-content-via-rhq.html"&gt;provisioning content via RHQ&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Greg Hinkle wrote three articles that talk about the upcoming GWT UI (parts of this are already in RHQ 3 in the bundle provisioning):&lt;br /&gt;&lt;a href="http://www.jroller.com/ghinkle/entry/new_rhq_ui_technology"&gt;New UI technology&lt;/a&gt;, &lt;a href="http://www.jroller.com/ghinkle/entry/exposing_domain_objects_to_gwt"&gt;Exposing domain objects to GWT&lt;/a&gt; and &lt;a href="http://www.jroller.com/ghinkle/entry/rhq_and_customizable_dashboards"&gt;RHQ and customizable dashboards&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Joseph Marques has posted a very good in-depth &lt;a href="http://bit.ly/9hwblH"&gt;analysis of the GWT compile performance&lt;/a&gt; (in RHQ) and shows how to tweak the settings to get the best results.&lt;br /&gt;&lt;br /&gt;Tom Jenkins created a &lt;a href="http://vimeo.com/13756469"&gt;video&lt;/a&gt; on how to administrate &lt;a href="http://jboss-blacktie.blogspot.com/"&gt;BlackTie&lt;/a&gt; via RHQ plugin - the video actually features the admin console in AS 5&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-2651881082758378119?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/2651881082758378119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=2651881082758378119&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2651881082758378119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2651881082758378119'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/07/rhq-jopr-tab-sweep.html' title='RHQ (Jopr) tab sweep (updated)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-5861452579992851500</id><published>2010-07-14T09:46:00.001+02:00</published><updated>2010-07-14T09:46:43.782+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Simple Bundle generator for RHQ provisioning feature</title><content type='html'>So in &lt;a href="http://javablogs.com/Jump.action?id=591238"&gt;RHQ 3&lt;/a&gt; we've added this cool new &lt;a href="http://www.rhq-project.org/display/JOPR2/Provisioning"&gt;provisioning&lt;/a&gt; feature.&lt;br /&gt;This allows you to deploy a &lt;em&gt;bundle&lt;/em&gt; to a group of platforms or other resources like e..g JBossAS servers.&lt;br /&gt;&lt;br /&gt;So what is a bundle? Basically it is some piece of software to be deployed and a matching recipe file. There are two kinds of recipe files: &lt;a href="http://www.rhq-project.org/display/JOPR2/File+Template+Bundles"&gt;FileTemplateBundle&lt;/a&gt; and &lt;a href="http://www.rhq-project.org/display/JOPR2/Ant+Bundles"&gt;AntBundle&lt;/a&gt; - I'll only talk about the ant-style recipes here.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When I started looking at the bundle UI, I remembered &lt;a href="http://management-platform.blogspot.com/2010/06/provisioning-content-via-rhq.html"&gt;Mazz' great video&lt;/a&gt;, but being on the train, I had no access to it. So how do I deploy?&lt;br /&gt;First thing you need to have is either a valid bundle distribution file or at least a valid recipe file.&lt;br /&gt;&lt;br /&gt;A bundle distribution file is (by default) a zip file where all entries lie directly in the root directory like this (actually other is possible):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ unzip -l bundle.zip &lt;br /&gt;Archive:  bundle.zip&lt;br /&gt;  Length     Date   Time    Name&lt;br /&gt; --------    ----   ----    ----&lt;br /&gt;     1150  07-12-10 16:27   demo.war&lt;br /&gt;      948  07-12-10 16:38   deploy.xml&lt;br /&gt; --------                   -------&lt;br /&gt;     2098                   2 files&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In the bundle I have &lt;em&gt;demo.war&lt;/em&gt; to provision and the &lt;em&gt;deploy.xml&lt;/em&gt; file as recipe. Lets have a look at the recipe file:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0"?&gt;&lt;br /&gt;&amp;lt;project name="demo" default="main"&lt;br /&gt;         xmlns:rhq="antlib:org.rhq.bundle"&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &amp;lt;rhq:bundle name="&lt;strong&gt;demo&lt;/strong&gt;" version="&lt;strong&gt;1.0&lt;/strong&gt;"&lt;br /&gt;                description="Just some bundle"&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;      &amp;lt;rhq:input-property&lt;br /&gt;       name="&lt;strong&gt;test.name&lt;/strong&gt;"&lt;br /&gt;       description="Who do we greet?"&lt;br /&gt;       required="true"/&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;      &amp;lt;rhq:deployment-unit name="war"&gt;&lt;br /&gt;        &amp;lt;rhq:archive name="&lt;strong&gt;demo.war&lt;/strong&gt;"&gt;&lt;br /&gt;           &amp;lt;rhq:replace&gt;&lt;br /&gt;              &amp;lt;rhq:fileset&gt;&lt;br /&gt;                 &amp;lt;include name="&lt;strong&gt;*.jsp&lt;/strong&gt;"/&gt;&lt;br /&gt;              &amp;lt;/rhq:fileset&gt;&lt;br /&gt;           &amp;lt;/rhq:replace&gt;&lt;br /&gt;        &amp;lt;/rhq:archive&gt;&lt;br /&gt;      &amp;lt;/rhq:deployment-unit&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &amp;lt;/rhq:bundle&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &amp;lt;target name="main"/&gt;&lt;br /&gt;&amp;lt;/project&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Some of you will see that this is an &lt;a href="http://ant.apache.org/"&gt;ant&lt;/a&gt; file with some extra tags in the &lt;em&gt;rhq&lt;/em&gt; namespace. Lets go through the sections.&lt;br /&gt;&lt;br /&gt;First is the boilerplate code that defines an ant project and then&lt;br /&gt;within that we see one bundle denoted by the &lt;code&gt;&amp;lt;rhq:bundle&gt;&lt;/code&gt; tag. The bundle has a name of &lt;em&gt;demo&lt;/em&gt; and is at version &lt;em&gt;1.0&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Next there is an &lt;code&gt;&amp;lt;rhq:input-property&gt;&lt;/code&gt; tag which defines that the deploy UI should ask for a property &lt;em&gt;test.name&lt;/em&gt; which may be used to &lt;a href="http://www.rhq-project.org/display/JOPR2/Provisioning#Provisioning-TemplatizingFiles"&gt;replace tokens by the users input&lt;/a&gt;. This input-property is optional and can show up multiple times.&lt;br /&gt;&lt;br /&gt;The most important part is the &lt;code&gt;&amp;lt;rhq:deployment-unit&gt;&lt;/code&gt; tag, which defines the content to deploy in its embedded &lt;code&gt;&amp;lt;archive&gt;&lt;/code&gt; tag - &lt;em&gt;demo.war&lt;/em&gt; in our case. And then we have a &lt;code&gt;&amp;lt;rhq:replace&gt;&lt;/code&gt; element embedded in this which defines a standard ant fileset that defines files in which token replacements can occur, like &lt;em&gt;.jsp&lt;/em&gt; files in our example.&lt;br /&gt;&lt;br /&gt;While this recipe file is not complicated, it still needs some typing, so I started writing a bundle generator, which is in RHQ 4 master in &lt;a href="http://git.fedorahosted.org/git/?p=rhq/rhq.git;a=tree;f=modules/helpers/bundleGen"&gt;&lt;code&gt;modules/helpers/bundleGen/&lt;/code&gt;&lt;/a&gt; (actually you can use that to define bundles for RHQ 3)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Using the bundle generator&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ java -jar bundleGen-4.0.0-SNAPSHOT-jar-with-dependencies.jar &lt;br /&gt;Please give the project name[myProject]: &lt;br /&gt;Please give the bundle name: &lt;strong&gt;demoBundle&lt;/strong&gt;&lt;br /&gt;Please specify the bundle version[1.0]: &lt;br /&gt;Please describe your bundle: &lt;strong&gt;Just testing&lt;/strong&gt;&lt;br /&gt;Please give the name (only) of your bundle content file: &lt;strong&gt;demo.war&lt;/strong&gt;&lt;br /&gt;Please give the directory (only) of your bundle content file: &lt;strong&gt;/tmp/&lt;/strong&gt;&lt;br /&gt;Please give a patten of files to replace templates: &lt;strong&gt;*.jsp&lt;/strong&gt;&lt;br /&gt;Jul 14, 2010 9:24:31 AM org.rhq.helpers.bundleGen.BundleGen createFile&lt;br /&gt;INFO: Trying to generate /var/folders/m9/m9pXAK2WHoyq22G2P9J8L++++TI/-Tmp-//bundleGen/deploy.xml&lt;br /&gt;Jul 14, 2010 9:24:31 AM org.rhq.helpers.bundleGen.BundleGen run&lt;br /&gt;INFO: Your bundle is now ready in [/tmp/generatedBundle.zip]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So this is asking some questions - those with &lt;em&gt;[text]&lt;/em&gt; have this text as default, so you can just press return to accept it.&lt;br /&gt;&lt;br /&gt;When the generator has finished it prints where you can obtain the created bundle from - &lt;code&gt;/tmp/generatedBundle.zip&lt;/code&gt; in our case.&lt;br /&gt;&lt;br /&gt;The generator is far from finished; for example there is no way to specify &lt;code&gt;&amp;lt;rhq:input-property&gt;&lt;/code&gt; tags so far.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;XmlQuestionsReader&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;One interesting detail is the &lt;a href="http://git.fedorahosted.org/git/?p=rhq/rhq.git;a=blob;f=modules/helpers/bundleGen/src/main/java/org/rhq/helpers/bundleGen/XmlQuestionsReader.java"&gt;XmlQuestionsReader&lt;/a&gt; which takes input from an XML file about the questions to ask. It partially supports internationalization in the form that you can have &lt;code&gt;&lt;em&gt;basename&lt;/em&gt;_lang.xml&lt;/code&gt; variants of the input, as you can &lt;a href="http://git.fedorahosted.org/git/?p=rhq/rhq.git;a=tree;f=modules/helpers/bundleGen/src/main/resources"&gt;see here&lt;/a&gt;. I am not yet exactly happy with this, as there is no fallback to the default version if a question is not defined.&lt;br /&gt;&lt;br /&gt;Also there is no way yet to tell that a certain &lt;code&gt;&amp;lt;question&gt;&lt;/code&gt; can be repeated to form a List/Set (as it would be needed for the &lt;code&gt;&amp;lt;rhq:input-property&gt;&lt;/code&gt; tags). &lt;br /&gt;&lt;br /&gt;So please give me feedback and if you want to help improving the generator, you are free to do so.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-5861452579992851500?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/5861452579992851500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=5861452579992851500&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5861452579992851500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5861452579992851500'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/07/simple-bundle-generator-for-rhq.html' title='Simple Bundle generator for RHQ provisioning feature'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-3551629157247573072</id><published>2010-07-09T14:52:00.001+02:00</published><updated>2010-07-09T15:02:09.550+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>RHQ 3 released, but where is Jopr ?</title><content type='html'>&lt;img src="http://rhq-project.org/download/attachments/1017410/RHQ?version=2&amp;modificationDate=1257543585409" align="right"/&gt;&lt;br /&gt;&lt;br /&gt;So we've &lt;a href="http://javablogs.com/Jump.action?id=591238"&gt;released RHQ 3&lt;/a&gt; two days ago -- but what about &lt;strong&gt;Jopr&lt;/strong&gt;? Isn't that supposed to build on top of &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt;? Shouldn't there be a release as well?&lt;br /&gt;&lt;br /&gt;Actually we did release Jopr too -- those bits are now (since last September) &lt;strong&gt;included in RHQ&lt;/strong&gt;, so there will be no more separate artifacts or downloads. When you &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;download RHQ&lt;/a&gt;, you'll get Jopr too -- so simple :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The documentation wiki has full &lt;a href="http://rhq-project.org/display/JOPR2/Installation"&gt;install instructions&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Btw: DZone has a nice &lt;a href="http://www.dzone.com/links/expanded_alerting_and_configuration_in_rhq_3.html"&gt;article about all the new features&lt;/a&gt;, check it out and vote it up. They also have &lt;a href="http://www.dzone.com/links/rhq_300_final_released.html"&gt;my announcement post&lt;/a&gt; online.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-3551629157247573072?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/3551629157247573072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=3551629157247573072&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3551629157247573072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3551629157247573072'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/07/rhq-released-but-where-is-jopr.html' title='RHQ 3 released, but where is Jopr ?'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-1883968738480577985</id><published>2010-07-09T10:49:00.001+02:00</published><updated>2010-07-09T10:49:50.529+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><title type='text'>Installing OpenSolaris on Parallels Desktop on Mac</title><content type='html'>To try some things I wanted to install OpenSolaris 2009.6 on Parallels Desktop on my Mac.&lt;br /&gt;&lt;br /&gt;Install of OpenSolaris itself went well, but network was not available.&lt;br /&gt;Searching around the net led to &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.opensolaris.com/use/network_administration.pdf"&gt;http://www.opensolaris.com/use/network_administration.pdf&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.sun.com/lr/entry/opensolaris_in_parallels_vm_on"&gt;http://blogs.sun.com/lr/entry/opensolaris_in_parallels_vm_on&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://dlc.sun.com/osol/docs/content/2009.06/getstart/parallels.html"&gt;http://dlc.sun.com/osol/docs/content/2009.06/getstart/parallels.html&lt;/a&gt;&lt;br /&gt;and finally&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kb.parallels.com/de/7060"&gt;http://kb.parallels.com/de/7060&lt;/a&gt; (or English: &lt;a href="http://kb.parallels.com/en/7060"&gt;http://kb.parallels.com/en/7060&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;But still no avail.&lt;br /&gt;&lt;br /&gt;It turned out that the script change is almost complete, but is missing&lt;br /&gt;one additional line. Below "Compiling driver ..." it should read&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;cd &lt;strong&gt;$tmpdir/&lt;/strong&gt;$driver &amp;&amp; /usr/ccs/bin/make install &gt; /dev/null&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;After this change &lt;code&gt;dladm show-phys&lt;/code&gt; shows the interface and &lt;code&gt;ifconfig ni0 plumb&lt;/code&gt; is able to use it. After a reboot, networking is working :-)&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/6080082-1883968738480577985?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/1883968738480577985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=1883968738480577985&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1883968738480577985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1883968738480577985'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/07/installing-opensolaris-on-parallels.html' title='Installing OpenSolaris on Parallels Desktop on Mac'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-9057280561778029553</id><published>2010-07-07T21:19:00.001+02:00</published><updated>2010-07-07T22:53:10.764+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ 3.0.0 final has been released</title><content type='html'>&lt;img src="http://rhq-project.org/download/attachments/1017410/RHQ?version=2&amp;modificationDate=1257543585409" align="right"/&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt; team is proud to announce the immediate availability of &lt;strong&gt;RHQ 3.0.0&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;This release features several month of hard work by the development team and external contributors. Many of the changes have been already made available in the past through seven community releases.&lt;br /&gt;&lt;br /&gt;Highlights of this release are:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Pluggable alert senders&lt;br /&gt;&lt;lI&gt;Provisioning of&lt;br /&gt;&lt;li&gt;Improved search capabilities&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can browse the full &lt;a href="http://support.rhq-project.org/display/RHQ/Release+Notes+3.0.0"&gt;release notes on the RHQ wiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The release can be downloaded via the &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt; web site or directly from &lt;a href="http://sourceforge.net/projects/rhq/files/"&gt;SourceForge&lt;/a&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/6080082-9057280561778029553?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/9057280561778029553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=9057280561778029553&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/9057280561778029553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/9057280561778029553'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/07/rhq-300-final-has-been-released.html' title='RHQ 3.0.0 final has been released'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-2761966775094043825</id><published>2010-06-17T10:37:00.001+02:00</published><updated>2010-06-21T13:30:09.331+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Upcoming talks about JBossON / RHQ / Jopr</title><content type='html'>Below is a list of upcoming talks about &lt;br /&gt;JBoss Operations Network (&lt;a href="http://www.jboss.com/products/jbosson"&gt;JBoss ON&lt;/a&gt;), &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt; and Jopr&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;21.6. Jean Deruelle, &lt;a href="http://www.jboss.org/events/JUDCon/schedule.html"&gt;Mobicents Reloaded (aka 2.0), The Open Source Communications Platform&lt;/a&gt;, JUDCon, Boston, USA&lt;br /&gt;&lt;li&gt;23.6. Charles Crouch, &lt;a href="http://www.redhat.com/promo/summit/2010/sessions/jboss.html#927972"&gt;Application Management with JBoss Operations Network&lt;/a&gt;, &lt;a href="http://www.redhat.com/promo/summit/2010/"&gt;JBossWorld&lt;/a&gt;, Boston, USA&lt;/li&gt;&lt;br /&gt;&lt;li&gt;23.6. Steve Givannetti &amp;amp; Ramesh Mourthy, &lt;a href="http://www.redhat.com/promo/summit/2010/sessions/jboss.html#890684"&gt;Creating Custom Monitoring Plug-ins for JBoss Operations Network&lt;/a&gt;, &lt;a href="http://www.redhat.com/promo/summit/2010/"&gt;JBossWorld&lt;/a&gt;, Boston, USA&lt;/li&gt;&lt;br /&gt;&lt;li&gt;24.6. Andrew Morris &amp;amp; Ray Ploski, &lt;a href="http://www.redhat.com/promo/summit/2010/sessions/jboss.html#950894"&gt;Combining JBoss Enterprise Portal Platform &amp; JBoss Operations Network into a Reusable Corporate Standard&lt;/a&gt;, &lt;a href="http://www.redhat.com/promo/summit/2010/"&gt;JBossWorld&lt;/a&gt;, Boston, USA&lt;/li&gt;&lt;br /&gt;&lt;li&gt;24.6. David Webster &amp;amp; Sweta Vajjhala, &lt;a href="http://www.redhat.com/promo/summit/2010/sessions/jboss.html#925670"&gt;Enterprise Java Hosting in a Cloud Environment&lt;/a&gt;, &lt;a href="http://www.redhat.com/promo/summit/2010/"&gt;JBossWorld&lt;/a&gt;, Boston, USA&lt;/li&gt;&lt;br /&gt;&lt;li&gt;12.7. Heiko Rupp at &lt;a href="http://87.230.78.21:8080/display/jugc/Home"&gt;JUG Cologne&lt;/a&gt;, Germany&lt;/li&gt;&lt;br /&gt;&lt;li&gt;1.10. Heiko Rupp at &lt;a href="http://www.onedaytalk.org/"&gt;Onedaytalk&lt;/a&gt;, Munich, Germany&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Please inform me if you know of more talks around those topics, to that I can announce them here as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-2761966775094043825?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/2761966775094043825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=2761966775094043825&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2761966775094043825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2761966775094043825'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/06/upcoming-talks-about-jbosson-rhq-jopr.html' title='Upcoming talks about JBossON / RHQ / Jopr'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-1752757022464059864</id><published>2010-06-10T14:42:00.001+02:00</published><updated>2010-06-10T14:42:16.597+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ - how to monitor local JMX servers</title><content type='html'>If you are using tools like JConsole or VisualVM, you may have seen that it is possible to monitor JVMs that don't have explicit jmx-remoting settings.&lt;br /&gt;This post shows how you can easily achieve the very same in your plugin.&lt;br /&gt;&lt;br /&gt;Basically you need to do four things:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Have your plugin use the jmx-plugin:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;plugin name="hadoop"&lt;br /&gt;        displayName="hadoopPlugin"&lt;br /&gt;    &lt;strong&gt;&amp;lt;depends plugin="JMX" useClasses="true"/&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In the Discovery Class (could also be done in &lt;code&gt;ResourceComponent.start()&lt;/code&gt; at the very beginning), you put some additional plugin properties:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public Set&amp;lt;DiscoveredResourceDetails&gt; discoverResources(&lt;br /&gt;   ResourceDiscoveryContext context) &lt;br /&gt;   throws Exception &lt;br /&gt;{&lt;br /&gt;   Configuration pluginConfiguration = context.getDefaultPluginConfiguration();&lt;br /&gt;    pluginConfiguration.put(new PropertySimple(&lt;br /&gt;         JMXDiscoveryComponent.COMMAND_LINE_CONFIG_PROPERTY,&lt;br /&gt;         &lt;em&gt;javaClazz&lt;/em&gt;));&lt;br /&gt;    pluginConfiguration.put(new PropertySimple(&lt;br /&gt;         JMXDiscoveryComponent.CONNECTION_TYPE,&lt;br /&gt;         LocalVMTypeDescriptor.class.getName()));&lt;br /&gt;    ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The &lt;em&gt;javaClazz&lt;/em&gt; is the fully qualified name of the main class as it would&lt;br /&gt;appear with &lt;code&gt;jps -l&lt;/code&gt; :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ jps -l&lt;br /&gt;3299 org.apache.hadoop.mapred.TaskTracker&lt;br /&gt;12311 &lt;br /&gt;3177 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode&lt;br /&gt;3037 org.apache.hadoop.hdfs.server.namenode.NameNode&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(the output is vmid and class, where the vmid is usually the process id)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Have your component class extend JMXComponent&lt;br /&gt;&lt;br /&gt;&lt;code&gt;public class HadoopServiceComponent extends &lt;strong&gt;JMXServerComponent&lt;/strong&gt;, ...&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;In component.start() call the JMXServerComponent&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;    &lt;br /&gt;public void start(ResourceContext context) throws Exception &lt;br /&gt;{&lt;br /&gt;      &lt;strong&gt;super.start(context);&lt;/strong&gt;&lt;br /&gt;      ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;From there on, you can get the JMX connection by a simple&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;     EmsConnection conn = getEmsConnection();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and so on ...&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-1752757022464059864?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/1752757022464059864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=1752757022464059864&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1752757022464059864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1752757022464059864'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/06/rhq-how-to-monitor-local-jmx-servers.html' title='RHQ - how to monitor local JMX servers'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-7806992807183060878</id><published>2010-06-10T14:13:00.001+02:00</published><updated>2010-06-10T14:21:46.739+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Back from Linuxtag</title><content type='html'>&lt;img src="http://www.linuxtag.org/2010/fileadmin/www.linuxtag.org/templates/main/images/lt2k10-logo.gif" style="background:darkblue;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://rhq-project.org/download/attachments/1017410/RHQ?version=2&amp;modificationDate=1257543585409" align="right"/&gt;&lt;br /&gt;&lt;br /&gt;So I am back from a quick trip to &lt;a href="http://javablogs.com/Jump.action?id=583087"&gt;Linuxtag&lt;/a&gt; 2010 in Berlin where I was presenting "Systemmanagement with RHQ - also for Linux". My talk featured an overview of &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt; by slides and live demo and a demonstration of the &lt;a href="http://www.nagios.org/"&gt;Nagios&lt;/a&gt; plugin, Alexander Kiefer has written.&lt;br /&gt;&lt;br /&gt;The meeting room wasn't exactly crowded with around 20 people, but I saw them writing down stuff and they were asking questions, so I consider this good anyway.&lt;br /&gt;&lt;br /&gt;At Linuxtag I also met Dalibor Topic from OpenJDK, my colleague David Lutterkort (who was presenting about deltacloud) and Hardy Ferentschik who was presenting about Hibernate Search. Unfortunately I was not able to attend any of those, as either I was still on my way to the conference or already back. &lt;br /&gt;&lt;br /&gt;While I spent a good part of the day in trains (5h30 in the morning + commuter train within Berlin and 5h in the evening + commuter train), I was also able to walk around Linuxtag and have a glance at the exhibition. Many (larger) Open Source Projects were present (Fedora was missing to my surprise) and Debian even hold their own mini conference.&lt;br /&gt;Also some system integrators and other companies like Google, O'Reilly or Addison-Weseley had a booth.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the train I started hacking a plugin to monitor &lt;a href="http://hadoop.apache.org/"&gt;Hadoop&lt;/a&gt; clusters. It will find the various instances and already connects via JMX to them. The NameNode even has some statistics exposed. I'll put that into RHQ git within the next days.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can find &lt;a href="http://www.pilhuhn.de/hwr/SystemManagementRHQ_Linuxtag2010.pdf"&gt;slides of my talk&lt;/a&gt; online - those are rather sparse as I was doing a long demo session showing RHQ, the Nagios integration and how easy it is to put an agent on a new platform and get this platform into inventory (literally took 2mins incl. downloading)&lt;br /&gt;&lt;br /&gt;Sorry that there are no photos or even a video - I just did not feel like carrying the appropriate equipment around.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-7806992807183060878?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/7806992807183060878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=7806992807183060878&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7806992807183060878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7806992807183060878'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/06/back-from-linuxtag.html' title='Back from Linuxtag'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-7495970124201343882</id><published>2010-06-04T11:02:00.000+02:00</published><updated>2010-06-04T11:02:15.306+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Red Hat'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>RHQ at Linuxtag</title><content type='html'>&lt;img src="http://www.linuxtag.org/2010/fileadmin/www.linuxtag.org/templates/main/images/lt2k10-logo.gif" style="background:darkblue;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://rhq-project.org/download/attachments/1017410/RHQ?version=2&amp;modificationDate=1257543585409" align="right"/&gt;&lt;br /&gt;&lt;br /&gt;I will present "Systemmanagement mit RHQ - auch für Linux" at &lt;a href="http://www.linuxtag.org/2010/"&gt;Linuxtag&lt;/a&gt;&lt;br /&gt;Berlin next wednesday, &lt;strong&gt;June 9 at 3pm&lt;/strong&gt; in room &lt;strong&gt;Europa 1&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;I will talk about the architecture of &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt; and how it can be used&lt;br /&gt;for Linux monitoring and will especially mention the &lt;a href="http://javablogs.com/Jump.action?id=581104"&gt;Nagios integration&lt;/a&gt; by Alex Kiefer.&lt;br /&gt;&lt;br /&gt;Wednesday schedule for Linuxtag is &lt;a href="http://www.linuxtag.org/2010/en/program/free-conference/wednesday.html"&gt;here&lt;/a&gt; (Don't worry, if you still see the CDI talk in this slot. I am sure my talk will soon show up at 3pm in room "Europa 1")&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-7495970124201343882?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/7495970124201343882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=7495970124201343882&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7495970124201343882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7495970124201343882'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/06/rhq-at-linuxtag.html' title='RHQ at Linuxtag'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-5630868477003576481</id><published>2010-05-31T20:09:00.001+02:00</published><updated>2010-05-31T20:09:01.190+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>RHQ / Jopr tab sweep</title><content type='html'>RHQ release &lt;a href="http://javablogs.com/Jump.action?id=580898"&gt;3.0.0.B06 is out&lt;/a&gt; and contains support for provisioning of new software.&lt;br /&gt;&lt;br /&gt;Alex Kiefer has worked hard and now we have &lt;a href="http://javablogs.com/Jump.action?id=581104"&gt;Nagios support in RHQ&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://web.me.com/pilhuhn/Jopr_Podcast/Jopr_Podcast/Einträge/2010/5/19_News_and_alert_sender_plugins.html"&gt;Episode 6&lt;/a&gt; of the Jopr podcast has been released and is talking about the new pluggable alert senders in RHQ.&lt;br /&gt;&lt;br /&gt;And finally we've got &lt;a href="http://javablogs.com/Jump.action?id=580885"&gt;portuguese translations&lt;/a&gt; of the installer messages by &lt;a href="http://rafaeltuelho.wordpress.com/"&gt;Rafael Soares Tuelho&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;As always, give us feedback.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-5630868477003576481?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/5630868477003576481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=5630868477003576481&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5630868477003576481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5630868477003576481'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/05/rhq-jopr-tab-sweep.html' title='RHQ / Jopr tab sweep'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-4556794770775069655</id><published>2010-05-27T20:36:00.001+02:00</published><updated>2010-05-28T12:15:12.314+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>Nagios Plugin for RHQ and Jopr available</title><content type='html'>&lt;img src="http://rhq-project.org/download/attachments/1017410/RHQ?version=2&amp;modificationDate=1257543585409" align="right"/&gt;&lt;br /&gt;&lt;br /&gt;As &lt;a href="http://javablogs.com/Jump.action?id=570496"&gt;previously written&lt;/a&gt;, Nagios support is coming to RHQ.&lt;br /&gt;&lt;br /&gt;Well, Alex has done more work and actually &lt;strong&gt;it is here now&lt;/strong&gt; in its first version and is out-of the box able to monitor the standard services that are in a Nagios install:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://lh5.ggpht.com/_OdJrfDwRKLM/S_51T_T33XI/AAAAAAAAAOg/HGsEkENKVEY/Bildschirmfoto%202010-05-26%20um%2021.59.00.png?imgmax=800" alt="Screenshot of resource tree and metric" border="0" width="400"  /&gt;&lt;br /&gt;&lt;br/&gt;(Screenshot with standard services and metrics)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This picture shows again the setup:&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://lh6.ggpht.com/_OdJrfDwRKLM/S_-PMCKuWyI/AAAAAAAAAOs/ADy0oo8xlkY/NagiosPlugin.png?imgmax=800" alt="#alttext#" border="0" width="461"  /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;To take the nagios server into inventory, you need to go to a platform and use the Manually Add functionality, where you have to give the connection properties "host, where nagios is on" and "port" (6557 in the image)&lt;br /&gt;&lt;br /&gt;But before you can start you have to:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;install &lt;a href="http://mathias-kettner.de/checkmk_livestatus.html"&gt;mk_livestatus&lt;/a&gt; within Nagios and xinetd.&lt;br /&gt;Alex has documented this in the &lt;a href="http://support.rhq-project.org/display/RHQ/Plugins+-+Nagios"&gt;Wiki&lt;/a&gt;; the mk_livestatus installation is very well described on the livestatus web page.&lt;br /&gt;&lt;li&gt;For all services in addition to the standard ones supplied in the plugin descriptor you need to update the plugin-descriptor of the plugin. This is described below.&lt;br /&gt;&lt;/ul&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As we know the second step is somewhat cumbersome, we will in the future work to make the detection of the resource types dynamic, so that you basically need to point the plugin at a Nagios install and the plugin will then "learn" all the types of service (e.g. SSH, Swap , ..).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;PLEASE give feedback&lt;/strong&gt; on the plugin on the &lt;a href="https://fedorahosted.org/mailman/listinfo/rhq-devel"&gt;rhq-devel&lt;/a&gt; mailing list. &lt;br /&gt;Be it because you know more cool metrics to look at or because you want to help with the &lt;a href="#parser_issue"&gt;parser issue&lt;/a&gt; mentioned below. Also the source has a TODO file, that lists more ideas for contributions :-)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Source&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;You can get the source from the &lt;a href="http://git.fedorahosted.org/git/?p=rhq/rhq.git;a=summary"&gt;RHQ git repository&lt;/a&gt; in the &lt;a href="http://git.fedorahosted.org/git/?p=rhq/rhq.git;a=shortlog;h=refs/heads/nagios"&gt;nagios branch&lt;/a&gt;.&lt;br /&gt;This first version has been tagged as &lt;a href="http://git.fedorahosted.org/git/?p=rhq/rhq.git;a=tag;h=refs/tags/RHQ_NAGIOS_PLUGIN_V1"&gt;RHQ_NAGIOS_PLUGIN_V1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Adding additional services&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;The following is an excerpt from the plugin descriptor:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;   &amp;lt;service name="&lt;strong&gt;Root Partition&lt;/strong&gt;"  &lt;br /&gt;         class="NagiosMonitorComponent" &lt;br /&gt;         discovery="NagiosMonitorDiscovery"&lt;br /&gt;         description="root partition service"&gt;&lt;br /&gt;      &amp;lt;metric property="&lt;strong&gt;free_space|plugin_output|.*/ ([\d]+).*&lt;/strong&gt;" &lt;br /&gt;           displayName="Free space" measurementType="dynamic"&lt;br /&gt;           units="megabytes" displayType="summary"/&gt;&lt;br /&gt;   &amp;lt;/service&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The first thing you need to provide is the name of the RHQ-resourceType, which is used in &lt;code&gt;&amp;lt;service name="Root Partition"..&lt;/code&gt;. To obtain those, you can do the following query against mk_livestatus:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ cat service-query&lt;br /&gt;GET services&lt;br /&gt;Columns: display_name &lt;br /&gt;$ nc localhost 6557 &lt; service-query&lt;br /&gt;Root Partition&lt;br /&gt;SSH&lt;br /&gt;...&lt;br /&gt;$&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So in this example services were 'Root Partition' and 'SSH'&lt;br /&gt;&lt;br /&gt;The next thing is to provide the metrics. The &lt;code&gt;property="free_space|plugin_output|.*/ ([\d]+).*"&lt;/code&gt; attribute is used here. It actually consists of three parts separated by a bar (|) symbol:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Text identifier - currently unused&lt;br /&gt;&lt;li&gt;The column of the livestatus service query output (see below)&lt;br /&gt;&lt;li&gt;A regular expression where the first capturing group is used as return value&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Let's have a look at an extended service query (actually in version 1.0 of the plugin, only he plugin_output column is supported, as the parser in the plugin needs some more work (see below):&lt;br /&gt;&lt;pre&gt;$ cat service-query&lt;br /&gt;GET services&lt;br /&gt;Columns: display_name plugin_output&lt;br /&gt;$ nc localhost 6557 &lt; service-query&lt;br /&gt;Root Partition;DISK OK - free space: / 3611 MB (48% inode=71%)&lt;br /&gt;...&lt;br /&gt;$&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So Root Partition delivered "&lt;em&gt;DISK OK - free space: / 3611 MB (48% inode=71%)&lt;/em&gt;" which is then matched by &lt;code&gt;.*/ ([\d]+).*&lt;/code&gt; to extract the value of &lt;em&gt;3611&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;The parser issue&lt;/h4&gt;&lt;br /&gt;&lt;a name="parser_issue"/&gt;&lt;br /&gt;mk_livestatus delivers as default data separated by semicolon (;), but some columns like 'perf_data' (not shown above) can also return data that consist of multiple items separated by semicolon, so that the parser counts wrong and delivers bad answers.&lt;br /&gt;&lt;br /&gt;Luckily mk_livestatus can do some &lt;a href="http://mathias-kettner.de/checkmk_livestatus.html#H1:Output%20formatting"&gt;output formatting&lt;/a&gt; that can help to work around this. Please ping us if you want to help here.&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/6080082-4556794770775069655?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/4556794770775069655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=4556794770775069655&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4556794770775069655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4556794770775069655'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/05/nagios-plugin-for-rhq-and-jopr.html' title='Nagios Plugin for RHQ and Jopr available'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_OdJrfDwRKLM/S_51T_T33XI/AAAAAAAAAOg/HGsEkENKVEY/s72-c/Bildschirmfoto%202010-05-26%20um%2021.59.00.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-160393360865717792</id><published>2010-05-27T16:13:00.001+02:00</published><updated>2010-05-27T16:13:56.314+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Red Hat'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>RHQ community build 3.0.0.B06 released</title><content type='html'>&lt;img src="http://rhq-project.org/download/attachments/1017410/RHQ?version=2&amp;modificationDate=1257543585409" align="right"/&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt; team is pleased to announce the immediate availability of community release &lt;strong&gt;3.0.0.B06&lt;/strong&gt; of the RHQ systems management and monitoring platform. As before this release includes the Jopr bits.&lt;br /&gt;&lt;br /&gt;This release features a lot of bug fixes as you can see on the&lt;br /&gt;&lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+3.0.0.B06"&gt;Release Notes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;New features include optimized search in Inventory and especially provisioning of software (like JBossAS servers). See below.&lt;br /&gt;&lt;br /&gt;You can &lt;a href="https://sourceforge.net/projects/rhq/files/rhq/rhq-3.0.0.B06/rhq-enterprise-server-3.0.0.B06.zip/download"&gt;download&lt;/a&gt; the release from SourceForge &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Provisioning...&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;To enable this you need to go to Administration -&gt; System Configuration -&gt; Settings and enable debug mode&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://lh6.ggpht.com/_OdJrfDwRKLM/S_561HezW8I/AAAAAAAAAOk/xfSFsk_eEiI/Bildschirmfoto%202010-05-27%20um%2015.44.06.png?imgmax=800" alt="#alttext#" border="0" width="299"  /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This will then show a new menu "Debug" with a "GWT GUI" entry:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://lh5.ggpht.com/_OdJrfDwRKLM/S_567q2UpVI/AAAAAAAAAOo/zdxKVcvKjn0/Bildschirmfoto%202010-05-27%20um%2015.46.38.png?imgmax=800" alt="#alttext#" border="0" width="219"  /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Click on "GWT GUI" and you'll get to a &lt;a href="http://www.jroller.com/ghinkle/entry/new_rhq_ui_technology"&gt;GUI written in GWT&lt;/a&gt; with a new "Bundle" menu item.&lt;br /&gt;&lt;br /&gt;To learn more about this, have a &lt;a href="http://rhq-project.org/display/RHQ/Design+-+Provisioning"&gt;look at the Wiki&lt;/a&gt; and especially&lt;br /&gt;this &lt;a href="http://support.rhq-project.org/download/attachments/4424797/bundles.swf?version=1&amp;modificationDate=1269929547962"&gt;flash demo video&lt;/a&gt; by &lt;a href="http://management-platform.blogspot.com/"&gt;Mazz&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-160393360865717792?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/160393360865717792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=160393360865717792&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/160393360865717792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/160393360865717792'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/05/rhq-community-build-300b06-released.html' title='RHQ community build 3.0.0.B06 released'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_OdJrfDwRKLM/S_561HezW8I/AAAAAAAAAOk/xfSFsk_eEiI/s72-c/Bildschirmfoto%202010-05-27%20um%2015.44.06.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-8379763170836998340</id><published>2010-05-27T14:21:00.001+02:00</published><updated>2010-05-27T14:21:14.439+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Translations for RHQ (we want you!)</title><content type='html'>Thanks to &lt;a href="http://rafaeltuelho.wordpress.com/"&gt;Rafael Soares&lt;/a&gt;, we now have Brazilian-Portuguese installer messages for&lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;a href="http://lh4.ggpht.com/_OdJrfDwRKLM/S_5iArDT7_I/AAAAAAAAAOY/ZU4ztIUeFgc/Bildschirmfoto%202010-05-27%20um%2014.12.33.png"&gt;&lt;img src="http://lh4.ggpht.com/_OdJrfDwRKLM/S_5iArDT7_I/AAAAAAAAAOY/ZU4ztIUeFgc/Bildschirmfoto%202010-05-27%20um%2014.12.33.png?imgmax=800" alt="#alttext#" border="0" width="400"  /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;Click for a larger version&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Those translated messages currently live in the &lt;a href="http://git.fedorahosted.org/git/?p=rhq/rhq.git;a=shortlog;h=refs/heads/translations"&gt;'translations' branch in git&lt;/a&gt; (which will shadow the master branch).&lt;br /&gt;&lt;br /&gt;While we use I18Nlog for I18N output, there is no need to modify the java file, but one can just supply the "classical" .properties files for it.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;We want you!&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;So if you want to help translate messages to your language, contact us and/or just start right away :)  Make sure to also to check out the &lt;a href="http://rhq-project.org/display/RHQ/Contributions"&gt;contributions page on our wiki&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-8379763170836998340?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/8379763170836998340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=8379763170836998340&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8379763170836998340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8379763170836998340'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/05/translations-for-rhq-we-want-you.html' title='Translations for RHQ (we want you!)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_OdJrfDwRKLM/S_5iArDT7_I/AAAAAAAAAOY/ZU4ztIUeFgc/s72-c/Bildschirmfoto%202010-05-27%20um%2014.12.33.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6872817861814360827</id><published>2010-05-06T11:05:00.001+02:00</published><updated>2010-05-06T11:05:32.406+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><title type='text'>No wonder Mighty Mouse refused to work</title><content type='html'>I am for a long time user of a Mighty Mouse (actually 2 of them. And as every user of a Mighty Mouse, I have the issues of the mouse ball being stuck and needing some cleanup.&lt;br /&gt;&lt;br /&gt;In the past I've turned the mouse around and rolled it over some issue, which helped more or less. But just now I had the urge to finally open it and really clean it. There are many "how-to"s on the web for this.&lt;br /&gt;&lt;br /&gt;When the mouse was open, it became very obvious why it did not really work well anymore:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;a href="http://lh3.ggpht.com/_OdJrfDwRKLM/S-KFEzrxeVI/AAAAAAAAAOM/A1HypFTUO30/IMG_8664.JPG"&gt;&lt;img src="http://lh3.ggpht.com/_OdJrfDwRKLM/S-KFEzrxeVI/AAAAAAAAAOM/A1HypFTUO30/IMG_8664.JPG?imgmax=800" alt="IMG_8664.JPG" border="0" width="400"  /&gt;&lt;/a&gt;&lt;br/&gt;(click for a larger version)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;opening the white cage an removing the ball (which itself was totally clean) revealed more dirt:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;a href="http://lh3.ggpht.com/_OdJrfDwRKLM/S-KFenXqXNI/AAAAAAAAAOQ/IwVg6dBT1qk/IMG_8666.JPG"&gt;&lt;img src="http://lh3.ggpht.com/_OdJrfDwRKLM/S-KFenXqXNI/AAAAAAAAAOQ/IwVg6dBT1qk/IMG_8666.JPG?imgmax=800" alt="IMG_8666.JPG" border="0" width="400"  /&gt;&lt;/a&gt;&lt;br/&gt;(click for a larger version)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Cleaning the little rolls was no issue, but putting them back was somewhat harder, as the thicker black rolls are magnetic and would directly attach to a screwdriver.&lt;br /&gt;&lt;br /&gt;After assembling everything, the mouse responds well again, so problem solved for the years to come :)&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-6872817861814360827?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6872817861814360827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6872817861814360827&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6872817861814360827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6872817861814360827'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/05/no-wonder-mighty-mouse-refused-to-work.html' title='No wonder Mighty Mouse refused to work'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_OdJrfDwRKLM/S-KFEzrxeVI/AAAAAAAAAOM/A1HypFTUO30/s72-c/IMG_8664.JPG?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6599512105088988733</id><published>2010-05-04T17:53:00.001+02:00</published><updated>2010-05-20T10:35:57.891+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>RHQ community build 3.0.0.B05 released</title><content type='html'>&lt;img src="http://rhq-project.org/download/attachments/1017410/RHQ?version=2&amp;modificationDate=1257543585409" align="right"/&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt; development team is happy to announce the availability of the 3.0.0.B05 community build of RHQ. As in previous community releases, this also contains the &lt;a href="http://www.jboss.org/jopr/"&gt;Jopr&lt;/a&gt; bits.&lt;br /&gt;&lt;br /&gt;As usual, changes have been recorded on the &lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+3.0.0.B05"&gt;change log page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Most notable changes were:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Support for obfuscated db passwords&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A fix for &lt;a href="http://www.postgresql.org/"&gt;postgres&lt;/a&gt; 8.4+ servers to display statistics again&lt;br /&gt;&lt;li&gt;Completion of the alert sender plugins. This includes the possibility to finally execute resource operations on any resource as result of an alert&lt;br /&gt;&lt;li&gt;Suport for Oracle 11g database&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Please use and test this release and report issues or feature requests &lt;a href="https://bugzilla.redhat.com/browse.cgi?product=RHQ%20Project"&gt;in Bugzilla&lt;/a&gt;. If you want to contribute to the project, please have a look at the &lt;a href="http://rhq-project.org/display/RHQ/Contributions"&gt;Contributions&lt;/a&gt; page on the &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;wiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can download the release &lt;a href="http://sourceforge.net/projects/rhq/files/rhq/rhq-3.0.0.B05/rhq-enterprise-server-3.0.0.B05.zip/download"&gt;from SourceForge&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you want to develop plugins against this version, you can find the respective artifacts in the new &lt;a href="https://repository.jboss.org/nexus/index.html#welcome"&gt;JBoss Maven repository&lt;/a&gt; at &lt;a href="https://repository.jboss.org/nexus/content/repositories/releases/org/rhq/"&gt;https://repository.jboss.org/nexus/content/repositories/releases/org/rhq/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-6599512105088988733?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6599512105088988733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6599512105088988733&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6599512105088988733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6599512105088988733'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/05/rhq-community-build-300b05-released.html' title='RHQ community build 3.0.0.B05 released'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6642039025186381877</id><published>2010-05-03T22:04:00.001+02:00</published><updated>2010-05-03T22:04:06.845+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stuttgart'/><title type='text'>Neues Maskottchen für die -T---kom ?</title><content type='html'>Heute auf dem Heimweg beim Alten Landtag gesehen:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;a href="http://lh3.ggpht.com/_OdJrfDwRKLM/S98rOeFKzFI/AAAAAAAAAOI/dPuQ609-NG0/DSC00106.JPG"&gt;&lt;img src="http://lh3.ggpht.com/_OdJrfDwRKLM/S98rOeFKzFI/AAAAAAAAAOI/dPuQ609-NG0/DSC00106.JPG?imgmax=800" alt="DSC00106.JPG" border="0" width="400"  /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;(click auf's Bild für eine größere Version)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Die Farbe scheint nicht so ganz das Original-Magenta zu sein, aber das gibt dem Konzern ja auch ein ganz neues Image :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-6642039025186381877?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6642039025186381877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6642039025186381877&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6642039025186381877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6642039025186381877'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/05/neues-maskottchen-fur-die-t-kom.html' title='Neues Maskottchen für die -T---kom ?'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_OdJrfDwRKLM/S98rOeFKzFI/AAAAAAAAAOI/dPuQ609-NG0/s72-c/DSC00106.JPG?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6416324372617737284</id><published>2010-04-30T21:57:00.001+02:00</published><updated>2010-05-02T10:39:28.511+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>RHQ/Jopr plugin development and versions</title><content type='html'>Recently a user showed up on &lt;a href="irc://irc.freenode.net/#rhq"&gt;IRC&lt;/a&gt; and said he had written a plugin and that deploying it is throwing this error:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;2010-04-30 14:26:10,601 WARN  [org.rhq.enterprise.server.core.plugin.AgentPluginDeploymentScanner] Failed to scan plugin [...../myPlugin-1.0.jar] found on filesystem. Skipping it.&lt;br/&gt;&lt;br /&gt;Cause: java.lang.Exception: &lt;strong&gt;No version&lt;/strong&gt; is defined for plugin jar [..../myPlugin-1.0.jar]. A version must be defined either via the MANIFEST.MF [Implementation-Version] attribute or via the plugin descriptor 'version' attribute.&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;While the error message is accurate, it is still not obvious, what is going on, as most of the plugins in the &lt;a href="http://git.fedorahosted.org/git/?p=rhq/rhq.git"&gt;RHQ source tree&lt;/a&gt; do not explicitly set a version number.&lt;br /&gt;&lt;br /&gt;As the message says you need to: &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;either explicitly set a version in the plugin descriptor like&lt;br/&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;plugin name="myPlugin" &lt;strong&gt;version="1.2.3"&lt;/strong&gt; ... &gt;&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;or tell maven to add a Specification-Version: in MANIFEST.MF, which automatically happens when you have the rhq-parent pom as (indirect) parent of your pom, which then contains this:&lt;br /&gt;&lt;code&gt;      &amp;lt;plugin&gt;&lt;br/&gt;&lt;br /&gt;        &amp;lt;artifactId&gt;maven-jar-plugin&amp;lt;/artifactId&gt;&lt;br/&gt;&lt;br /&gt;        &amp;lt;configuration&gt;&lt;br/&gt;&lt;br /&gt;          &amp;lt;archive&gt;&lt;br/&gt;&lt;br /&gt;            &amp;lt;manifest&gt;&lt;br/&gt;&lt;br /&gt;               &amp;lt;addDefaultSpecificationEntries&gt;true&amp;lt;/addDefaultSpecificationEntries&gt;&lt;br/&gt;&lt;/code&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;In most cases, following the RHQ-version is easiest, as you don't have to do anything. If you want to do release-cycles outside of RHQ, the explicit version is for sure better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-6416324372617737284?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6416324372617737284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6416324372617737284&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6416324372617737284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6416324372617737284'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/04/rhqjopr-plugin-development-and-versions.html' title='RHQ/Jopr plugin development and versions'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-1299891599262751320</id><published>2010-04-26T20:30:00.001+02:00</published><updated>2010-04-27T09:19:44.685+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>Nagios support coming to RHQ...</title><content type='html'>Alexander Kiefer started working on supporting the &lt;a href="http://www.nagios.org/"&gt;Nagios&lt;/a&gt; monitoring system from within RHQ. The idea here is not to plugin the Nagios plugins directly into RHQ, but to talk from RHQ (better, a RHQ plugin) to the Nagios instance via &lt;a href="http://mathias-kettner.de/checkmk_livestatus.html"&gt;mk_livestatus&lt;/a&gt; for Nagios. And overview of the setup is shown in the next figure.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://lh5.ggpht.com/_OdJrfDwRKLM/S8w4NDdoeEI/AAAAAAAAAOE/dlL1yWAHGTs/NagiosSetup.png?imgmax=800" alt="NagiosSetup.png" border="0" width="433"  /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The first cut of the implementation is mainly about talking to Nagios via &lt;em&gt;mk_livestatus&lt;/em&gt;. Next steps will be&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Implement the plugin in a way that the user only needs to modify the plugin descriptor to monitor additional Nagios resources&lt;br /&gt;&lt;li&gt;Implement &lt;em&gt;dynamic metadata&lt;/em&gt; so that the plugin can automatically detect resource types present in Nagios and detect resources of the given types.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Alex has started documenting the Plugin in the &lt;a href="http://support.rhq-project.org/display/RHQ/Plugins+-+Nagios"&gt;RHQ Wiki&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Code for this is in the &lt;a href="http://git.fedorahosted.org/git/?p=rhq/rhq.git;a=shortlog;h=refs/heads/nagios"&gt;nagios branch in git&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;PLEASE try it&lt;/strong&gt; and give feedback on the &lt;a href="https://fedorahosted.org/mailman/listinfo/rhq-devel"&gt;rhq-devel mailing list&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-1299891599262751320?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/1299891599262751320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=1299891599262751320&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1299891599262751320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1299891599262751320'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/04/nagios-support-comming-to-rhq.html' title='Nagios support coming to RHQ...'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_OdJrfDwRKLM/S8w4NDdoeEI/AAAAAAAAAOE/dlL1yWAHGTs/s72-c/NagiosSetup.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-1469227486345164650</id><published>2010-04-19T12:26:00.001+02:00</published><updated>2010-04-19T12:34:57.387+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='running'/><title type='text'>Muskelkater (German)</title><content type='html'>Vorgestern bin ich das erste Mal dieses Jahr wieder &lt;a href="http://www.gpsies.com/map.do?url=http://web.me.com/pilhuhn/trailrunner/YLJM7XD.gpx"&gt;die 21km gelaufen&lt;/a&gt; und merke deutlich, dass ich noch nicht so richtig in der Form für die Strecke bin. Ab Kilometer 14 fiel es mir zunehmend schwerer und die letzten Kilometer waren eine reine Willensleistung, nicht aufzugeben. Aber immerhin war ich mit &amp;lt; 1:58h etwas schneller als beim Stuttgart-Lauf &lt;a href="http://pilhuhn.blogspot.com/2009/06/stuttgart-lauf.html"&gt;letztes Jahr&lt;/a&gt;. Es bestehen also berechtigte Hoffnungen, dass es mit diesem einen &lt;a href="http://pilhuhn.blogspot.com/2009/12/laufen-2009-2010-german.html"&gt;Jahresziel&lt;/a&gt; hinhaut.&lt;br /&gt;&lt;br /&gt;Auf jeden Fall habe ich heute noch einen granatenmäßigen Muskelkater - speziell in den Waden.&lt;br /&gt;&lt;br /&gt;Aber noch sind 2 Monate Zeit, um für den diesjährigen Stuttgart-Lauf zu trainieren.&lt;br /&gt;&lt;br /&gt;Der vorherige Lauf in &lt;a href="http://www.gpsies.com/map.do?url=http://web.me.com/pilhuhn/trailrunner/ALJM7XD.gpx"&gt;Kiew&lt;/a&gt; war weniger beschwerlich :-) (aber auch deutlich kürzer).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-1469227486345164650?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/1469227486345164650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=1469227486345164650&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1469227486345164650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1469227486345164650'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/04/muskelkater-german.html' title='Muskelkater (German)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-1094482916920683137</id><published>2010-03-03T11:06:00.001+01:00</published><updated>2010-03-03T11:06:56.475+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Multiple usage of the maven exec plugin</title><content type='html'>So I was trying to use the maven exec plugin in my &lt;a href="http://git.fedorahosted.org/git/rhq/rht.git?p=rhq/rhq.git;a=blob;f=modules/enterprise/server/plugins/alert-operations/pom.xml;h=98f835e5e36274d5f1c4c75c4857bd5a2c2f22fe;hb=HEAD"&gt;alert-operations sender pom&lt;/a&gt; in &lt;a href="http://rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt; to automatically run a java class and generate some documentation.&lt;br /&gt;&lt;br /&gt;I've added the &lt;a href="http://mojo.codehaus.org/exec-maven-plugin/"&gt;maven exec plugin&lt;/a&gt; to the pom like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;build&gt;&lt;br /&gt;  &amp;lt;plugin&gt;&lt;br /&gt;      &amp;lt;groupId&gt;org.codehaus.mojo&amp;lt;/groupId&gt;&lt;br /&gt;      &amp;lt;artifactId&gt;exec-maven-plugin&amp;lt;/artifactId&gt;&lt;br /&gt;      &amp;lt;version&gt;1.1&amp;lt;/version&gt;&lt;br /&gt;       &amp;lt;executions&gt;&lt;br /&gt;           &amp;lt;execution&gt;&lt;br /&gt;              &amp;lt;!-- Generate tokens.xml file --&gt;&lt;br /&gt;               &amp;lt;phase&gt;install&amp;lt;/phase&gt;&lt;br /&gt;               &amp;lt;goals&gt;&lt;br /&gt;                  &amp;lt;goal&gt;exec&amp;lt;/goal&gt;&lt;br /&gt;               &amp;lt;/goals&gt;&lt;br /&gt;               &amp;lt;configuration&gt;&lt;br /&gt;                  &amp;lt;executable&gt;java&amp;lt;/executable&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As soon as I added this and tried to build after a mvn clean, the build failed without an obvious message why. Commenting out this plugin made the build succeed. Digging around showed that we have an other call to this plugin in the root pom. So there was some clash - but which?&lt;br /&gt;&lt;br /&gt;I thought "perhaps I need to include the execution from the root pom in mine as well (via copy&amp;paste). I did that and got an error message, that it is not possible to have two executions without an &amp;lt;id&gt; in a pom. So it turned out that both executions had the same implicit id - even while being in different poms, so one was overwriting the other.&lt;br /&gt;&lt;br /&gt;Now I have&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;           &amp;lt;execution&gt;&lt;br /&gt;              &lt;strong&gt;&amp;lt;id&gt;generate-tokens-xml&amp;lt;/id&gt;&lt;/strong&gt;&lt;br /&gt;              &amp;lt;!-- Generate tokens.xml file --&gt;&lt;br /&gt;               &amp;lt;phase&gt;install&amp;lt;/phase&gt;&lt;br /&gt;               &amp;lt;goals&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and everything is fine again.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-1094482916920683137?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/1094482916920683137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=1094482916920683137&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1094482916920683137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1094482916920683137'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/03/multiple-usage-of-maven-exec-plugin.html' title='Multiple usage of the maven exec plugin'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-2867522258790468026</id><published>2010-02-27T09:56:00.001+01:00</published><updated>2010-02-27T13:32:46.370+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Glassfish v3 - what's the deal to have Weld and REST?</title><content type='html'>&lt;strong&gt;&amp;lt;UPDATE&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;It turns out I did the right thing,  but obviously needed a few more mvn clean install cycles (or in other words I have no obvious clue why this consistently failed at the start&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&amp;lt;/UPDATE&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;---------------&lt;br /&gt;&lt;br /&gt;So I've been trying to write an app that uses CDI (Weld) and JAX-RS.&lt;br /&gt;As I want separate layers, I coded everything up to have a web.war, an ejb.jar and packaged everything together in an ear-file.&lt;br /&gt;&lt;br /&gt;I've coded a bean like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;@Stateless&lt;br /&gt;@Path("/xx")&lt;br /&gt;@Produces({MediaType.TEXT_PLAIN})&lt;br /&gt;@Named&lt;br /&gt;public class StatusManager  {&lt;br /&gt;&lt;br /&gt;   public String foo() {&lt;br /&gt;      ...&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now I can use it in a JSF like&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; &amp;lt;h:commandButton value="Submit!" action="#{statusManager.foo}"/&gt;&lt;/pre&gt;&lt;br /&gt;Works like a charm. &lt;br /&gt;&lt;br /&gt;When I try to accces the REST endpoint I get a "resource not found". Ok,&lt;br /&gt;so I add some stuff to web.xml:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;    &amp;lt;servlet&gt;&lt;br /&gt;        &amp;lt;servlet-name&gt;ServletAdaptor&amp;lt;/servlet-name&gt;&lt;br /&gt;        &amp;lt;servlet-class&gt;com.sun.jersey.spi.container.servlet.ServletContainer&amp;lt;/servlet-class&gt;&lt;br /&gt;        &amp;lt;load-on-startup&gt;1&amp;lt;/load-on-startup&gt;&lt;br /&gt;    &amp;lt;/servlet&gt;&lt;br /&gt;    &amp;lt;servlet-mapping&gt;&lt;br /&gt;        &amp;lt;servlet-name&gt;ServletAdaptor&amp;lt;/servlet-name&gt;&lt;br /&gt;        &amp;lt;url-pattern&gt;/xxx/*&amp;lt;/url-pattern&gt;&lt;br /&gt;    &amp;lt;/servlet-mapping&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now accessing the JAX-RS endpoint works like a charm, but the above JSF action breaks and the container shows the following in the logs:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Does anyone know what is going on and how to use both at a time?&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-2867522258790468026?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/2867522258790468026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=2867522258790468026&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2867522258790468026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/2867522258790468026'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/02/glassfish-v3-what-deal-to-have-weld-and.html' title='Glassfish v3 - what&amp;#39;s the deal to have Weld and REST?'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-4778049759028488855</id><published>2010-02-22T15:51:00.001+01:00</published><updated>2010-02-22T15:51:24.618+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>RHQ / Jopr tab sweep</title><content type='html'>Lot has happened since the last tab sweep ...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Releases&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;RHQ 3.0.0.B03&lt;/strong&gt; has been released. You can find more information on the &lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+3.0.0.B03"&gt;release notes page&lt;/a&gt; and the bits at &lt;a href="http://sourceforge.net/projects/rhq/"&gt;the download page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Videos&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;There are several new videos available:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Small FOSDEM review (&lt;a href="http://www.youtube.com/watch?v=gcb9rIfGD64"&gt;youtube&lt;/a&gt; , &lt;a href="http://www.pilhuhn.de/hwr/fosdem10/Fosdem-review.ogg"&gt;ogg&lt;/a&gt; )&lt;br /&gt;&lt;li&gt;How to write a(n agent) plugin (&lt;a href="http://www.youtube.com/watch?v=72KMYSvjdKY"&gt;youtube&lt;/a&gt; , ogg )&lt;br /&gt;&lt;li&gt;&lt;a href="http://video.fosdem.org/2010/devrooms/jboss/systems.management.with.rhq.and.jopr.ogg"&gt;Systemmanagement with RHQ talk&lt;/a&gt; at FOSDEM as .ogg and&lt;br /&gt;&lt;br /&gt;&lt;object style="height: 344px; width: 425px"&gt;&lt;param name="movie" value="http://www.youtube.com/v/qGTtERJ63xw"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/qGTtERJ63xw" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Galder has extended his &lt;a href="http://infinispan.org/"&gt;Infinispan&lt;/a&gt; and Jopr talk series and shows how to install Jopr and the Infinispan plugin and use it for monitoring. You can find &lt;a href="http://community.jboss.org/wiki/MonitoringInfinispanwithJopr#Flash_Movies"&gt;them in the Infinispan Wiki&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Talks&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I've been talking about RHQ at &lt;a href="http://fosdem.org/2010/"&gt;FOSDEM X&lt;/a&gt; - the talk was well received and its recording is finally online (see above).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Misc&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://noopenblockers.com/2010/02/17/spacewalk-0-8-released/"&gt;Spacewalk 0.8&lt;/a&gt; has been released.&lt;br /&gt;&lt;br /&gt;Joe Marques gives a tip about &lt;a href="feed://josephmarques.wordpress.com/feed/"&gt;automation in web development&lt;/a&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/6080082-4778049759028488855?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/4778049759028488855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=4778049759028488855&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4778049759028488855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4778049759028488855'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/02/rhq-jopr-tab-sweep_22.html' title='RHQ / Jopr tab sweep'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6442439051163720054</id><published>2010-02-22T09:41:00.001+01:00</published><updated>2010-02-22T11:45:26.600+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><title type='text'>Quote html for MarsEdit</title><content type='html'>&lt;img src="http://www.red-sweater.com/images/MarsEditBadge.gif" align="right"/&gt;&lt;br /&gt;&lt;br /&gt;I am using &lt;a href="http://www.red-sweater.com/marsedit/"&gt;MarsEdit&lt;/a&gt; to post my blog entries, which is a nice editor (ok, it could sometimes have a more wysiwig mode, but in total I am happy with it). &lt;br /&gt;&lt;br /&gt;One thing that I find often annoying or missing when writing posts is that there is no build in quotation mechanism for '&lt;' in a &amp;lt;pre&gt; block (many of my posts are rather technical and contain XML snippets).&lt;br /&gt;&lt;br /&gt;Luckily MarsEdit has AppleScript support, so I wrote this little AppleScript script (actually I copied a good part from the supplied &lt;em&gt;Add Paragraph Tags&lt;/em&gt; one):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;tell application "MarsEdit"&lt;br /&gt;  try&lt;br /&gt;	set currentWindow to document 1&lt;br /&gt;	on error errorMessage&lt;br /&gt;		displayErrorMessage("Can’t add paragraph tags because no post windows are open. This script works on text in the frontmost post window.") of me&lt;br /&gt;		return&lt;br /&gt;  end try&lt;br /&gt;	&lt;br /&gt;  set currentTextView to selected text in currentWindow&lt;br /&gt;  set numChars to number of (characters in currentTextView)&lt;br /&gt;  set newBodyText to ""&lt;br /&gt;	&lt;br /&gt;  repeat with i from 1 to numChars&lt;br /&gt;		&lt;br /&gt;    set currentChar to character i in currentTextView&lt;br /&gt;		&lt;br /&gt;    if (currentChar is "&lt;") then&lt;br /&gt;      set newBodyText to newBodyText &amp; "&amp;amp;lt;"&lt;br /&gt;    else&lt;br /&gt;      set newBodyText to newBodyText &amp; currentChar&lt;br /&gt;    end if&lt;br /&gt;  end repeat&lt;br /&gt;	&lt;br /&gt;  set (selected text in document 1) to newBodyText	&lt;br /&gt;end tell&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This allows to quote the current selection. Save the script to &lt;br /&gt;&lt;em&gt;~/Library/Application Support/MarsEdit/Scripts/Quote Html.scpt&lt;/em&gt;.&lt;br /&gt;It will then be availably in the ApppleScript Menu:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://lh4.ggpht.com/_OdJrfDwRKLM/S4JCagh_URI/AAAAAAAAANk/LYc0h5J77-0/Bildschirmfoto%202010-02-22%20um%2009.35.54.png?imgmax=800" alt="Bildschirmfoto 2010-02-22 um 09.35.54.png" border="0" width="281"  /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;To use it, just select the text and then invoke this &lt;em&gt;Quote Html&lt;/em&gt; menu item&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-6442439051163720054?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6442439051163720054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6442439051163720054&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6442439051163720054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6442439051163720054'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/02/quote-html-for-marsedit.html' title='Quote html for MarsEdit'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_OdJrfDwRKLM/S4JCagh_URI/AAAAAAAAANk/LYc0h5J77-0/s72-c/Bildschirmfoto%202010-02-22%20um%2009.35.54.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-4003454217536893981</id><published>2010-02-08T15:27:00.001+01:00</published><updated>2010-02-09T16:12:00.046+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Red Hat'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>Small FOSDEM 2010 round up (with pics and video)</title><content type='html'>So I've spent last weekend in Brussels, Belgium at FOSDEM, gave a talk, met with some colleagues and had a great time.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://fosdem.org/2010/sites/all/themes/fosdem/images/logofosdem2.jpg" title="FOSDEM logo"/&gt;&lt;br /&gt;&lt;br /&gt;Ok, this was a bit tense :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fosdem.org/2010/"&gt;FOSDEM 2010&lt;/a&gt; was the 10th incarnation of the &lt;strong&gt;F&lt;/strong&gt;ree and &lt;strong&gt;O&lt;/strong&gt;pen &lt;strong&gt;S&lt;/strong&gt;ource &lt;strong&gt;D&lt;/strong&gt;eveloper's &lt;strong&gt;E&lt;/strong&gt;uropean &lt;strong&gt;M&lt;/strong&gt;eeting. There have been thousands of geeks at the ULB (UNiveristé libre de Brussels) - exact numbers are not known as there has been no official registration. THere have been tweets about being around 2000 devices with IPv4 and close to 2000 devices with IPv&amp; active - this already shows the size of the audience. &lt;br /&gt;Despite this huge number of devices online, the network was great (FOSDEM had a 1GBit link to the internet) - wireless was available in nearly every room at good strength and performance On sunday morning they even encouraged people to use more bandwidth - many much more commercial conferences should talk to the FOSDEM NOC in order to learn how to do this.&lt;br /&gt;&lt;br /&gt;I arrived in Brussels on Saturday morning having taken an early train from Stuttgart - after Cologne I met the first two other guys heading to FOSDEM too :)&lt;br /&gt;&lt;br /&gt;Later on saturday I gave myself a talk about &lt;em&gt;Systemsmanagement with RHQ&lt;/em&gt;. &lt;a href="http://www.pilhuhn.de/hwr/fosdem10/FOSDEM10.pdf"&gt;Slides are available here&lt;/a&gt;.&lt;br/&gt;&lt;br /&gt;After my talk, my colleague Mark Procter gave a presentation about Drools. When my talk was over I felt very much relieved and was more able to attend other talks. I wanted to attend some Postgres related ones, but they were already crowded.&lt;br /&gt;&lt;br /&gt;One of the/my highlights was the talk by Andy S. Tanenbaum about Minix 3 - he presented with a good sense of humor, so it was nice to listen. His talk actually made me want to do some low-level stuff hacking again (I used to work on NetBSD in the past). Later on I was sitting in the &lt;em&gt;Free Java&lt;/em&gt; track and was thinking that I should perhaps also start hacking on the VM. Lukily for me I did not attend all talks. Otherwise I'd probably end up with programming Drupal in Assembler for one of those little embedded boards I that the OpenEmbedded guys had on display :-)&lt;br /&gt;&lt;br /&gt;On Sunday Dave Fetter from Postgres showed on Sunday how to compute Mandelbrot sets and solve the Traveling Salesman Problem in SQL on Postgres - totally crazy! :)&lt;br /&gt;&lt;br /&gt;After this I have been in the Free Java dev room and met some colleagues from Red Hat, working in that area - it is always nice to finally be able to put a face behind a name.&lt;br /&gt;&lt;br /&gt;Below are a few impressions from Fosdem and Brussels - enjoy (I will fix the image orientation as soon as I know how ... ). More pictures are e.g. on &lt;a href="http://www.flickr.com/photos/45838639@N04/sets/72157623238657843/"&gt;Flickr&lt;/a&gt;, &lt;a href="http://www.flickr.com/photos/laurentvanwinckel/sets/72157623241062011/"&gt;here&lt;/a&gt; and &lt;a href="http://fedora.nicubunu.ro/photos/fosdem2010/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Below movie is also &lt;a href="http://www.pilhuhn.de/hwr/fosdem10/Fosdem-review.ogg"&gt;available as .ogg version&lt;/a&gt; (79 MB).&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/gcb9rIfGD64&amp;hl=de_DE&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/gcb9rIfGD64&amp;hl=de_DE&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pilhuhn.de/hwr/fosdem10/IMG_3433_klein.JPG"&gt;&lt;img src="http://www.pilhuhn.de/hwr/fosdem10/IMG_3433_klein.JPG" width="300"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pilhuhn.de/hwr/fosdem10/IMG_3435_klein.JPG"&gt;&lt;img src="http://www.pilhuhn.de/hwr/fosdem10/IMG_3435_klein.JPG" width="300"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pilhuhn.de/hwr/fosdem10/IMG_3436_klein.JPG"&gt;&lt;img src="http://www.pilhuhn.de/hwr/fosdem10/IMG_3436_klein.JPG" width="300"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pilhuhn.de/hwr/fosdem10/IMG_3438_klein.JPG"&gt;&lt;img src="http://www.pilhuhn.de/hwr/fosdem10/IMG_3438_klein.JPG" width="300"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pilhuhn.de/hwr/fosdem10/IMG_3441_klein.JPG"&gt;&lt;img src="http://www.pilhuhn.de/hwr/fosdem10/IMG_3441_klein.JPG" width="300"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pilhuhn.de/hwr/fosdem10/IMG_3459_klein.JPG"&gt;&lt;img src="http://www.pilhuhn.de/hwr/fosdem10/IMG_3459_klein.JPG" width="300"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pilhuhn.de/hwr/fosdem10/IMG_3463_klein.JPG"&gt;&lt;img src="http://www.pilhuhn.de/hwr/fosdem10/IMG_3463_klein.JPG" width="300"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pilhuhn.de/hwr/fosdem10/IMG_3468_klein.JPG"&gt;&lt;img src="http://www.pilhuhn.de/hwr/fosdem10/IMG_3468_klein.JPG" width="300"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pilhuhn.de/hwr/fosdem10/IMG_3469_klein.JPG"&gt;&lt;img src="http://www.pilhuhn.de/hwr/fosdem10/IMG_3469_klein.JPG" width="300"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pilhuhn.de/hwr/fosdem10/IMG_3471_klein.JPG"&gt;&lt;img src="http://www.pilhuhn.de/hwr/fosdem10/IMG_3471_klein.JPG" width="300"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pilhuhn.de/hwr/fosdem10/IMG_3472_klein.JPG"&gt;&lt;img src="http://www.pilhuhn.de/hwr/fosdem10/IMG_3472_klein.JPG" width="300"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&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/6080082-4003454217536893981?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/4003454217536893981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=4003454217536893981&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4003454217536893981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/4003454217536893981'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/02/small-fosdem-2010-round-up-with-pics.html' title='Small FOSDEM 2010 round up (with pics and video)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-5941788928018999828</id><published>2010-02-04T12:54:00.001+01:00</published><updated>2010-02-04T12:54:23.483+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>RHQ / Jopr tab sweep</title><content type='html'>&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Releases&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javablogs.com/Jump.action?id=555597"&gt;RHQ 3.0.0.b02 has been released&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Web articles&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;We have set up a page that &lt;a href="http://support.rhq-project.org/display/RHQ/In+use"&gt;lists third party plugins and also usages of Jopr and RHQ&lt;/a&gt; - if you want to be listed here, contact us&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Marek Goldmann has written a blog post, where he shows how CirrAS uses RHQ for management of servers in the cloud. This post especially talks about using the &lt;a href="http://cloudpress.org/2010/01/29/rhq-cli-configuring-and-importing-resources/"&gt;RHQ CLI to import and configure resources&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Mazz also refers to this in his latest &lt;a href="http://management-platform.blogspot.com/2010/02/monitoring-jbossas-clusters-with-rhq.html"&gt;blog entry&lt;/a&gt;. In another post he describes how to &lt;a href="http://management-platform.blogspot.com/2010/01/java-decompiler-for-java5-and-6-jad.html"&gt;install the JD java decompiler&lt;/a&gt;, which also understands generics unlike the outdated (but often used) jad.&lt;br /&gt;&lt;br /&gt;My (German) article "Polyglotte Bohnen" on &lt;a href="http://jcp.org/en/jsr/detail?id=223"&gt;JSR 223&lt;/a&gt; usage at the example of &lt;a href="http://www.jruby.org/"&gt;JRuby&lt;/a&gt; got published at &lt;a href="http://www.heise.de/developer/artikel/Java-6-Scripting-mit-JRuby-920124.html"&gt;Heise Developer&lt;/a&gt;. JSR 223 is in usage in a few places within RHQ: CLI, script2 alert plugin and scriptlang alert sender plugin (and probably others).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Talks&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.fosdem.org/promo/going-to" alt="I'm going to FOSDEM, the Free and Open Source Software Developers' European Meeting" /&gt;&lt;br /&gt;&lt;br /&gt;I will &lt;a href="http://javablogs.com/Jump.action?id=553463"&gt;talk about RHQ&lt;/a&gt; at &lt;a href="http://fosdem.org/2010/"&gt;FOSDEM&lt;/a&gt;. There will be other people from Red Hat, as well as many other interesting talks.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-5941788928018999828?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/5941788928018999828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=5941788928018999828&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5941788928018999828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5941788928018999828'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/02/rhq-jopr-tab-sweep.html' title='RHQ / Jopr tab sweep'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-771839528533656711</id><published>2010-02-03T21:59:00.001+01:00</published><updated>2010-02-03T21:59:59.508+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>RESTEasy client : authentication</title><content type='html'>Was just playing with &lt;a href="http://www.jboss.org/resteasy"&gt;RESTEasy&lt;/a&gt; and needed to do authentication against the server.&lt;br /&gt;Came up with this solution:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  String userId = "myName";&lt;br /&gt;  String password = "verySecret";&lt;br /&gt;&amp;nbsp;&lt;br /&gt;  Credentials credentials = new UsernamePasswordCredentials(userId, password);&lt;br /&gt;   HttpClient httpClient = new HttpClient();&lt;br /&gt;   httpClient.getState().setCredentials(AuthScope.ANY, credentials);&lt;br /&gt;   httpClient.getParams().setAuthenticationPreemptive(true);&lt;br /&gt;&amp;nbsp;    &lt;br /&gt;   ClientExecutor clientExecutor = new ApacheHttpClientExecutor(httpClient);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;   try {&lt;br /&gt;     URI uri = new URI("http://.....");&lt;br /&gt;     ClientRequestFactory fac = new ClientRequestFactory(clientExecutor,uri); &lt;br /&gt;&amp;nbsp;&lt;br /&gt;     ClientRequest request = fac.createRequest("http://.....);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I don't know if there is a better way, as there are a lot of steps to do here. Just thought I should share as documentation is a little sparse here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-771839528533656711?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/771839528533656711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=771839528533656711&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/771839528533656711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/771839528533656711'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/02/resteasy-client-authentication.html' title='RESTEasy client : authentication'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-125250373764133432</id><published>2010-02-02T09:37:00.001+01:00</published><updated>2010-02-02T10:10:57.691+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>RHQ 3.0.0.b02 released - includes Jopr</title><content type='html'>We are proud to announce the release of RHQ 3.0.0.b02. Like the 1.4.0.B01 release, this is a developer preview and &lt;strong&gt;not intended for production&lt;/strong&gt;. As with the previous release, this includes the Jopr bits, which now also live in the combined &lt;a href="http://git.fedorahosted.org/git/rhq/rht.git?p=rhq/rhq.git;a=summary"&gt;RHQ source repository&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You may wonder about the jump in the major release number. Well, first of all, the next release will be a big jump forward for the project, so a new major number is appropriate. And then, there is a very practical reason too: as I've already &lt;a href="http://javablogs.com/Jump.action?id=546521"&gt;written earlier&lt;/a&gt;, the download not only contains the RHQ bits, but also the Jopr bits, which creates some confusion in the install / upgrade process, as the Jopr bits, which in the last Jopr-release were named xy-plugin-2.3.1, in 1.4.0.B01 they were suddenly xy-plugin-1.4.0.b01. The RHQ installer assumes that plugin versions are increasing and thus is considering the Jopr plugins in 1.4.0.B01 as older.&lt;br /&gt;We could have hacked around this, but just increasing the major number solves this issue in a very natural way.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;New Features:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Some French installer messages contributed by Victor Montaner&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Alerting&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Much improved UI for the new alert sender plugins&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Alert definition UI partly moved from JSF to struts&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Improved alert senders for microblog and snmp&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It is now possible to define templates of alert notifications that contain a bundle of senders that can be reused to create notifications for alert definitions. See menu "&lt;em&gt;Administration -&gt; Settings -&gt; Alert Notification Templates&lt;/em&gt;"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Alert migration: the datamodel for alerts has changed an needs migration. See the &lt;a href="http://git.fedorahosted.org/git/rhq/rht.git?p=rhq/rhq.git;a=blob;f=modules/enterprise/gui/alert-migration/README.txt"&gt;README&lt;/a&gt; for a how to&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; alert senders for Subject, Roles and Operation are not in this release - they will come back soon&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;Raw configuration support: It is now possible to edit the raw text of configuration files and not only the structural view of them. This includes validation and rollback&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Operations for server side plugins: it is now possible to define operations on server side plugins, that can be triggered through the alert plugin gui (&lt;em&gt;Administration -&gt; System Configuration -&gt; Plugins -&gt; Server Plugins&lt;/em&gt;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cosmetical changes in the left nav tree&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Have a look at the &lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+3.0.0.B02"&gt;full release notes&lt;/a&gt; for more details.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Download:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You can download this release from SourceForge at&lt;br /&gt;&lt;br /&gt;&lt;a href="https://sourceforge.net/projects/rhq/files/rhq/rhq-3.0.0.B02/"&gt;https://sourceforge.net/projects/rhq/files/rhq/rhq-3.0.0.B02/&lt;/a&gt;. There is an agent download as well, but you don't need to download this, as the agent is contained in the server download already.&lt;br /&gt;&lt;br /&gt;The source for the community release can be found in the &lt;a href="http://git.fedorahosted.org/git/rhq/rht.git?p=rhq/rhq.git;a=shortlog;h=refs/heads/release-3.0.0.B02"&gt;3.0.0.b02 branch in RHQ git&lt;/a&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/6080082-125250373764133432?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/125250373764133432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=125250373764133432&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/125250373764133432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/125250373764133432'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/02/rhq-300b02-released-includes-jopr.html' title='RHQ 3.0.0.b02 released - includes Jopr'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-8120667689928001711</id><published>2010-01-21T16:43:00.001+01:00</published><updated>2010-01-27T10:32:46.074+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>JBoss talks at FOSDEM 2010</title><content type='html'>&lt;a href="http://www.fosdem.org"&gt;&lt;img src="http://www.fosdem.org/promo/fosdem" alt="FOSDEM, the Free and Open Source Software Developers' European Meeting" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I will talk at &lt;a href="http://www.fosdem.org/2010/"&gt;FOSDEM 2010&lt;/a&gt; in Brussels &lt;a href="http://www.fosdem.org/2010/schedule/events/jboss_jopr"&gt;about RHQ and Jopr&lt;/a&gt;. (Sat, 3pm)&lt;br /&gt;&lt;br /&gt;There are actually other &lt;a href="http://www.fosdem.org/2010/schedule/devrooms/jboss"&gt;JBoss-related talks too&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.jboss.org/drools/"&gt;Drools&lt;/a&gt; by &lt;a href="http://markproctor.com/"&gt;Mark Procter&lt;/a&gt; (Sat, 4pm)&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.mobicents.org/"&gt;Mobicents&lt;/a&gt; by Sabri Skhiri (Sat, 5pm)&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.jboss.org/jbossesb/"&gt;JBoss ESB&lt;/a&gt; by Yoeri Roels (Sat 6pm)&lt;br /&gt;&lt;li&gt;and one supposedly about jBPM by Falko Menge (Sat 3pm)&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Of course, there are lots of other interesting talks at Fosdem (some would say: too many):&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.fosdem.org/2010/schedule/events/dist_spacewalk"&gt;Spacewalk&lt;/a&gt;, Linux lifecycle management&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.fosdem.org/2010/schedule/devrooms/freejava"&gt;Free Java&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.fosdem.org/2010/schedule/events/systemtap"&gt;Full system observability with System Tap&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.fosdem.org/2010/schedule/tracks/gnustep"&gt;Gnustep&lt;/a&gt; for all of us NeXTStep fans&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;And much much more.&lt;br /&gt;&lt;br /&gt;For iPhone users there is an &lt;a href="http://itunes.apple.com/us/app/fosdem/id348862089?mt=8&amp;uo=6"&gt;application available&lt;/a&gt; that holds the whole schedule, can inform you what is running now and next and can hold your favorites&lt;br /&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-8120667689928001711?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/8120667689928001711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=8120667689928001711&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8120667689928001711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8120667689928001711'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/01/jboss-talks-at-fosdem-2010.html' title='JBoss talks at FOSDEM 2010'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-8225217886552019383</id><published>2010-01-18T20:19:00.001+01:00</published><updated>2010-01-18T20:26:50.390+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>RHQ / Jopr tab sweep</title><content type='html'>&lt;center&gt;&lt;br /&gt;&lt;a href="http://www.redhat.com/promo/summit/2010/"&gt;&lt;img src="http://www.redhat.com/promo/summit/2010/images/rh_summit2010_header.png"/&gt;&lt;/a&gt;&lt;p/&gt;&lt;br /&gt;&lt;a href="http://www.redhat.com/promo/summit/2010/callforpapers/"&gt;Call for papers&lt;/a&gt; for &lt;a href="http://www.redhat.com/promo/summit/2010/"&gt;JBoss World 2010&lt;/a&gt; in Boston&lt;br/&gt;&lt;br /&gt;ends on January 22th - be sure to &lt;strong&gt;submit a talk&lt;/strong&gt; about Jopr or RHQ!&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Other news:&lt;br /&gt;&lt;br /&gt;Mazz has updated the Byteman plugin for RHQ see &lt;a href="http://management-platform.blogspot.com/2010/01/byteman-plugin-revisited.html"&gt;http://management-platform.blogspot.com/2010/01/byteman-plugin-revisited.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://amitbhayani.blogspot.com/2010/01/mobicents-jain-slee-server-2x-unites-in.html"&gt;Mobicents JAIN SLEE server 2.x does now also support management via Jopr / RHQ&lt;/a&gt; (via Amit Bhayani).&lt;br /&gt;&lt;br /&gt;We've got some French translations for Installer messages in - those have been provided &lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=RHQ-5"&gt;by Victor Montaner long time ago&lt;/a&gt;.  If you want to help translating the messages into other languages, feel free to ping me or any other team member.&lt;br /&gt;&lt;br /&gt;Speaking of participating: &lt;a href="http://support.rhq-project.org/display/RHQ/Contributions"&gt;this wiki page&lt;/a&gt; contains a list of hints about contributing to RHQ.&lt;br /&gt;&lt;br /&gt;RHQ Mastermind Greg Hinkle has written &lt;a href="http://www.jroller.com/ghinkle/entry/autocomplete_and_the_rhq_cli"&gt;a longer blog post&lt;/a&gt; about autocompletion in the &lt;a href="http://support.rhq-project.org/display/JOPR2/Running+the+RHQ+CLI"&gt;RHQ Command line interface&lt;/a&gt; (CLI).&lt;br /&gt;&lt;br /&gt;I will talk at &lt;a href="http://fosdem.org/2010/"&gt;FOSDEM 2010&lt;/a&gt; in Brussels about Jopr and RHQ. FOSDEM is one of the largest open source conferences in Europe (5000 attendees expected). Have a look at the &lt;a href="http://fosdem.org/2010/schedule/devrooms/jboss"&gt;JBoss developer room page&lt;/a&gt; for the exact schedule (as soon as it is published). And the best: admission is free!&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://www.fosdem.org"&gt;&lt;img src="http://www.fosdem.org/promo/fosdem" alt="FOSDEM, the Free and Open Source Software Developers' European Meeting" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-8225217886552019383?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/8225217886552019383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=8225217886552019383&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8225217886552019383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/8225217886552019383'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/01/rhq-jopr-tab-sweep.html' title='RHQ / Jopr tab sweep'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6007741442417848125</id><published>2010-01-10T18:53:00.001+01:00</published><updated>2010-01-10T18:53:23.188+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='running'/><title type='text'>Laufen mit Daisy (German)</title><content type='html'>Seit Freitag hat uns Tief Daisy fest im Griff und dementsprechend ist alles weiß. Hier im Süden ist es nicht so tragisch, wie beispielsweise in Brandenburg. Ich bin dann heute nachmittag doch noch aufgebrochen und eine Runde gelaufen. Es ist interessant wie viele Gehwege nicht geräumt sind, obwohl doch Räumpflicht besteht (nicht dass ich auf die Räumung bestehen würde). Laufen auf Schnee war ja ganz ok, aber im lockeren, mehrfach von Autos oder Fußgänger durchpflügten Schnee ist es ganz schön anstrengend. Deswegen war ich &lt;a href="http://www.gpsies.com/map.do?url=http://web.me.com/pilhuhn/trailrunner/6P3.gpx"&gt;auf den 12km&lt;/a&gt; dann auch eher langsam unterwegs. Spaß gemacht hat es trotzdem :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-6007741442417848125?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6007741442417848125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6007741442417848125&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6007741442417848125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6007741442417848125'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2010/01/laufen-mit-daisy-german.html' title='Laufen mit Daisy (German)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-908301100769455348</id><published>2009-12-30T15:58:00.001+01:00</published><updated>2010-01-14T15:30:07.877+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='running'/><title type='text'>Laufen 2009 / 2010 (German)</title><content type='html'>Das Jahr neigt sich dem Ende zu; Zeit für einen Jahresrückblick: ich habe beide gesteckten Laufziele gut geschafft:&lt;br /&gt;&lt;br /&gt;- Stuttgart-Lauf ankommen. Ich habe das Ziel dann zweimal hochgesetzt. Erst auf unter 2:30h und dann auf unter 2:15h. Letztlich &lt;a href="http://pilhuhn.blogspot.com/2009/06/stuttgart-lauf.html"&gt;war es dann besser&lt;/a&gt; :-)&lt;br /&gt;&lt;br /&gt;- Mehr als 750km laufen - das habe ich mit 792km auch gut hinbekommen - wenngleich ich im Dezember nochmals richtig Gas geben musste&lt;br /&gt;&lt;table align="center"&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Einheiten&lt;/td&gt;&lt;td&gt;75&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Distanz&lt;/td&gt;&lt;td&gt;792,23 km&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Distanz pro Einheit Ø&lt;/td&gt;&lt;td&gt;10,56 km&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Pace Ø&lt;/td&gt;&lt;td&gt;5:55 min/km&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Geschwindigkeit Ø&lt;/td&gt;&lt;td&gt;10,14 km/h&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Fitness&lt;/td&gt;&lt;td&gt;46 (37-45)&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Puls Ø / Max&lt;/td&gt;&lt;td&gt;159/191&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Kalorien&lt;/td&gt;&lt;td&gt;62237&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;Bester Monat war der Dezember mit 135km&lt;br /&gt;&lt;br /&gt;Läufe an "exotischen" Plätzen:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.gpsies.com/map.do?url=http://web.me.com/pilhuhn/trailrunner/7DXCER.gpx"&gt;Chicago&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.gpsies.com/map.do?url=http://web.me.com/pilhuhn/trailrunner/6DXCER.gpx"&gt;Mt Laurel, USA&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.gpsies.com/map.do?url=http://web.me.com/pilhuhn/trailrunner/Y6LLE.gpx"&gt;Rosolina Mare, Italien&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.gpsies.com/map.do?url=http://web.me.com/pilhuhn/trailrunner/J7KDER.gpx"&gt;Raleigh, NC, USA&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Ziele für 2010&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;- Stuttgart-Lauf schneller als 2009 (also unter 1:59:04) - wenn das Wetter mitspielt und ich nicht krank bin&lt;br /&gt;&lt;br /&gt;- 900 Laufkilometer&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-908301100769455348?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/908301100769455348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=908301100769455348&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/908301100769455348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/908301100769455348'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2009/12/laufen-2009-2010-german.html' title='Laufen 2009 / 2010 (German)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6919318225791665280</id><published>2009-12-21T11:40:00.001+01:00</published><updated>2009-12-21T11:40:57.650+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>RHQ / Jopr tab sweep</title><content type='html'>This post is to gather a few of the recent developments around &lt;a href="http://www.rhq-project.org/"&gt;RHQ&lt;/a&gt; and Jopr&lt;br /&gt;&lt;br /&gt;Just in case you have missed it: &lt;a href="http://javablogs.com/Jump.action?id=546521"&gt;RHQ 1.4.0.B01 is out&lt;/a&gt; - this build contains the Jopr plugins and thus is the successor of the Jopr-server builds that you have seen before. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Mailing lists:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;We have opened two mailing lists for RHQ where we expect to bundle the email activities in the future: &lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="https://fedorahosted.org/mailman/listinfo/rhq-users"&gt;rhq-users&lt;/a&gt;: for user questions around RHQ (including the Jopr plugins&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="https://fedorahosted.org/mailman/listinfo/rhq-devel"&gt;rhq-devel&lt;/a&gt;: for developing with and on RHQ&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Video:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://galder.zamarreno.com/"&gt;Galder Zamarenno&lt;/a&gt; from &lt;a href="http://infinispan.org/"&gt;Infinispan&lt;/a&gt; has created a &lt;a href="http://infinispan.blogspot.com/2009/12/new-video-demo-monitoring-infinispan.html"&gt;video showing a three-node Infinispan cluster being monitored&lt;/a&gt;. It demonstrates graphical measurements, and non-graphical information of running Infinispan instances, addition or removal of monitored metrics and finally, execution of management operations on a Infinispan instance.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://management-platform.blogspot.com/"&gt;Mazz&lt;/a&gt; has created a &lt;a href="http://rhq-project.org/display/JOPR2/Demo-ServerPlugin-SimpleReports"&gt;demo on how to use the new server side plugins to periodically create reports on the server&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Alert senders:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Alert notifications can now be processed by plugins. This means that it is finally possible to easily write own notification schemes to forward alerts to various devices. Two posts show how to write such a sender (&lt;a href="http://javablogs.com/Jump.action?id=547110"&gt;Part 1&lt;/a&gt; &amp; &lt;a href="http://javablogs.com/Jump.action?id=547513"&gt;Part 2&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Agent plugins:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;A new agent plugin allows to use &lt;a href="http://support.rhq-project.org/display/RHQ/2009/12/08/New+experimental+%28Ruby%29+script+plugin"&gt;script in Ruby and JavaScript&lt;/a&gt; to do monitoring. This allows to easily monitor resources via dynamic scripting languages without writing Java code.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-6919318225791665280?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6919318225791665280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6919318225791665280&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6919318225791665280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6919318225791665280'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2009/12/rhq-jopr-tab-sweep.html' title='RHQ / Jopr tab sweep'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6089719408343236018</id><published>2009-12-15T21:47:00.001+01:00</published><updated>2009-12-15T21:47:37.457+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>How to write an alert sender plugin for RHQ/Jopr (Part 2)</title><content type='html'>Now that we have seen the &lt;a href="http://javablogs.com/Jump.action?id=547110"&gt;"theoretical side" of writing an alert sender&lt;/a&gt;, lets just start and code one up.&lt;br /&gt;&lt;br /&gt;First grab RHQ from &lt;a href="http://git.fedorahosted.org/git/rhq/rht.git?p=rhq/rhq.git;a=summary"&gt;GIT&lt;/a&gt; and then change into&lt;br /&gt;&lt;code&gt;modules/enterprise/server/plugins&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Run this little script:&lt;pre&gt;&lt;br /&gt;mkdir alert-url &lt;br /&gt;cd alert-url&lt;br /&gt;mkdir -p src/main/java/org/rhq/enterprise/server/plugins/alertUrl&lt;br /&gt;mkdir -p src/main/resources/META-INF&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;copy over the pom.xml from alert-email and change email to url in it:&lt;br/&gt;&lt;br /&gt;&lt;pre&gt;cp ../alert-email/pom.xml pom.xml,1&lt;br /&gt;sed -e 's/email/url/' &lt; pom.xml,1 &gt; pom.xml&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;Lets edit the plugin descriptor&lt;br/&gt;&lt;br /&gt;&lt;code&gt;vi src/main/resources/META-INF/rhq-serverplugin.xml&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;alert-plugin&lt;br /&gt;        name="alert-url"&lt;br /&gt;        displayName="Alert:Url"&lt;br /&gt;        xmlns="urn:xmlns:rhq-serverplugin.alert"&lt;br /&gt;        xmlns:c="urn:xmlns:rhq-configuration"&lt;br /&gt;        xmlns:serverplugin="urn:xmlns:rhq-serverplugin"&lt;br /&gt;        package="org.rhq.enterprise.server.plugins.alertUrl"&lt;br /&gt;        description="Alert sender plugin"&lt;br /&gt;        version="1.0"&lt;br /&gt;        &gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This is just the generic header. Now lets set the target host name on the server-wide preferences and &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;serverplugin:plugin-configuration&gt;&lt;br /&gt;        &amp;lt;c:simple-property name="hostName" &lt;br /&gt;                           default="localhost" /&gt;&lt;br /&gt;    &amp;lt;/serverplugin:plugin-configuration&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now the name of the sender and its alert sender class&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;short-name&gt;Url&amp;lt;/short-name&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    &amp;lt;!-- Class that does the actual sending --&gt;&lt;br /&gt;    &amp;lt;plugin-class&gt;UrlSender&amp;lt;/plugin-class&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And now finally the Information that is specific to an alert definition. Lets just set the port here for demonstation purposes.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;alert-configuration&gt;&lt;br /&gt;        &amp;lt;c:simple-property name="port" type="integer"/&gt;&lt;br /&gt;    &amp;lt;/alert-configuration&gt;&lt;br /&gt;&amp;lt;/alert-plugin&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;Now lets implement the Java sender class&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ cd src/main/java/org/rhq/enterprise/server/plugins/alertUrl&lt;br /&gt;$ vi UrlSender.java&lt;br /&gt;&lt;br /&gt;package org.rhq.enterprise.server.plugins.alertUrl;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;import java.io.OutputStream;&lt;br /&gt;import java.net.HttpURLConnection;&lt;br /&gt;import java.net.URL;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;import org.apache.commons.logging.Log;&lt;br /&gt;import org.apache.commons.logging.LogFactory;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;import org.rhq.core.domain.alert.Alert;&lt;br /&gt;import org.rhq.enterprise.server.alert.AlertManagerLocal;&lt;br /&gt;import org.rhq.enterprise.server.plugin.pc.alert.AlertSender;&lt;br /&gt;import org.rhq.enterprise.server.plugin.pc.alert.ResultState;&lt;br /&gt;import org.rhq.enterprise.server.plugin.pc.alert.SenderResult;&lt;br /&gt;import org.rhq.enterprise.server.util.LookupUtil;&lt;br /&gt;import org.rhq.enterprise.server.xmlschema.generated.serverplugin.perspective.ResourceTaskElement;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;public class UrlSender extends AlertSender{&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    @Override&lt;br /&gt;    public SenderResult send(Alert alert) {&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So this was just the bolier plate code - now lets get the work done by first getting our data that the user entered in the UI&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        String hostname = preferences.getSimpleValue("hostname","localhost");&lt;br /&gt;        String portS = alertParameters.getSimpleValue("port","80");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then construct an URL and URL connection&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        HttpURLConnection conn = null;&lt;br /&gt;        try {&lt;br /&gt;            URL url = new URL("http://" + hostname + ":" + portS);&lt;br /&gt;            conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;            conn.setRequestMethod("POST");&lt;br /&gt;            conn.setDoOutput(true);&lt;br /&gt;            conn.setDoInput(true);&lt;br /&gt;            OutputStream out = conn.getOutputStream();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then we get the message together - you see, you can even call into the EJB layer to get things done - and send it off.&lt;br /&gt;&lt;pre&gt;     &lt;br /&gt;            AlertManagerLocal alertManager = LookupUtil.getAlertManager();&lt;br /&gt;            StringBuilder b = new StringBuilder("Alert: '");&lt;br /&gt;            b.append(alert.getAlertDefinition().getResource().getName());&lt;br /&gt;            b.append("' (");&lt;br /&gt;            b.append(alert.getAlertDefinition().getResource().getId());&lt;br /&gt;            b.append("): ");&lt;br /&gt;            b.append(alertManager.prettyPrintAlertConditions(alert));&lt;br /&gt;&amp;nbsp;&lt;br /&gt;            out.write(b.toString().getBytes());&lt;br /&gt;            out.flush();&lt;br /&gt;            conn.connect();&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            return new SenderResult(ResultState.FAILURE,"Sending failed " + e.getMessage());&lt;br /&gt;        }&lt;br /&gt;        finally {&lt;br /&gt;            if (conn!=null)&lt;br /&gt;                conn.disconnect();&lt;br /&gt;        }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;        return new SenderResult(ResultState.SUCCESS,"Sending to " + hostname + ":" + portS + " worked");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;After this was done, we return our operation result in a new &lt;code&gt;SenderResult&lt;/code&gt; object - that's all.&lt;br /&gt;&lt;br /&gt;Now just change back to the root directory (the one with the pom.xml file) and fire "mvn install". This leaves you with a jar archive in target/ that you can then deploy into a (running) server:&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Deploying the plugin&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;You can deploy the plugin in three ways, where the first one is probably the best, when developing such a plugin:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;run &lt;code&gt;mvn install&lt;/code&gt; above with option &lt;code&gt;-Pdev&lt;/code&gt; - this will automatically deploy into the development containter&lt;br /&gt;&lt;li&gt;copy the plugin manually into the &lt;em&gt;dropbox&lt;/em&gt; at &lt;code&gt;$RHQ_SERVER/&lt;/code&gt;plugins (that directory is in parallel to &lt;code&gt;bin/&lt;/code&gt; and &lt;code&gt;jbossas/&lt;/code&gt; )&lt;br /&gt;&lt;li&gt;Deploy via GUI: &lt;br/&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Go to the plugins page&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://lh4.ggpht.com/_OdJrfDwRKLM/SyfsNlQ-9HI/AAAAAAAAAL8/-bC-yZnvjNs/Bildschirmfoto%202009-12-15%20um%2021.00.37.png?imgmax=800" alt="Bildschirmfoto 2009-12-15 um 21.00.37.png" border="0" width="311"  /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;and select server plugins at the top tab&lt;br /&gt;&lt;li&gt;Scroll down to the upload box, select add, select the plugin in the open dialog and then when done, click on "upload".&lt;br /&gt;&lt;li&gt;Press "scan for updates" at the bottom of the plugin list above - it should now show up in the list of plugins&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h3&gt;Configuring it&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Click on "Alert:Url" in the list of plugins. This will bring you to the plugin details. And then on "Configure Alert:Url" (configuring could also happen from the Administration-&gt;System Configuration-&gt;Settings menu).&lt;br /&gt;&lt;br /&gt;You will see a list of plugins where the Alert:Url one is selected on the left and the current site wide preferences on the right:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://lh4.ggpht.com/_OdJrfDwRKLM/Syf0sg66qAI/AAAAAAAAAMA/Np_6Wh2cSSQ/Bildschirmfoto%202009-12-15%20um%2021.41.18.png?imgmax=800" alt="Bildschirmfoto 2009-12-15 um 21.41.18.png" border="0" width="400"  /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;If you click on Edit, you can edit the host to some other value than the default.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Using it in an alert definition&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Go to the usual screen for alert definitions of a resource - in the preliminary gui, there is a link &lt;em&gt;To Alert sender plugins&lt;/em&gt;; click it.&lt;br /&gt;&lt;br /&gt;You will come to a screen with a drop down - select Url from it&lt;br/&gt;&lt;br /&gt;&lt;strong&gt;THIS UI IS CURRENTLY WORK IN PROGRESS&lt;/strong&gt;&lt;br/&gt;&lt;br /&gt;Click on "Go" and then in the configuration enter the port number to use. Click on "submit it".&lt;br /&gt;&lt;br /&gt;Done&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Congratulations&lt;/h3&gt;&lt;br /&gt;you have just written and deployed your first alert sender plugin for RHQ and Jopr&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/6080082-6089719408343236018?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6089719408343236018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6089719408343236018&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6089719408343236018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6089719408343236018'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2009/12/how-to-write-alert-sender-plugin-for_15.html' title='How to write an alert sender plugin for RHQ/Jopr (Part 2)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_OdJrfDwRKLM/SyfsNlQ-9HI/AAAAAAAAAL8/-bC-yZnvjNs/s72-c/Bildschirmfoto%202009-12-15%20um%2021.00.37.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-6725092624990203405</id><published>2009-12-14T10:43:00.001+01:00</published><updated>2009-12-16T15:58:09.021+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>How to write an alert sender plugin for RHQ/Jopr (Part 1)</title><content type='html'>Now that &lt;a href="http://javablogs.com/Jump.action?id=546521"&gt;RHQ 1.4.0-B01 is out&lt;/a&gt;, it is time to show you how you can easily write your own alert notification mechanism and plug it into RHQ (see also "&lt;a href="http://javablogs.com/Jump.action?id=543098"&gt;RHQ and the future of alerts&lt;/a&gt;").&lt;br /&gt;&lt;br /&gt;As an example we'll use a sender that will use a http-POST request to a remote host where the body of the request will contain the alert message (like the one you know from the existing email-sender).&lt;br /&gt;&lt;br /&gt;But before we do this, I'll show you the bits involved, so that the source code is easier to understand.&lt;br /&gt;&lt;br /&gt;In order to write the plugin you need two things at least:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;plugin descriptor&lt;/li&gt;&lt;br /&gt;&lt;li&gt;a sender class&lt;/lI&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Sometimes you also want to implement a component class (more later).&lt;br /&gt;&lt;br /&gt;So lets have a look at them in turn:&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Plugin descriptor&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;The structure of the plugin descriptor, &lt;code&gt;rhq-serverplugin.xml&lt;/code&gt;, looks like this:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://lh3.ggpht.com/_OdJrfDwRKLM/SyK0cZYbRcI/AAAAAAAAAL0/SwTPMwl0GIM/rhq-serverplugin-alert.png?imgmax=800" alt="rhq-serverplugin-alert.png" border="0" width="400"  /&gt;&lt;/div&gt;&lt;br/&gt;&lt;br /&gt;It follows the schema definition in &lt;code&gt;rhq-serverplugin-alert.xsd&lt;/code&gt;.&lt;br /&gt;Elements in it are the following. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;alert-plugin: This is the parent element for the whole descriptor. It contains the following attributes, which are all taken from the general server plugin descriptor:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;name&lt;/code&gt;: name of the plugin&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;displayName&lt;/code&gt;: name of the plugin as it shows up in the UI&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;package&lt;/code&gt;: the package of the plugin. Is used to determine the fully qualified class name if it contains no package. Within RHQ, there is a naming convention of &lt;em&gt;Alert:medium&lt;/em&gt; for this&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;description&lt;/code&gt;: A description of the plugin as it shows up in the list of plugins&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;version&lt;/code&gt;: the version of the plugin. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;The first few child elements come from the general server-plugin descriptor and apply to all server side plugins.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;help&lt;/code&gt;: general information about the plugin, that also shows up in the list of plugins&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;plugin-component&lt;/code&gt;: class name of a class that gets loaded on plugin start and stays there as a "singleton" until unload. See below.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;scheduled-jobs&lt;/code&gt;: this is a configuration that allows you to have your plugin code be run at regular intervals; it is probably less of interest for alert senders&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;plugin-configuration&lt;/code&gt;: properties listed here will end up in the system-wide preferences system UI and serve to do general configuration of the plugin (like e.g. the name of a remote host where alert notifications should be sent to)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;The next batch of elements is specific to the alert-plugins:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;short-name&lt;/code&gt;: the short name of the sender. This is used e.g. in UI drop downs to select the sender&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;plugin-class&lt;/code&gt;: the name of the class that implements the abstract AlertSender class to build the actual sender.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;alert-configuration&lt;/code&gt;: specific properties on a per AlertDefinition basis. This can e.g. be the list of email addresses the alert notification should be sent to.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;custom-ui&lt;/code&gt;: this element is not yet active and is supposed to help building a custom UI if the UI via alert-configuration is not powerful enough.&lt;/lI&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The sender class&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;All senders need to extend the class &lt;code&gt;org.rhq.enterprise.server.plugin.pc.alert.AlertSender&lt;/code&gt; which looks a little like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public abstract class AlertSender&lt;T extends ServerPluginComponent&gt; {&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    /** Configuration from the global per plugin type preferences */&lt;br /&gt;    protected Configuration preferences;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    /** Configuration from the per alert definition parameters */&lt;br /&gt;    protected Configuration alertParameters;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    /** Global component holding persistent resources */&lt;br /&gt;    protected T pluginComponent;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;    /** Do the work */&lt;br /&gt;    public abstract SenderResult send(Alert alert) ;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The method of interest is &lt;code&gt;send(Alert)&lt;/code&gt; where you get the data for this specific alert passed in. You need to implement it.&lt;br /&gt;&lt;br /&gt;The preferences or the alert definition specific properties are injected by the RHQ server, as well as the plugin component, so that you can just get your properties that you set up in the deployment descriptor via calls like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   String hostname = preferences.getSimpleValue("hostName","localhost");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;assuming that you have the following in the plugin descriptor:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;....&lt;br /&gt;  &amp;lt;serverplugin:plugin-configuration&gt;&lt;br /&gt;    &amp;lt;c:simple-property name="hostName" /&gt;&lt;br /&gt;  &amp;lt;/serverplugin:plugin-configuration&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Component class (optional)&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;The component class is a class that implements the interface &lt;code&gt;org.rhq.enterprise.server.plugin.pc.ServerPluginComponent&lt;/code&gt;. It can be used to e.g start up a connection to a remote host within the &lt;code&gt;start()&lt;/code&gt; method and tear it down when &lt;code&gt;stop()&lt;/code&gt; is called. You need to expect that &lt;code&gt;start()&lt;/code&gt; and &lt;code&gt;stop()&lt;/code&gt; can get calles multiple times during the life of a plugin.&lt;br /&gt;&lt;br /&gt;The interface has two more methods: &lt;code&gt;initialize()&lt;/code&gt; and &lt;code&gt;shutdown()&lt;/code&gt; - those are called directly after loading and before unloading an alert sender. The idea here could e.g. to load an external library and unload it at plugin unload.&lt;br /&gt;&lt;br /&gt;The component class is a "singleton" in the lifecycle of a server plugin and stays present while the plugin is loaded. It is optional for alert Plugins - if it is present, it will be injected into &lt;code&gt;AlertSender.pluginComponent&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Plugin structure&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;The alert sender is created in the standard Maven-2 directory structure. Java sources go into &lt;code&gt;src/main/java/&lt;/code&gt;, while the plugin descriptor goes into &lt;code&gt;src/main/resources/META-INF/rhq-serverplugin.xml&lt;/code&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://lh6.ggpht.com/_OdJrfDwRKLM/SyYFpb8yVtI/AAAAAAAAAL4/vF30vcUlH8c/Bildschirmfoto%202009-12-14%20um%2010.29.44.png?imgmax=800" alt="File system structure for an alert sender plugin" border="0" width="362"  /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Round up&lt;/h3&gt;&lt;br /&gt;Ok, that's it for now. You have seen what is involved in writing an alert sender plugin for RHQ and Jopr (versions &lt;a href="http://javablogs.com/Jump.action?id=546521"&gt;1.4.0.B01&lt;/a&gt; and up).&lt;br /&gt;&lt;br /&gt;As always give me and us feedback - e.g. via Irc at &lt;a href="irc://irc.freenode.net/#rhq"&gt;#rhq on freenode&lt;/a&gt;.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;a href="http://javablogs.com/Jump.action?id=547513"&gt;Continue with part 2...&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-6725092624990203405?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/6725092624990203405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=6725092624990203405&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6725092624990203405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/6725092624990203405'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2009/12/how-to-write-alert-sender-plugin-for.html' title='How to write an alert sender plugin for RHQ/Jopr (Part 1)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_OdJrfDwRKLM/SyK0cZYbRcI/AAAAAAAAAL0/SwTPMwl0GIM/s72-c/rhq-serverplugin-alert.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-3608485845235044648</id><published>2009-12-11T16:29:00.001+01:00</published><updated>2009-12-11T16:33:11.341+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>RHQ 1.4.0.B01 released - includes Jopr</title><content type='html'>The RHQ project is pleased to announce the release the first developer build of the RHQ 1.4.0 platform. This developer release, &lt;em&gt;1.4.0-B01&lt;/em&gt;, provides an early looks at the new features which we are planning for the 1.4.0. This release contains many of the plugins which had been available as part of the &lt;a href="http://www.jboss.org/jopr/"&gt;Jopr&lt;/a&gt; project, along with the plugins that were included in previous RHQ releases.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Note:&lt;/strong&gt; we do &lt;strong&gt;not&lt;/strong&gt; advise to upgrade any existing Jopr or RHQ installs with this build!&lt;br /&gt;&lt;br /&gt;Check out the &lt;br /&gt;&lt;a href="http://rhq-project.org/display/RHQ/Release+Notes+1.4.0.B01"&gt;Release notes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And &lt;br /&gt;&lt;a href="https://sourceforge.net/projects/rhq/files/rhq/rhq-1.4.0.beta1/rhq-server-1.4.0.B01.zip/download"&gt;download&lt;/a&gt; the software.&lt;br /&gt;The individual maven project artifacts have been published to the &lt;a href="http://repository.jboss.com/maven2/"&gt;JBoss maven repository&lt;/a&gt; under &lt;code&gt;org/rhq/&lt;/code&gt; and &lt;code&gt;org/jboss/on/&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Source code can be found in the &lt;a href="http://git.fedorahosted.org/git/rhq/rht.git?p=rhq/rhq.git;a=summary"&gt;git repository&lt;/a&gt; at fedorahosted.&lt;br /&gt;&lt;br /&gt;If you have questions, join us on &lt;a href="irc://irc.freenode.net/#rhq"&gt;#rhq on irc.freenode.net&lt;/a&gt; or use the mailing lists:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="https://fedorahosted.org/mailman/listinfo/rhq-users"&gt;rhq-users&lt;/a&gt;: for user questions&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="https://fedorahosted.org/mailman/listinfo/rhq-devel"&gt;rhq-devel&lt;/a&gt;: for developing with and on RHQ&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Of course you can still use the existing mailing lists and forums. &lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-3608485845235044648?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/3608485845235044648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=3608485845235044648&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3608485845235044648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/3608485845235044648'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2009/12/rhq-140b01-released-includes-jopr.html' title='RHQ 1.4.0.B01 released - includes Jopr'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-293662465380464360</id><published>2009-12-08T14:09:00.001+01:00</published><updated>2009-12-15T13:59:19.852+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jruby'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>New experimental (ruby) script plugin for RHQ / Jopr (updated)</title><content type='html'>I've just committed an experimental '&lt;em&gt;script2&lt;/em&gt;' plugin to &lt;a href="http://git.fedorahosted.org/git/rhq/rht.git?p=rhq/rhq.git;a=tree;f=modules/plugins/script2;h=94e6f2b29149de12af88564ae7fc6e76fa81f466;hb=HEAD"&gt;the RHQ git repository&lt;/a&gt;, that allows to write monitoring scripts in the &lt;a href="http://www.jruby.org/"&gt;Ruby&lt;/a&gt; programming language.&lt;br /&gt;&lt;br /&gt;This plugin is not yet enabled in the normal build because of issues (see below) - if you want to have a look at it, go to &lt;code&gt;modules/plugins/script2&lt;/code&gt; and issue &lt;code&gt;mvn -Pdev install&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;To use the script, go to the platform and manually add a &lt;em&gt;script2&lt;/em&gt; resource&lt;br /&gt;For the connection properties you need to specify the scripting language to use and the name of the script, which needs to exist at $AGENT/data/script2/ in the agents file system.&lt;br /&gt;&lt;br /&gt;Your script needs to provide 3 functions: avail, metric(name) and trait(name) - here is an example to show this. By default 4 metrics named 'metric1'..'metric4' are collected as well as one trait called 'trait1'.&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;pre&gt;def avail&lt;br /&gt;        return 1&lt;br /&gt;end&lt;br /&gt;&amp;nbsp;&lt;br /&gt;def metric(name)&lt;br /&gt;        return 4&lt;br /&gt;end&lt;br /&gt;&amp;nbsp;&lt;br /&gt;def trait(name)&lt;br /&gt;        return "Hello Ruby World: #{name}"&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;hr/&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strike&gt;Unfortunately there is still one issue in the code that makes the scripting engine "forget" the script, so that after some time you'll see &lt;br /&gt;exceptions like the following show up:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;:1: undefined method `avail' for main:Object (NoMethodError)&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If you have an idea what is going on, please tell me.&lt;br /&gt;&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;br /&gt;Thanks to &lt;a href="http://yokolet.blogspot.com/"&gt;Yoko Harada&lt;/a&gt; I was able to isolate the issue and fix it. Basically the issue is that the script was evaluated in one thread and later its methods got invoked in other threads which did not contain the evaluated script. So now I am just always re-evaluating the script before calling &lt;code&gt;invokeFunction()&lt;/code&gt;. This is somewhat slower, but works.&lt;br /&gt;&lt;br /&gt;It looks like if I would use the &lt;a href="http://kenai.com/projects/jruby-embed"&gt;Red Bridge&lt;/a&gt; api directly (which is part of the JRuby 1.4 distro), there would be a better way, but the current implementation would allow for different scripting languages. Which brings me to:  &lt;br /&gt;&lt;br /&gt;Also if you want to help to get other languages implemented, contact me.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-293662465380464360?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/293662465380464360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=293662465380464360&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/293662465380464360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/293662465380464360'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2009/12/new-experimental-ruby-script-plugin-for.html' title='New experimental (ruby) script plugin for RHQ / Jopr (updated)'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-1814647367385380070</id><published>2009-12-04T14:40:00.001+01:00</published><updated>2009-12-04T14:40:41.204+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>Facelets ui:include considered powerful</title><content type='html'>Just as a preface: I am very far from being a JSF or Facelets expert - more a novice.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So lately I have been looking at how to dynamically include Facelets or general xhtml snippets into my JSF/Facelets pages. One of the tags made for this is of course &lt;strong&gt;&amp;lt;ui:include&amp;gt;&lt;/strong&gt;. In its &lt;em&gt;src&lt;/em&gt;-attribute you give a path to a page to include like &lt;code&gt;&amp;lt;ui:include src="/path/to/file.xhtml"/&gt;&lt;/code&gt;. So far so cool. &lt;br /&gt;&lt;br /&gt;Now I want to have the page to include to be dynamic - after a lot of googling I found that I can actually pass an EL expression like this &lt;code&gt;&amp;lt;ui:include src="#{BackingBean.path}"/&gt;&lt;/code&gt;. This did first not work at all, because I had a typo in the name of the backing bean - and I just got an error "there is an error" :-/ After the typo was fixed, I was able to get the path from the backing bean. &lt;br /&gt;&lt;br /&gt;Now there are situations where my included page can or should not be shown.&lt;br /&gt;&lt;br /&gt;First (naive) approach was (we are using RichFaces):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &amp;lt;rich:panel rendered="someCondition"&gt;&lt;br /&gt;    &amp;lt;ui:include src="#{BackingBean.path}"/&gt;&lt;br /&gt;  &amp;lt;/rich:panel&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;But no matter the condition, BackingBean.path was evaluated and this could return something that does not point to the file, which screwed up the whole page with the above "there is an error" message.&lt;br /&gt;&lt;br /&gt;So I ended up with creating an empty page, that I put into the webapp and my BackingBean.path now looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  public String getPath() {&lt;br /&gt;     if (someCondition)&lt;br /&gt;        return stringExpression;&lt;br /&gt;     else&lt;br /&gt;        return "/path/to/empty.xhtml";&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This works like a charm.&lt;br /&gt;&lt;br /&gt;And I also found out that the &lt;em&gt;src&lt;/em&gt;-attribute of &lt;em&gt;ui:include&lt;/em&gt; actually is an URL, which means, that it is possible to get the included snippet from a remote web site or from within a Jar file like&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  public String getPath() {&lt;br /&gt;    URL pathUrl = getClassloader().getResource("nameOnClasspath");&lt;br /&gt;    return pathUrl.toString();&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So yes, &amp;lt;ui:include&gt; is a powerful feature of Facelets.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-1814647367385380070?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/1814647367385380070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=1814647367385380070&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1814647367385380070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1814647367385380070'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2009/12/facelets-uiinclude-considered-powerful.html' title='Facelets ui:include considered powerful'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-480651130265191569</id><published>2009-11-26T13:36:00.001+01:00</published><updated>2009-11-26T17:41:03.169+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><title type='text'>RHQ and the future of alerts</title><content type='html'>So don't get me wrong, alerts will stay within RHQ - I am not questioning them.&lt;br /&gt;In contrary - I am actually working on improving the alert subsystem. As a start I've written some design documents that can be found on the RHQ wiki:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://support.rhq-project.org/display/RHQ/Design+-+Alerts+future+enhancements"&gt;Alerts architecture overview&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://support.rhq-project.org/display/RHQ/Design+-+pluggable+alert+senders"&gt;Pluggable alert senders&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Please go through them and give us feedback. &lt;br /&gt;&lt;br /&gt;But before I continue - a little teaser:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align:center;"&gt;&lt;img src="http://lh6.ggpht.com/_OdJrfDwRKLM/Sw5hz2kYYII/AAAAAAAAALw/_YBrSxTPSWw/Sms_alert.jpg?imgmax=800" alt="Sms_alert.jpg" border="0" width="232" title="Screen shot of my mobile phone, that just received an SMS as a reaction to an alert"  /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I've extended the &lt;a href="http://www.mobicents.org/"&gt;Mobicents&lt;/a&gt; sender in my experimental branch (see '&lt;a href="http://javablogs.com/Jump.action?id=529024"&gt;Jopr talking&lt;/a&gt;') to also support sending via SMS now. So the image above shows an alert sent via that mechanism. Thanks to &lt;a href="http://jeanderuelle.blogspot.com/"&gt;Jean Deruelle&lt;/a&gt; again for helping me on the Mobicents side.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;But now back to future alert design...&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;We have identified the following four fields of change / improvement:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Allow for pluggable alert senders&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Allow to acknowledge alerts by users&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When a resource is in maintenance mode, do not send alerts about it&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Escalate alert notifications if an alert is not reacted on&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Of course some of those are meant for the future - e.g. there is no maintenance mode yet.&lt;br /&gt;&lt;br /&gt;The first thing - which I am currently working on are pluggable alert senders. So if you want to e.g write a sender that posts alert notifications to an IRC channel, you can do so now. This is done in a pluggable fashion, which means that the code that does the work and also the UI is encoded in your plugin.&lt;br /&gt;&lt;br /&gt;If you want to write such a plugin, you need to do two things:&lt;br /&gt;&lt;br /&gt;Extend the abstract &lt;a href="http://git.fedorahosted.org/git/rhq/rht.git?p=rhq/rhq.git;a=blob;f=modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/alert/AlertSender.java;h=6adc6f683b0c76cf3f6cc725093a367ead78678f;hb=alertPlugin"&gt;AlertSender class&lt;/a&gt; and write a &lt;a href="http://git.fedorahosted.org/git/rhq/rht.git?p=rhq/rhq.git;a=blob;f=modules/enterprise/server/plugins/alert-email/src/main/resources/META-INF/rhq-serverplugin.xml;h=7f97f6429327a1a7bbd17ec32ea82962a1a21f33;hb=alertPlugin"&gt;plugin descriptor&lt;/a&gt; (&lt;a href="http://git.fedorahosted.org/git/rhq/rht.git?p=rhq/rhq.git;a=blob;f=modules/enterprise/server/xml-schemas/src/main/resources/rhq-serverplugin-alert.xsd;h=dc4d925eba3d8b5f74a18baeeb7b5fcea6d50f84;hb=alertPlugin"&gt;here is the schema&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;I've started &lt;a href="http://git.fedorahosted.org/git/rhq/rht.git?p=rhq/rhq.git;a=blob;f=modules/enterprise/server/plugins/alert-email/src/main/java/org/rhq/enterprise/server/plugins/alertEmail/EmailSender.java;h=581eb94600e7de278dd16f7a36f8e63e0953901e;hb=alertPlugin"&gt;an example on how to use this API&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Note that all of this is &lt;strong&gt;not yet finished&lt;/strong&gt; and may change at any time - again I'd like to hear your feedback.&lt;br /&gt;&lt;br /&gt;In the very first version only UI elements that follow a &amp;lt;configuration&amp;gt; will be supported. Later it will also be possible to supply a XHTHL snippet for UI fields, where you need to write your own backing beans to transfer the values into the alert subsystem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-480651130265191569?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/480651130265191569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=480651130265191569&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/480651130265191569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/480651130265191569'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2009/11/rhq-and-future-of-alerts.html' title='RHQ and the future of alerts'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_OdJrfDwRKLM/Sw5hz2kYYII/AAAAAAAAALw/_YBrSxTPSWw/s72-c/Sms_alert.jpg?imgmax=800' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-1790701312482886944</id><published>2009-11-23T14:06:00.001+01:00</published><updated>2009-11-23T14:06:05.676+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Struts 1 and enums - heads up</title><content type='html'>I lost some good hours on the weekend trying to find out, why a field in my struts form bean was not filled with the correct value, while I could see in the HttpRequest, that the browser / page was indeed sending the correct data.&lt;br /&gt;&lt;br /&gt;My form bean contained something like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public class MyBean extends ValidatorForm {&lt;br /&gt;&amp;nbsp;&lt;br /&gt;   private &lt;strong&gt;MyEnum&lt;/strong&gt; anEnum;&lt;br /&gt;   private String someField;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;   public &lt;strong&gt;MyEnum&lt;/strong&gt; getAnEmum() {...}&lt;br /&gt;   public void setAnEnum(&lt;strong&gt;MyEnum&lt;/strong&gt; val) {...}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;   public String getSomeField() {...}&lt;br /&gt;   public void setSomeField(String val) {...}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Not only did my class compile well, I also did not get any errors when running the code - except that &lt;em&gt;anEnum&lt;/em&gt; was always populated with the first value listed in MyEnum.&lt;br /&gt;&lt;br /&gt;After I changed &lt;em&gt;anEnum&lt;/em&gt; to String (and the getter/setter too) and did the conversion to Enum in the backend code, all was fine.&lt;br /&gt;&lt;br /&gt;And yes, after I found the solution, I remembered, that we did have such an issue in the past already :-/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-1790701312482886944?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/1790701312482886944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=1790701312482886944&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1790701312482886944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/1790701312482886944'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2009/11/struts-1-and-enums-heads-up.html' title='Struts 1 and enums - heads up'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-7758722981668802187</id><published>2009-10-26T16:22:00.001+01:00</published><updated>2009-10-26T16:22:06.502+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>RHQ and Jopr: new source repository</title><content type='html'>Yes, we can as well :)&lt;br /&gt;&lt;br /&gt;In the past it was often confusing to users that we have two source repositories for RHQ and Jopr. We have recently changed this.&lt;br /&gt;&lt;br /&gt;The new RHQ repository lives now at &lt;a href="http://git.fedorahosted.org/git/rhq/rht.git?p=rhq/rhq.git;a=summary"&gt;http://git.fedorahosted.org/&lt;/a&gt;. There are a few branches defined, but the main one of interest is &lt;em&gt;origin/master&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;As you can see, we have not only move the repository location, but also move to the &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt; version control system and even merged Jopr and RHQ together into one repository - so no more riddling where to find what.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;See also this post about the &lt;a href="http://javablogs.com/Jump.action?id=537778"&gt;change to bug tracking&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-7758722981668802187?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/7758722981668802187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=7758722981668802187&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7758722981668802187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/7758722981668802187'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2009/10/rhq-and-jopr-new-source-repository.html' title='RHQ and Jopr: new source repository'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-5156208615923732122</id><published>2009-10-26T15:11:00.001+01:00</published><updated>2009-10-26T15:22:34.258+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='RHQ'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><title type='text'>RHQ Bugtracker moves to Bugzilla - action required</title><content type='html'>&lt;img src="http://www.rhq-project.org/images/logo-rhq-mast.gif" alt="RHQ project logo" align="right"/&gt;&lt;br /&gt;&lt;br /&gt;Project &lt;a href="http://support.rhq-project.org/display/RHQ/Home"&gt;RHQ&lt;/a&gt;, which is the foundation for &lt;a href="http://www.jboss.org/jopr/"&gt;Jopr&lt;/a&gt; will soon move all bug tracking from the old JIRA system at jira.rhq-project.org over to a &lt;a href="http://bugzilla.redhat.com"&gt;bugzilla instance at Red Hat&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So when you have an account at the jira and reported bugs, you should follow those steps to have your cases linked to you on the new bugzilla site:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; Go to bugzilla at &lt;a href="http://bugzilla.redhat.com"&gt;bugzilla.redhat.com&lt;/a&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;If you don't yet have an account create one with your preferred email address.&lt;br /&gt;&lt;li&gt;If you do have an account, login (or submit a password change request then login). And &lt;em&gt;make a note of the email address you are using&lt;/em&gt;. &lt;/ol&gt;&lt;br /&gt;&lt;li&gt; Go to RHQ jira (&lt;a href="http://jira.rhq-project.org/browse/RHQ"&gt;http://jira.rhq-project.org/browse/RHQ&lt;/a&gt;), &lt;br /&gt;log in and set your email address through your profile (&lt;a href="http://jira.rhq-project.org/secure/EditProfile!default.jspa"&gt;http://jira.rhq-project.org/secure/EditProfile!default.jspa&lt;/a&gt;) to the one you are using in bugzilla above.&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;strong&gt;Cutover will happen within the next few days&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;For now, the &lt;a href="http://www.jboss.org/jopr/"&gt;Jopr&lt;/a&gt; bugtracker will stay at the JBoss jira, but will probably also merged into bugzilla in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6080082-5156208615923732122?l=pilhuhn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pilhuhn.blogspot.com/feeds/5156208615923732122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6080082&amp;postID=5156208615923732122&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5156208615923732122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6080082/posts/default/5156208615923732122'/><link rel='alternate' type='text/html' href='http://pilhuhn.blogspot.com/2009/10/rhq-bugtracker-moves-to-bugzilla.html' title='RHQ Bugtracker moves to Bugzilla - action required'/><author><name>Heiko Rupp</name><uri>https://profiles.google.com/114249341487134308671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-fRfiLryF7Gk/AAAAAAAAAAI/AAAAAAAAAUk/SSRweVqJx4M/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6080082.post-126719061657834024</id><published>2009-10-13T11:59:00.001+02:00</published><updated>2009-10-13T12:26:58.499+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jruby'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>Embedding ruby in java - less than trivial so far</title><content type='html'>Currently I am trying to get &lt;a href="http://reductivelabs.com/products/puppet/"&gt;puppet&lt;/a&gt;, a configuration management system to be executed in &lt;a href="http://www.jruby.org/"&gt;Jruby&lt;/a&gt; - and especially embedded within some java code.&lt;br /&gt;&lt;br /&gt;Luckily there is the &lt;a href="http://www.jcp.org/en/jsr/detail?id=223"&gt;JSR 223&lt;/a&gt; scripting available in Java6, so the start is relatively easy: get jruby from jruby.org and add it to the java programs classpath, java program code looks like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// Define path to jruby libraries&lt;br /&gt;System.setProperty("jruby.home","/opt/local/share/java/jruby");&lt;br /&gt;&lt;br /&gt;// Get the scripting engine&lt;br /&gt;ScriptEngineManager m = new ScriptEngineManager();&lt;br /&gt;ScriptEngine rubyEngine = m.getEngineByName("jruby");&lt;br /&gt;&lt;br /&gt;// Define the puppet script to run as arguments&lt;br /&gt;rubyEngine.put(ScriptEngine.ARGV,new String[]{"example.pp"}); &lt;br /&gt;&lt;br /&gt;// read the script&lt;br /&gt;File f = new File("puppet.rb");&lt;br /&gt;BufferedReader br = new BufferedReader(new FileReader(f));&lt;br /&gt;&lt;br /&gt;// and execute it&lt;br /&gt;rubyEngine.eval(br, context);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Simple - eh?&lt;br /&gt;&lt;br /&gt;Unfortunately is it not that simple (yet).&lt;br /&gt;&lt;br /&gt;Passing the argument vector to my script does not yet work in jruby 1.4 cr1 (see &lt;a href="http://jira.codehaus.org/browse/JRUBY-4090"&gt;JRUBY-4090&lt;/a&gt;), so I need to do a work around of defining a script, that sets this and then calls puppet&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ARGV &amp;lt;&amp;lt; 'example.pp'&lt;br/&gt;&lt;br /&gt;require 'puppet/application/puppet'&lt;br/&gt;&lt;br /&gt;Puppet::Application[:puppet].run&lt;br/&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Next, puppet is complaining about missing s
