Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: update code samples, remove info that is now in parent page.

...

Code Block
xml
xml
borderStylesolid
titleweb.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <description>dbtester Servlet Sample</description>
    <servlet>
            <display-name>ContentTableServlet</display-name>
            <servlet-name>ContentTableServlet</servlet-name>
            <servlet-class>org.apache.geronimo.samples.dbtester.web.ContentTableServlet</servlet-class>
    </servlet>
        
    <servlet>
            <display-name>ListTablesServlet</display-name>
            <servlet-name>ListTablesServlet</servlet-name>
            <servlet-class>org.apache.geronimo.samples.dbtester.web.ListTablesServlet</servlet-class>
    </servlet>
        
    <servlet-mapping>
            <servlet-name>ContentTableServlet</servlet-name>
            <url-pattern>/listContent</url-pattern>
    </servlet-mapping>
        
    <servlet-mapping>
            <servlet-name>ListTablesServlet</servlet-name>
            <url-pattern>/listTables</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
            <welcome-file>index.html</welcome-file>
    </welcome-file-list>

</web-app>

...

Code Block
java
java
borderStylesolid
titleExcerpt from DBManagerBean.java
	private void init    public DBManagerBean() {
		        Kernel kernel = KernelRegistry.getSingleKernel();
		Set        Set<AbstractName> cfList = kernel.listGBeans(new AbstractNameQuery(ResourceSource.class.getName()));
		
		for(Iterator iterator = cfList.iterator();iterator.hasNext();){

			AbstractName name = (AbstractName)iterator.next();
			try {
				
        for (AbstractName name : cfList) {

            try {
                Object rs = kernel.invoke(name, "$getResource", new Object[]{}, new String[]{});
				
				if
                if (rs instanceof javax.sql.DataSource){
					 {
                    DataSource ds = (DataSource) rs;	
					
                    poolMap.put(name.getArtifact().getArtifactId(), ds);
				}
			} catch (GBeanNotFoundException e) {
				e.printStackTrace();
			} catch (NoSuchOperationException e) {
				e.printStackTrace();
			} catch (InternalKernelException e) {
				e.printStackTrace();
			                }
            } catch (Exception e) {
				                e.printStackTrace();
			}
		}
	            }
        }
    }

To retrieve the list of schemas and their tables, the application uses database metadata provided in a JDBC driver. ResultSet meta data has been used to get record related data and to display database contents. The following code snippet depicts how the application retrieves the schemas and their tables in a DataSource.

Code Block
java
java
borderStylesolid
titleExcerpt from DBManagerBean.java
	    public Map getTableList(String poolName) throws SQLException {
		
		
        Map<String, List<String>> tableMap = new HashMapHashMap<String, List<String>>();
		
		if
        if (poolMap.containsKey(poolName)) {
			            DataSource ds = (DataSource)poolMap.get(poolName);
			            Connection con = null;
			            try {
				
				
                con = ds.getConnection();
				
				
                DatabaseMetaData metaData = con.getMetaData();
				                String[] tableTypes = {"TABLE"};
				                ResultSet rs = metaData.getTables(null, null, null, tableTypes);
				
				while
                while (rs.next()){
					 {
                    String schemaName = rs.getString("TABLE_SCHEM");
					                    String tableName = rs.getString("TABLE_NAME"); 
					ArrayList tableList = null;
					
					if
                    List<String> tableList;

                    if (tableMap.containsKey(schemaName)){
						 {
                        tableList = (ArrayList)tableMap.get(schemaName);
						                        tableList.add(tableName);
					}else {
						                    } else {
                        tableList = new ArrayListArrayList<String>();
						                        tableList.add(tableName);
					}
					                    }
                    tableMap.put(schemaName, tableList);
				}
			} catch (SQLException e) {
				throw e;
			}finally {
				if                }
            } finally {
                if (con != null){
					try {
						 {
                    try {
                        con.close();
					                    } catch (SQLException e) {
						                        e.printStackTrace();
					}
				}
			}
		}
		
		                    }
                }
            }
        }

        return tableMap;
	    }

Tools used

The tools used for developing and building the DB List sample application are:

Eclipse

The Eclipse IDE was used for development of the this sample application. This is a very powerful and popular open source development tool. Integration plug-ins are available for the Geronimo application server too. Eclipse can be downloaded from the following URL:
http://www.eclipse.org

Apache Maven 2

Maven is a popular open source build tool for enterprise Java projects, designed to take much of the hard work out of the build process. Maven uses a declarative approach, where the project structure and contents are described, rather than the task-based approach used in Ant or in traditional make files, for example. This helps enforce company-wide development standards and reduces the time needed to write and maintain build scripts. The declarative, lifecycle-based approach used by Maven 1 is, for many, a radical departure from more traditional build techniques, and Maven 2 goes even further in this regard. Maven 2 can be download from the following URL:
http://maven.apache.org

Building and Deploying the Sample Application

Currently this sample application is available from our subversion repository, use the following svn command to retrieve the content:

svn co http://svn.apache.org/repos/asf/geronimo/samples/branches/2.1/samples/dbtester/Image Removed dbtester_home

A directory named dbtester_home will be created when you check out from the source, you can choose a directory name and location convenient to you. We will generically refer to this directory as <dbtester_home>.

Building

The dbtester application comes with a Maven 2 pom.xml script file to help users to build from source code. Open a command prompt window, navigate to the <dbtester_home> directory and run the mvn install command. This will create a dbtester-war-2.1-SNAPSHOT.war file, the application is now ready to be deployed on the Geronimo Application server.

Deploying

Deploying this sample application is pretty straight forward, since we will be using Geronimo Administration Console.

  1. Navigate to Deploy New link from the Console Navigation panel.
  2. Browse to the dbtester-war-2.1-SNAPSHOT.war file from the <dbtester_home> directory in the Archive input box.
  3. Press Install button to deploy the application in the server.

Testing of the Sample Application

To test the sample application, open a browser and type http://localhost:8080/dbtesterImage Removed. This will load the index page of dbtester application which acts as a notice board, with the list of database pools deployed in Geronimo.

The user can directly test the listed database pools with this sample application. Furthermore, the application can be used to list the contents of the databases.

Usage

The app is available at http://localhost:8080/dbtesterImage Added. Note that the sample servers you get if you run maven with -Pit will not show any data since they dont include any database pools. A more realistic view comes from installing the plugin or app on a full geronimo server.Image Removed

Summary

This article has shown you how to access Geronimo related features from a J2EE application. You followed step-by-step instructions to build, deploy and test a sample application to elaborate these features. This sample application can be used as tester for database connection pools deployed in Geronimo.