Wednesday, June 22, 2011

Who's messing with my classes - IntelliJ! (UPDATED)

So I have the following code in one of my classes:

    public void setName(@NotNull String name) {
this.name = name;
}

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):

Caused by: java.lang.IllegalArgumentException: Argument 0 for @NotNull
parameter of org/rhq/core/domain/resource/Resource.setName must not
be null
at org.rhq.core.domain.resource.Resource.setName(Resource.java)

 

The @NotNull Annotation is coming from the Jetbrains org.jetbrains.annotations package.

Decompiling Resource.class with jad Resource.class shows this:

    public void setName(String name)
{
if(name == null)
{
throw new IllegalArgumentException("Argument 0 for @NotNull parameter of org/rhq/core/domain/resource/Resource.setName must not be null");
} else
{
this.name = name;
return;
}
}

So someone is inserting this check for if(name==null) 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.

[UPDATE]

I was suspecting IntelliJ already, as my colleague Ian was talking about the @NotNull compiler setting, but I turned that off and on and it had no effect.

After the comment by Scott Vachalek 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.

 

Bildschirmfoto 2011 06 28 um 17 02 12

 

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 jad again and saw those checks again.

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.

 

Monday, June 06, 2011

Seemingly common RESTEasy error and a solution

So I was playing with RESTeasy a bit and using the standalone servlet method of exposing REST services was very easy and straightforward.

And then I thought, ok, let me now do the EJB integration on a JBoss AS 4.2.3 - and ran into the following error:

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

Which was strange as I did have the @Path annotation present:

@Local
@Produces({"application/json","application/xml","text/plain"})
@Path("/resource")
public interface ResourceHandlerLocal {

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 @ApplicationPath("/rest") annotation, which defines the "root context" and which is not needed in the simple standalone war case.

So I implemented a subclass of javax.ws.rs.core.Application which is marked with this ApplicationPath annotation and registered it in web.xml:

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
<display-name>RHQ Rest interface</display-name>

<context-param>
<param-name>resteasy.jndi.resources</param-name>
<param-value>rhq/ResourceHandlerBean/local</param-value>
<description>List of jndi names of EJBs local interfaces that define REST stuff</description>
</context-param>


<servlet>
<servlet-name>Resteasy</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>

<init-param>
<param-name>resteasy.scan</param-name>
<param-value>false</param-value>
</init-param> <init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>org.rhq.enterprise.server.rest.RHQApplication</param-value>
</init-param>

</servlet>

<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

And now the REST provider is starting nicely :)

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.

Saturday, June 04, 2011

Two nice days at Android DevCamp Stuttgart 2

In Stuttgart, we had an Android Developer Camp organized by the local Google Technology User Group.
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.
Heiko droids adcs2
Some of the almost 200 plush Androids
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->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 are here.
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.
Food was good and the Androids were plenty, so this was a good event. Thanks to all sponsors and the organization team.

Monday, May 23, 2011

RHQ 4.0.1 released

RHQ logo wallpaper

 

 

The RHQ team has just released version 4.0.1 of its server management and monitoring software.

This release is a bugfix release over RHQ 4 which was released earlier this month. 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.

You can browse the full release notes, which also contain a link to the download.

Jay Shaughnessy has written a blog post on what was necessary with SmartGWT to get it to work on IE7 and 8.

Wednesday, May 04, 2011

And I thought JBossAS had long stack traces ...

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)

 

 

RHQ 4 - alerting on call time data

One of the features of RHQ 4 (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).

By default that feature is hidden (inRHQ 3 only; RHQ 4 has it enabled by default), so you first have to enable it in the system settings:

 

Bildschirmfoto 2011 05 04 um 09 54 41
System settings
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:
Bildschirmfoto 2011 05 04 um 10 14 54
Add alert condition
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:
Bildschirmfoto 2011 05 04 um 10 15 05
Select condition values and comparator
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.
As always: please provide feedback. When the feedback is positive, we may un-hide this feature for future versions of RHQ.

 

RHQ 4 - alerting on call time data

One of the features of RHQ 4 (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.

By default that feature is hidden, so you first have to enable it in the system settings:

Bildschirmfoto 2011 05 04 um 09 54 41
System settings
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:
Bildschirmfoto 2011 05 04 um 10 14 54
Add alert condition
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:
Bildschirmfoto 2011 05 04 um 10 15 05
Select condition values and comparator
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.
As always: please provide feedback. When the feedback is positive, we may un-hide this feature for future versions of RHQ.

Monday, May 02, 2011

RHQ 4 released

RHQ logo wallpaper

The RHQ team is proud to have released version 4.0 of RHQ 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.

 

Bildschirmfoto 2011 04 28 um 21 02 19

 

New features include:

  • new SmartGWT-based GUI
  • support for Postgres 9.0
  • support for deleting Agent plugins
  • support for executing an RHQ CLI script when an alert fires (for more info, see this blog)
  • improved authorization for content repositories - public/private repos, repo owners, and MANAGE_REPOSITORIES priv
  • Much improved MySQL agent-plugin (by Steve Milidge)
  • New logfile alert-sender (by Steve Milidge)

Note that Internet Explorer is not fully supported (we expect to fully support it soon) - FireFox and Webkit-based browsers are fine.

You can browse the release notes to see a more detailed list of changes, new features and also known issued.

The binaries are available from SourceForge.

Thursday, April 21, 2011

RHQ 4 candidate release is out and waits for testing

RHQ

 

RHQ team is planning to release RHQ 4 end of next week. And while we know that there are areas that need more love, we want to encourage every one to test the release candidate, RHQ 4 CRover the long week end and report back (critical) bugs, so that we have a chance to fix them for the final version.

Download is on SourceForge and the release notes can be found on rhq-project.org.

Speaking of giving some love: if you are willing to do some translations of the UI messages into your native language, please contact me.

Monday, March 21, 2011

RHQ tab sweep

We had a productive time since last tab sweep and released a third developer preview of RHQ, as well as RHQ 4.0.0 Beta 1. Please give the beta a try and report issues, as well as file feature requests.

The JBoss developers webinars series had a session about RHQ. The recording is available on Vimeo.

Ian Springer has answered the forums post about "JBoss AS 5.1 and RHQ"

IRC

As you probably know, RHQ team is hanging out on IRC in irc://irc.freenode.net/#rhq. If your access to IRC is blocked for whatever reasons, you can still try to use the web front end to join us.

Blog postings

I've written: An explanation of metrics and their per minute counterparts

Mazz has written two blog posts: Alerting and Remote Script Execution and an update on Bundle provisioning with RHQ both with flash demos.

Speaking of Bundles, John Sanda has created a bundle receipt for deploying JBossAS.

Lukáš Krejčí has written about running CLI scripts as alert notifications. This feature made it into RHQ 4 beta 1.

Jay Shaughnessy has written a hint about regular expression evaluation in GWT.

Developer mailing list (subscribe here)

We had some discussions about a new Auditing subsystem (this would be a great topic to start RHQ hacking, as this can be (mostly) done in great isolation to the existing code base.

Another discussion went around the new Summary/Activity pages for groups and about displaying recent package history and bundle deployments on those.

 

Monday, March 14, 2011

RHQ 4 beta 1 available

Last week the first beta version of RHQ 4 has been made available. This beta is the first large milestone towards a RHQ 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.

One new cool feature made it in to the beta (since the last DP3 release): there is now an alert sender that can run CLI scripts when an alert has fired.

Check the release notes page which also contains the link to the downloads.

As always: please give us feedback!

Tell us your story about RHQ

We are interested on how you use RHQ. Please reply in the forums or the rhq-users mailing list

Friday, February 18, 2011

RHQ 4 DP3 is out, webinar recording available

The third preview of RHQ 4 has been released yesterday.

From the release announcement:

We have just released RHQ 4.0 Developer Preview 3. This release is 
intended for developers and other interested parties who want a 
first-hand look at upcoming changes in RHQ 4.0, in particular the new 
GWT UI. Please note that this release is not intended for production use 
or serious testing.

New Features:
* Improved dashboard
* Improved operations UI (for single resource)
* Improved bundles UI
* System settings have been ported to GWT
* Support for Postgres 9.0
* Support for deleting agent plugins

The release notes tell you more and also contain the download link.

Two weeks ago, I have given a webinar "Overview of RHQ and JBossON". The recording is now available from Vimeo:

 

Overview of RHQ and JBoss Operations Network from JBoss Developer on Vimeo.

 


Friday, February 04, 2011

Metrics in RHQ and their per minute counterparts

In RHQ we support some kinds of metrics:

  • Dynamic: metric values are 'randomly' going up and down. An example could be the free main memory of a computer
  • Trendsup: a metric whose values are monotonically increasing. This could e.g. be the number of transactions committed or request served
  • Trendsdown: the counterpart of trendsup where values are monotonically decreasing.

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.

Now lets have a look at an excerpt from a screen shot of the metrics table in RHQ:

 

Metrics2
Screenshot from RHQ UI (non-interesting lines cut out)
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:
Metrics3
The position in time of the green bar is "now".
And now we can do the math:
333540 - 327100 = 6440 requests in the last 24h
6440 / ( 26 * 60 ) = 4.47 requests per minute (on average)
And those 4.47 requests are the 4.6 you see as avg. requests per minute in above graph (modulo some rounding issues).

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) .

 

Wednesday, January 12, 2011

Please take a few seconds for a poll about RHQ 4

Please take a few seconds for this poll to tell us what you think about RHQ 4 so far.

You need to be logged in with your JBoss community account. Then just select an option and click on submit. Done.

Of course you can leave comments on that page too. The poll ends in two weeks.

Thanks

Monday, January 10, 2011

RHQ tab sweep (updated)

Issue 2/2011 of German JavaMagazin features a 5 page article about RHQ. Currently this is available in the printed version, and also on the JavaMagazin home page later on.

There is a new video on Vimeo about using the standalone plugin container for plugin development. The start scripts are now also available for download from SourceForge.

If you don't want to run the agent as root, but need to access resources like postgresql.conf, use ACLs.

If you want to monitor apache httpd, you can try an experimental plugin 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).

John Sanda has written a plugin, that can use Clojure files to do the actual plugin work. So if you find writing the plugin code in Java boring, just use Clojure :-) (See also this article from John).

And then of course RHQ 4 DP 2 is out (since start of December).

And last but not least:

The Cool Stuff section of the JBoss community website now has some RHQ wallpapers.

Thursday, December 30, 2010

Running the RHQ agent as root? Alternatives? ACLs!

 

Some RHQ plugins require access to some resources that are normally only readable by root or the respective owner. The example I am using here is the postgres plugin. This plugin needs access to $PGDATA/postgresql.conf in order to show the configuration in the UI (and to possibly update it).

Unfortunately postgres requires this file to be owned by user postgres and only be read(-writable) by this user (mode 600) and the directory containing this file ($PGDATA) is also required to be owned by user postgres and only be accessible by user postgres (mode 700).

 

One way to access the data it to run the RHQ agent as root 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.

Luckily there is an easy way to get around this limitation: ACLs

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.

On Red HatEnterprise Linux (and Fedora and probably all other Linuxes) you can set them like this ('hrupp' is used as agent user):

postgres$ pwd
/var/db/postgres
postgres$ setfacl -m u:hrupp:rw $PGDATA/postgresql.conf
postgres$ setfactl -m u:hrupp:x $PGDATA

ls shows that there are ACLs enabled:

root# ls -lsa
8 drwx--x---+ 13 postgres postgres 4096 Dec 21 14:04 .
24 -rw-rw----+ 1 postgres postgres 16872 Dec 17 12:11 postgresql.conf

See the little + in the perms? That indicates an active ACL. Those can be queried via getfacl:

root# getfacl .
# file: .
# owner: postgres
# group: postgres
user::rwx
user:hrupp:--x
group::---
mask::--x
other::---

 

root# getfacl postgresql.conf
# file: postgresql.conf
# owner: postgres
# group: postgres
user::rw-
user:hrupp:rw-
group::---
mask::rw-
other::---

Also remember that the mount options need to enable ACLs first.:

root# grep acl /etc/fstab
/dev/mapper/VG_data-data1 /var/db ext4 defaults,acl 1 3

 

On Mac OS X the command to see them in directory listings is 'ls -lea' (shown below). To set an ACL you can use chmod (here 'hrupp' is used as agent user):

postgres$ pwd
/var/db/postgres
postgres$ chmod +a "hrupp allow read,write" postgresql.conf
postgres$ ls -le postgresql.conf
 -rw-------+ 1 postgres  postgres  16759 Jul 22  2009 postgresql.conf
0: user:hrupp allow read,write
postgres$ chmod +a "hrupp allow execute" .
postgres$ ls -lea
drwx------+ 23 postgres  postgres    782 Dec 30 15:00 . 
0: user:hrupp allow search
-rw-------+  1 postgres  postgres  16759 Jul 22  2009 postgresql.conf 
0: user:hrupp allow read,write

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.

 

I have been told that recent Windows versions also support POSIX ACLs, so this should work there as well.

---

This tip was brought to you by the excellent RHCSA training.

 

Wednesday, December 29, 2010

A pitfall in PendingIntent (with solution)

The Android documentation has a nice overview chapter about how to notifiy the user with status bar notifications.

The example text works quite nicely and the user gets informed and can then call back into the application. But when working on Zwitscher it did not work as intended by me. But lets start slowly.

Setting up a notifiction goes along the lines of (taken from the developer guide):


Intent notificationIntent = new Intent(this, MyClass.class);
PendingIntent contentIntent =
PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, "Title",
"something went wrong", contentIntent);

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.

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:

Intent notificationIntent = new Intent(context,MyClass.class);
notificationIntent.putExtra("key","value");        
notificationIntent.putExtra("key2",someCounter++);

to add the payload. And in MyClass you would get the data via

Intent intent = getIntent();        
Bundle bundle = intent.getExtras();        
String head = bundle.getString("key");        
Integer body = bundle.getInt("key2");

Now when the notification fires,  the intent is created and attached to the PendingIntent and this shows up in the status bar

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.

When you do this a few times in a row you will see that the passed counter (someCounter) 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.

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.

To get the desired semantics, we need to pass a flag to tell the system:

PendingIntent pintent = 
PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);


This flag (FLAG_CANCEL_CURRENT) 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 PendingIntent.

 


You can see a full example in the Zwitscher source code on github in the

And remember that Zwitscher is live on the Android market - download and try it :-)

Saturday, December 11, 2010

Zwitscher is on the market

Zwitscher, my Twitter client for Android(*) is now available in the Android-Market.

zwitscher_on_market.png

 

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 :-)

Zwitscher is open source and hosted on GitHub.

Thursday, December 09, 2010

New preview release of RHQ 4 available

 

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.

 

 

Rupp_RHQ_Dashboard.png

Major new features:

  • Improved LDAP support
  • Default dashboard improvements
  • Improved Resource Inventory support
  • Breadcrumbs no longer used
  • I18N
  • New Help section: Docs from the www.rhq-project.org are now available directly through the app.
  • GWT-based user and role edit views finished
  • Metric and Alert template views converted from JSF to GWT
  • Much improved MySQL plugin (by Steve Milidge)

More detailed release notes can be found here: http://rhq-project.org/display/RHQ/Release+Notes+4.0+DP2

Please check out this release and give us as much feedback as you can. Also we are very interested in getting more translations

The release can be downloaded from the link within the release notes

Thanks to everyone who contributed. Heiko (on behalf of the RHQ team)

 

Wednesday, December 08, 2010

I am a RHCSA now :-)

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.

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!

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.

And then I was waiting for exam results - and today I got it: I passed and I am now a RHCSA! :-)))

Cert number is 100-003-383