You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 21 Next »

Introduction

Previous versions of Geronimo have included a noncustomizable, static administration console. Often times when a user installs Geronimo, the Administration Console will be the first place the go in order to configure their application server. For this reason, it is important that the administration console be a feature that provides users with the necessary functionality to easily manage plugins and components of the server. This new administration console allows much more dynamic control over administration features. As such, it more closely reflects the highly flexible and pluggable underlying architecture of Geronimo. What we have done here is to provide a framework for plugin developers to include administration console extensions for their plugins. The aim has been to provide an easy and flexible solution with a simple architecture such that users of Geronimo can intuitively configure components, and developers can easily expand upon the foundation laid out here.

The purpose of this document is to provide developers with the necessary instructions to utilize the infrastructure provided by the administration console to add console extensions for their Apache Geronimo plugins. The first portion of this document will describe the plumbing of the system and how it works, and the latter portions will provide a solid example of what to expect in order to actually get your own functioning console extension.

This document is organized in the following sections:

Architecture

TODO: Architecture goes here

How to Develop an Administrator Console Extension (ACE)

TODO: An intro should go here

Different ways of structuring

The whole concept behind creating an ACE for Geronimo is that you are adding an extension in the form of portlets to the administrator console. You can package this however you like. Some options are as follows:

  1. Your portlets
  2. Your portlets + your related component
  3. Your portlets which declares a dependency on your related component

Create a portlet

In their most fundamental state, an ACE defines where to place new/old portlets in your console. Portlets are the fundamental building block of the administrator console. We are using Pluto 2.x as our portal engine since it closely conforms to JSR 168 [link to JSR 168]. We will not go into the details of how to develop portlets since you can find many tutorials and tools that are much better at this. [many tutorial links here]. You will need the appropriate "web.xml" and "portlet.xml" files defined. As a simple example, refer to the [link to section] HelloWorldPortlet defined at the end of this section.

Add an ACEGBean

To add an ACEGBean to your deployable archive file, you need to include the following to your "geronimo-web.xml" deployment plan:

  1. Declare a dependency on the "pluto-portal"
    <dependencies>
        ...
    <dependency>
        <groupId>org.apache.geronimo.portals</groupId>
        <artifactId>pluto-portal</artifactId>
    </dependency>
    </dependencies>
    
  2. Define an ACEGBean
    <gbean name="example" class="org.apache.geronimo.pluto.ACEGBean">
        <attribute name="pageTitle">Testing</attribute>
        <attribute name="portletContext">/HelloWorldPortlet</attribute>
        <attribute name="portletList">[HelloWorldPortlet]</attribute>
    </gbean>
    
    where the attributes are defined as follows:
  • pageTitle: The name of the page to add these portlets to (new or existing)
  • portletContext: The context of where the portlets are installed.
  • portletList: A comma-delimited list of the portlets to be added to this page.
Sample geronimo-web.xml
<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.2">
    <environment>
        <moduleId>
            <groupId>org.apache.geronimo.portals</groupId>
            <artifactId>pluto-example</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>war</type>
        </moduleId>
        
        <dependencies>
            <dependency>
                <groupId>org.apache.geronimo.portals</groupId>
                <artifactId>pluto-container</artifactId>
            </dependency>
        </dependencies>
    </environment>
    
    <context-root>/HelloWorldPortlet</context-root>

    <gbean name="PlutoTest" class="org.apache.geronimo.pluto.ACEGBean">
        <attribute name="pageTitle">Hello</attribute>
        <attribute name="portletContext">/HelloWorldPortlet</attribute>
        <attribute name="portletList">[HelloWorldPortlet]</attribute>
    </gbean>
</web-app>

Putting it together

Add your modified "geronimo-web.xml" deployment plan to your WAR or CAR in the WEB-INF folder. Also, if you are including portlets, your archive file should contain the appropriate class files as well as the "web.xml" and "portlet.xml" files.

What is an example structure for a simple war?

  • HelloWorldPortlet.war
    • WEB-INF/
      • classes/
        • (portlet class files)
      • geronimo-web.xml
      • portlet.xml
      • web.xml

Deploying the application

Deploy the archive as you normally would either using the "deploy" command or by using the Administrator Console's "Deploy New" or "Plugins".

  1. Command Line: <geronimo bin folder>/deploy.bat deploy <path to war>
    Example:
    cd c:/g/target/geronimo-tomcat6-minimal-2.0-SNAPSHOT/bin/
    deploy.bat deploy c:/HelloWorldPortlet.war
  2. Using the Admin Console:

Verifying installation

Go to http://localhost:8080/pluto/ to verify that the portlets were added to the correct page. (You may need to refresh the browser if you deployed from the command line.)

Sample Extension

This is a working simple example of an Administration Console Extension.
Download the example WAR

HelloWorldPortlet.java
package org.apache.pluto.examples;

import java.io.IOException; 
import java.io.PrintWriter;

import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

/**
 * A very simple portlet example.
 * This portlet displays 'Hello World' to the end user
 */
public class HelloWorldPortlet extends GenericPortlet {

    // This function is called when a user requests to view this portlet (by
    // navigating to the webpage in Pluto)
    public void doView(RenderRequest request, RenderResponse response)
            throws PortletException, IOException {

        // Set the response to read HTML
        response.setContentType("text/html;charset=UTF-8");

        // Required call for use of getWriter() and getPortletOutputStream()
        PrintWriter out = response.getWriter();
        // Write content to the portlet
        out.println("<h1>Hello World</h1>");
    }
}
  • No labels