Monday, June 30, 2008

RHQ 1.0.1 and JBossON 2.0.1 available



We just released RHQ Version 1.0.1 and JBossOn 2.0.1 in the wild.

Both are bugfix releases and don't add much of new functionality (read: "as in new subsystems") - if you want you can have a look at the closed JIRAs. You will also find a few new features in there :)

You can find the RHQ 1.0.1.GA tag in RHQ svn.

JBoss customers can of course download JBossON 2.0.1 from the customer support portal as usual.

As usual, it is cool to get a release out of the door :-)






Friday, June 27, 2008

Yesterday SIG-JBoss-Meeting about RHQ

Ok, I have to admit, that yesterday wasn't the best day to run a SIG-JBoss meeting
of the Stuttgart Java User Group, as the second semi final of the European Soccer Championship was also yesterday. But then we have seen all three goals on the big screen in a nearby Italian restaurant after the meeting anyway.

In the meeting I went a bit through what RHQ is, how it relates to JBossON, showed the components and then just did a live demo of the whole system.

After that we went through what it takes to develop plugins and showed some code (Yeah man, show me the code :-)

Conclusion was that RHQ, even if still lacking things is already very powerful and that the agent and server infrastructure does a lot for you for free.

My slides can be downloaded here (PDF, German).

If you are interested in RHQ, you can also pass by at the Red Hat booth at Java Forum Stuttgart, where I may be able to demonstrate that (or one of my colleagues).

Wednesday, June 25, 2008

RHQ - tip of the day: Which groups are containing a resource

RHQ has a powerful grouping feature: you can generate groups of resources (of compatible and mixed type).

When you go to the Browse Resources page, you can get a list of compatible and mixed groups and from the inventory of a group see all members of said group. Setting up a lot of groups is even easier with the cool DynaGroups feature.

But what if you want to know all groups that contain a certain resource? Of course, you can look into each group and check if it is there. But this can get boring with lots of groups.

There is an easier solution to that: go to the inventory page of the resource and scroll down. You will find a section "Groups Containing this Resource":



This section shows the names and types of groups where the resource is in, as well as member count and availability of the group.





Technorati Tags:
,


Tuesday, June 24, 2008

RHQ - tip of the day: postgres and login permission

When creating a database and database user for RHQ, Postgres knows two commands to create a user:

create user
and
create role

They both do the same thing and create a database user. The big difference (which may cause you some grey hair) is that create role does not automatically allow log in.

So to create a database user for RHQ, use the create user form. Example:

create user rhqadmin password 'rhqadmin'

If you have further login issues, see also my other posting about "local is not local"







Technorati Tags:


Monday, June 23, 2008

RHQ - tip of the day: is the resource down or the network?

RHQ and JBossON 2, that is built on top of RHQ are distributed systems. The agents managing resources can (and will) live on a different system than the server. So sometimes the question arises when a resource is marked as unavailable if the resource itself is down - or the connection between agent and server.

There is a heartbeat going on between the RHQ agents and the server: the agents are periodically reporting the availability of their managed resources to the server. Now if the server doesn't get those reports for some time, it will report the managed resource as being down. This might have three causes

  • The resource is really down
  • The agent is down
  • The network between agent and server is down
  • Combination of the above


So if a resource is down and you are not sure, go to its inventory tab and scroll to the bottom. There is a section "Agent Managing this Resource":



This shows the availability of the agent and when the last availability report for this resource was received.

If this one shows red, you really should have a look at the machine hosting the agent and the resource.







Technorati Tags:
,


Stuttgart-Lauf

Yesterday I was at the Stuttgart-Lauf again. The track was a little bit longer with 8.2 km than in previous years with 7.6 km.

My result:



Actually I am quite happy with that, as I did not exercise a lot before and the weather was again very hot (32 Degrees Celsius). In my category (age 30-39), there were 425 finishers. Total finisher according to the stats at Mika Timing were 3664 ppl.

The run was fun again, because of the people along the track and also the finish in the Gottlieb-Daimler-Stadion. I think this time was the last time that the finishing line is in the stadium, as there are plans to convert it into a soccer-only arena.

Friday, June 20, 2008

RHQ - tip of the day: Use the skeleton generator to generate plugin skeletons

I wrote in length about writing plugins for RHQ - of course there is still more to know about.

That is why we created the plugin community.

One cool new feature since writing the blog series is the new plugin skeleton generator, that Jason Dobies wrote. While the name of (the generator, not of Jay :-) is a little complicated ("RHQ Plugin Archetype") you don't need to be afraid :)
It is just a maven command that will create all you need.

To use the archetype you first need to download it as indicated on its wiki page.

Then you call it as follows (I am using multiple lines here, but on the shell you need to give that in one line).


$ cd $RHQ/modules/plugins
$ mvn archetype:create -DarchetypeGroupId=org.rhq \
-DarchetypeArtifactId=rhq-plugin-archetype \
-Drhq-plugin-name=test \
-DarchetypeVersion=1.0.0.GA \
-DartifactId=rhq-test-plugin \
-Dversion=1.0.1-SNAPSHOT \
-Dpackage=org.rhq.plugins.test \


This will emit a lot of stuff ending in:

[INFO] Archetype created in dir: /jon/jonHEAD/rhq/modules/plugins/rhq-test-plugin


Note that the version in the -Dversion attribute above must correspond to the version of RHQ that you are using to build the plugin. Otherwise compiling of the plugin will fail.
All options are described on the wiki page. Basically you need two things: artifactId, the name of your plugin, and package, the java package of it.

One caveat: currently (as of 6/20) it is only generating the base directory structure and plugin descriptor, but no Java files. But I am very sure, Jason will fix that soon. And hey, this is open source and the source code is available from svn.

Have fun -- and join us on irc://irc.freenode.net/ in channel #rhq.




Technorati Tags:
, ,


Thursday, June 19, 2008

Java is finally free and open

My colleague Rich Sharples just blogged about it. But as this is so important, it needs to be repeated :-)

So: IcedTea passed the Java TCK. You can get it today in Fedora 9.

See also:

http://digg.com/software/Java_finally_open_and_free

Lilian Angel on IcedTea

IcedTea at Wikipedia

RHQ - tip of the day: Try JBoss ON 2

You surely know by now: JBossON 2 is built on top of RHQ.

JBoss is now providing a free trial version of JBoss ON 2 at http://www.jboss.com/products/jbosson. Sign up at the link provided there and see JBoss ON 2 in action. This also includes plugins for monitoring JBossAS

Support for that trial is through the forums at http://www.jboss.com/index.html?module=bb&op=viewforum&f=285.





Technorati Tags:
,


Reminder: Stuttgart SIG-JBoss meeting about RHQ

This is a reminder about the upcoming Stuttgart SIG-JBoss meeting.



The Stuttgart SIG-JBoss will hold a meeting on June 26th in the premises of Red Hat Germany.

Topic for this meeting is a presentation of RHQ -- and if we have time about how to write plugins.
If you want, bring your laptops, so we can do some installations and fun stuff.

You can view the full (German) announcement at the Stuttgart Java User Group page

Please register as indicated in the announcement page -- registration is free!

Remember: parking space is limited in the vicinity of the office, but U1,U14 and bus 44 stop directly in front of the office.

Wednesday, June 18, 2008

Postgres: local is not local (or how to solve connection issues)

When setting up RHQ and doing some testing around an open bug report, I stumbled once more over the PostgreSQL access configuration. Usually I just configure it and it works, but this time it just did not do what I wanted it to do ... It is not that it is not documented, but as I have seen others fighting here too, I will comment a little.

PostgreSQL use two files that configure who can access the database. The first one, postgresql.conf defines the network interfaces, PostgreSQL is listening on:


#listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost', '*' = all


If this line is commented, as shown it will only listen on TCP sockets on localhost (127.0.0.1) for
IPv4 and IPv6(!) and additionally on a unix domain socket.
If you want to give access to people from another computer, you need to uncomment the listen_address entry and list the respective network interfaces to listen on. Then restart the PostgreSQL server.

The second file is pg_hba.conf. It contains the specific about which user may access which database with which way of connecting and authentication:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
 
# "local" is for Unix domain socket connections only
#local all all trust
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
#host all all ::1/128 trust


When you connect to the database via psql, you are by default using a unix domain socket connection - so the line starting with "local" applies.
If you try to connect via a JDBC driver, as RHQ and JBossON do, the connection will be done via TCP, which means the lines starting with "host" are applicable.

So even if you are successfully able to connect to Postgres via psql, it does not mean, that you can do so via other means or from remote hosts.

So how can you verify the connection setup without first starting your java app? Well, psql allows you to supply a hostname -- if this is there, it will use a TCP connection. Note that if you specify
-h localhost, the connection could go over TCPv6. To force the use of TCPv4 use -h 127.0.0.1.

With the above pg_hba.conf this could look like this:

snert$ psql -h localhost -Urhqadmin -d rhq
psql: FATAL: no pg_hba.conf entry for host "::1", user "rhqadmin", database "rhq", SSL off

This is ok, as the line for ::1/128 was commented out

snert$ psql -h 127.0.0.1 -Urhqadmin -d rhq
Password for user rhq:
Welcome to psql 8.3.3, the PostgreSQL interactive terminal.
rqh=>

Now we succeeded.







Technorati Tags:


RHQ - tip of the day: manual resource discovery

RHQ and JBossON 2 have both the possibility to automatically discover managed resources (see e.g. this posting for some details).

This autodiscovery is running at regular intervals. But sometimes you want to directly add a new managed resource like a freshly installed JBossAS server to your inventory. There are basically two possibilities (besides just waiting for the next autodiscovery to happen):


  • Trigger a manual autodiscovery on the server

  • Give a prompt command on the agent



Lets have a short look at both...

Trigger a manual autodiscovery on the server



In the RHQ-GUI go to the Operations Tab of the platform (=The machine) on which you started the new JBossAS server and click on "Manual Autodiscovery":



On the next page, select "Yes" for detailed discovery and click on "Schedule" below. This will take a few seconds and the just submitted operation will be shown in the history view. When it has finished, go to the Dashboard.

Give a prompt command on the agent



If you have your agent running in foreground and still have the agent commandline available, you can just issue a discovery --full command.

sending> discovery --full
Full discovery run in 4659ms
sending>


When the sending> prompt is back, go to the Dashboard in the GUI.

And Import ..



After you have discovered your resources, you still need to import them into inventory. To do this, go to the Dashboard and the autodiscovery portlet, that will show the resources you just discovered. Click on "Import" as usual:


(Screenshot was taken in JBossON 2)


Technorati Tags:
,


Tuesday, June 17, 2008

RHQ - tip of the day: Metric display is steady

In RHQ and JBossON 2, that is built on top of RHQ,
you have the possibility to graph metrics for (more or less) arbitrary time ranges.

But sometimes the display is not moving and not showing any data that you'd expect to see.

If this is the case, have a look at the time range setting, which are below the graphs:



Here it is fixed to a 1 hour interval between 10:31am on jun 16th to 11:31am on the same day.
This means that RHQ will all over the place only show metric data for this 1 hour timerange.

To get things "dynamic" again, just select the "Last x hours" radio button and click on "redraw".





Technorati Tags:
,


Monday, June 16, 2008

RHQ - tip of the day: sync your clocks

RHQ and JBossON 2, that is built on top of RHQ are distributed systems. The agents can (and will) live on a different system than the server.

Metric data that is gathered on the agents will be sent to the server and stored in the database. Now if you want to e.g. compare metrics from two different sources (e.g. the load of two JBossAS servers in a cluster), you can only make sense out of it when the metrics have been taken at the same time (a few seconds usually don't hurt, but if it is more, you will see a peek on one server at one time and a peek on the other server at the other time. This will make you wonder why your load balancer was distributing the load in strange ways. In reality the peeks were at the same time and the system was working as it should.



In the above image you see on the left side two peaks that obviously are not occurring at the same time. On the right with synchronized clocks, you see that those peaks, even at different level, occurred simultaneously.


Another issue that we have seen in the past is that metrics were not showing at all on the GUI and users were thinking that something is broken or that the agent did not collect data (especially directly after install). The cause to that was that that the agent clock was so far in the past or in the future that its values just well outside of the displayed time range.



You won't see metric data of an agent after it started when its clock is 2h away from the master clock with this setting of a display range of 1 hour.




Technorati Tags:
,


Friday, June 06, 2008

Good SIG meeting about jBPM (updated)

[ update: it is not jBPM 3.3 as I have written previously, but rather 3.2.3.
Also I added a link to the slides and the specific pages on the camunda home page ]


Yesterday we held a SIG JBoss meeting within the Java User Group Stuttgart.
Bernd Rücker from camunda gave a presentation about Business process simulation with jBPM.



First he introduced into business process management itself and then into jBPM, which was good as most of the over 20 attendees did not yet know about it.



Afterwards he was talking about statistics and simulation basics, how he married DESMO-J with jBPM and showed a live demo.

And you know the best?
His work has been committed to the jBPM repository, so version 3.2.3 (if it gets ever released) will contain it.

I would also like to thank Red Hat Germany for providing the location for that meeting.

The slides are available at http://www.camunda.com/content/publikationen/ruecker-jbpm-simulation.pdf

Introduction into BPS with jBPM

jBPM home page

Friday, May 30, 2008

Writing a RHQ plugin Part 5

Welcome back

As promised in the last part, I will talk a little bit more about the Facets of a plugin. But before we come to this, I want to show you how to detect physical processes on a machine via process scans. And last but least, I'm gonna talk a little bit about the skeleton plugin -- basically a plugin template that you can use to write your own plugins.

Using Process scans for discovery



Often when you want to discover resources, they are not virtual like the remote http servers in our examples, but processes on the local machine. The RHQ agent offers through its SIGAR library to query the process table in order to detect those resources. As you may have guessed, this involves the plugin descriptor, so lets have a look at this first before going to the discovery component

Process-scans in the plugin descriptor



As you have seen in part 2, each of platform/server/service can have <proces-scan> elements. The element itself is empty, but has two required attributes: name and query. Name just names this specific scan method. Query is the intersting part. It is a string written in PIQL (Process Info Query Language), which is documented in the JavaDoc to its class. I don't want to go into detail here and just show two queries. Visit the page just mentioned to learn more.

Query 1: find a JBossAS



process|basename|match=^java.*,arg|org.jboss.Main|match=.*


We want to query for a process, whose name is starting with java and which has an argument of org.jboss.Main -- a JBoss Server. The matching entry from ps is:

hrupp 2035 0.0 -1.5 724712 30616 p7 S+ 9:49PM 0:01.61 java
-Dprogram.name=run.sh -Xms128m -Xmx512m -Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.platform.mbeanserver
-Djava.endorsed.dirs=/devel/jboss-4.0.5.GA/lib/endorsed
-classpath /devel/jboss-4.0.5.GA/bin/run.jar:/lib/tools.jar
org.jboss.Main -c minimal


Query 2: find a process by its pid



Here the program id is stored in a file in a well known place


process|pidfile|match=/etc/product/lock.pid


PIQL will take the pid from /etc/product/lock.pid and search for a process with that id


Discovery component revisited



Ok, now that we have seen what we can do with the <process-scan> in the plugin descriptor, lets see how we can process that info. And .. as you may have alreay expected this is again very simple:


List<ProcessScanResult> autoDiscoveryResults =
context.getAutoDiscoveredProcesses();
for (ProcessScanResult result : autoDiscoveryResults) {
ProcessInfo procInfo = result.getProcessInfo();
....
// as before
DiscoveredResourceDetails detail =
new DiscoveredResourceDetails(
resourceType, key, name, null,
description, childConfig, procInfo
);
result.add(detail);
}


So basically you jut need to obtain the list of resources discovered by process scan (autodiscovered as opposed to a manual add) and create the DiscoveredResourceDetails as before. You can use ProcessInfo to get more information about the process and to even decide not to include it in the list of autodiscovered resources (imagine, the PIQL query would have looked for processes where the name starts with post. This would apply to postgres and postmaster. Here you could still filter the ones you really want.


A few more Facets



We have seen the MeasurementFacet in the previous articles. In this section I will briefly mention the other kinds of facets, so that you can get an idea what plugins are capable to do.

ConfigurationFacet



This facet indicats that the plugin is able to read and write the configuration of a managed resource. It goes hand in hand with <resource-configuration> in the plugin descriptor.

OperationFacet



An operation allows you to invoke functionality on the managed resource. This could be a restart operation or whatever you want to invoke on a target. Operations are described in <operation> elements in the plugin descriptor. They can have argument and return values.

ContentFacet



This facet allows the uploading content like files or archives into the managed resource. That way it is possible to centrally manage software distribution into managed resources. There exists a <content> element as counterpart.

The skeleton plugin



The skeleton plugin is a stub to get you started writing a plugin. So instead of copying an existing project like we did in the first place, you can take the skeleton, rename a few things on it and start with writing the plugin. It comes with a plugin descriptor that is filled with comments and also skeletons for the class files.
It is not yet complete, but expect it to be downloadable within the next few days. And if you are all nice to my colleague Jason, he will write a little installer for it, so a few of he manual steps can just be skipped :)


Plugin community


The RHQ wiki now hosts a plugin community page that shows available plugins:
RHQ Plugin Community.
Check it out for any updates about plugin related information - including lists of new plugins.

The end


Ok, that's it. I hope you have enjoyed the posts in the series. I am looking to forward to see you using RHQ and writing great plugins for it.

Please provide feedback - here or at the RHQ forums.

And join us in #rhq on irc.freenode.net




Part 1
Part 2
Part 3
Part 4

Small steps and bicycling

While Marlene did her first steps already some weeks ago, she wasn't to enthusiastic about. But since last weekend she is really 'running' around, enjoying walking on two feet wherever she can. This is really great.

Orlando on the other hand is now since yesterday able to ride a bicycle freely without any help and without stabilizer wheels. He still needs to practice some more before we can leave him into the wild, but its a great achievement too.

Wednesday, May 28, 2008

Reminder: Stuttgart SIG-JBoss meeting about jBPM

This is a reminder about the upcoming Stuttgart SIG-JBoss meeting.




The meeting is about Business process simulation with JBoss jBPM. Bernd Rücker will introduce into jBPM and Business Process Simulation.

The meeting will take place on Jun 5 at 7pm in the premises of Red Hat Germany.

You can read the full (German) announcement on the web site of the Stuttgart
Java User Group (JUGS)

Sunday, May 18, 2008

Writing a RHQ plugin Part 4

Welcome back to the fourth part of the trilogy :)

In the last three parts we have been building our first RHQ plugin. This was working great, but hardcoding the target URL is not really elegant. In this posting I will show you how to make the target URLs configurable from the GUI.

To do this we need to reshuffle things a little:
We will have a generic Server 'HttpCheck' that servers as parent for the individual http-servers that we want to monitor. Those will live as Services under that Server. In the Server inventory we will add the possibility to manually add new http servers on the go.



As you may have already guessed, most of this is done in the plugin descriptor. We also need some small code changes, but those are mostly to separate the concerns of the various files. Lets start with the changed plugin descriptor

Changed plugin descriptor



The boilerplate code is the same as before and will thus not be shown again.


<server name="HttpCheck"
description="Httpserver pinging"
discovery="HttpDiscoveryComponent"
class="HttpComponent">


I have changed the name of the Server to HttpCheck, as this is nicer in the GUI. Now the interesting part starts:


<service name="HttpServer"
discovery="HttpServiceDiscoveryComponent"
class="HttpServiceComponent"
description="One remote Http Server"
supportsManualAdd="true"
>


Here we introduce a Service as child of the above Server. It has its own Plugin Component and Discovery classes (the name of the classes reflect that they belong to this Service). Technically they could have gone into the existing classes, but this way it is more obvious who does what. The attribute supportsManualAdd tells RHQ that those HttpServer Services can be added by the operator in the GUI - just what we want.


<plugin-configuration>
<c:simple-property name="url"
type="string"
required="true" />
</plugin-configuration>


The plugin-configuration tells RHQ that this service can be configured with one simple property, the URL of the remote, which is required. I'll talk a bit more about properties in a minute.

Last but not least, we have moved the two metrics into the service tag (so I don't show them in detail again:


<metric property="responseTime" ...
 
<metric property="status" ...
</service>
</server>


A word about configuration and properties



The configuration type presented here, can be used in two forms within a plugin descriptor: plugin-configuration and resource-configuration. Check the structure diagram in part 2 to see where they belong.

A configuration can consist of a number of sub-elements - notably properties that are children of the abstract configurationType. This is described below.


(Diagram created with http://x2svg.sf.net/)

In addition it is possible to group properties together in the group element. The GUI will show those in their own collapsable section. Allowed child elements of group are one description element and instances of the abstract configuration-property. Templates allow you to preset some configuration properties, so the user has only to fill in stuff that is needed or that they want to change. The template itself is of the configuration type and thus no shown again.

Properties



Properties allow you to specify individual apsects of a configuration. There are three types of properties:

  • simple-property: for one key value pair, as shown above

  • map-property: for a bunch of key value pairs, following the java.util.Map concept

  • list-property: for a list of properties.




(Diagram created with http://x2svg.sf.net/)


As you can see from the structural diagram, it is possible to nest configuration properties within list-property and map-property elements to compose more complex configurations.

If we would want to allow our Services to add multiple remote servers with properties of 'host', 'port', 'protocol' it could look like this:


<plugin-configuration>
<c:list-property name="Servers">
<c:map-property name="OneServer">
<c:simple-property name="host"/>
<c:simple-property name="port">
<c:integer-constraint
minimum="0"
maximum="65535"/>
</c:simple-property>
<c:simple-property name="protocol">
<c:property-options>
<c:option value="http" default="true"/>
<c:option value="https"/>
</c:property-options>
</c:simple-property>
</c:map-property>
</c:list-property>
</plugin-configuration>


This example also shows a few more possibilities we have here:
The port has a constraint so, the GUI can validate the input being between 0 and 2^16-1. For the protocol, we offer the user a drop down list / radio buttons to choose the protocol from. It defaults to 'http', as indicated on the option element.

Change in discovery components



These changes are - as already indicated - more or less just for clarity reasons and to clearly separate out the concerns of each component.

Server level: HttpDiscoveryComponent



The HttpDiscoveryComponent from part 3 of the series only got some minor changes to cater for the change in naming, so I am not showing it here - have a look at the provided sources archive for details.

Service level: HttpServiceDiscoveryComponent



The HttpServiceDiscoveryComponent is more interesting, as we no longer have the hard coded keys, but we get the URL passed in from the GUI when the user is adding a new one.

public class HttpServiceDiscoveryComponent
implements ResourceDiscoveryComponent<HttpServiceComponent>
{
public Set<DiscoveredResourceDetails> discoverResources
(ResourceDiscoveryContext<HttpServiceComponent> context)
throws InvalidPluginConfigurationException, Exception
{
Set<DiscoveredResourceDetails> result =
new HashSet<DiscoveredResourceDetails>();
ResourceType resourceType = context.getResourceType();


This basically the same code that we already know. The interesting part starts now:


List<Configuration> childConfigs =
context.getPluginConfigurations();
for (Configuration childConfig : childConfigs) {
String key = childConfig.getSimpleValue("url", null);
if (key == null)
throw new InvalidPluginConfigurationException(
"No URL provided");


We get a list of plugin configurations passed from the context through which we loop
to determine the passed parameters. As we have only one - the url - this is simple.
If there is no url provided provided we complain (actually that should never happen, as we
marked the property as required in the plugin descriptor above).


String name = key;
String description = "Http server at " + key;
DiscoveredResourceDetails detail =
new DiscoveredResourceDetails(
resourceType, key, name, null,
description, childConfig, null
);
result.add(detail);
}
return result;
}


The remainder is the same as we know it already from the previous part.


Change in plugin components



The change in plugin components in basically that the old HttpComponent got
renamed to HttpServiceComponent and that we have a new "pseudo" HttpComponent on server level.

Server level - HttpComponent



Ok, this one is - as just described - a dummy implementation, as it just provides
placeholder methods from the ResourceComponent interface.


public AvailabilityType getAvailability() {
return AvailabilityType.UP;
}


We set the Availability to being always UP so the component can successfully start. We leave the other two methods just as empty implementations.

Service level - HttpServiceComponent



As indicated this is more or less the old HttpComponent except for one change:


public void start(ResourceContext context)
throws InvalidPluginConfigurationException, Exception
{
url = new URL(context.getResourceKey());
// Provide an initial status, so
// getAvailability() returns up
status = "200";
}


We are now setting the URL when the component is starting be reading it from the passed ResourceContext.

Building the plugin



The updated plugin can be built as shown in the previous part by calling mvn -Pdev install in the root of plugin source tree.

There is currently as of RHQ 1.0 a drawback though: Changes like those above may not be recognized by the system (or worse even throw an Exception in the server at plugin update time) - in this case you have to clean out the database and start with an empty one. We are looking into fixing this.

Summary



You have just seen, how easy it is to pass plugin configuration parameters from the GUI to a plugin by expressing the parameters in the plugin descriptor. Our plugin is now able to have an arbitrary number of child services that each monitor a different remote http server. The changes needed are basically a few more lines of XML and a little bit more Java code.

The sources are again available as zip archive. Just install it like the previous one (overwrite the previous one).

In the next posting I will talk a little more about the OperationFacet and the ConfigurationFacet and will show an example around using process scans for discovery of servers and services.


 


Part 1
Part 2
Part 3
Part 5








Technorati Tags:
, ,

OS X Gui package added to x2svg

For all of us OS X guys, it is always somewhat lame when the favorite app doesn't live in /Applications and can't just be double clicked (Ok, I admit, I love OS X because of its command line and its Unix internals).

So I just created an application bundle of the gui version of x2svg and uploaded it to SourceForge.

Just open the disk image and double click on x2svg.app

Enjoy :-)