Everything Java Apache Geospatial Open Source. Hello Shinning Stars!!! Vincent Massol, Raphael Luta, Santiago Gala, Carsten Z.

Tuesday, December 06, 2005

The issues http://issues.apache.org/jira/browse/JS2-395 and http://issues.apache.org/jira/browse/JS2-350 will be interesting to watch because they enable database managment of PSML files and Graffito provides a graphical CMS to PSML content.

Thursday, December 01, 2005

I've been studying the data access methods used by MapServer and in theory any ODBC connection can be used to obtain data from a relational database. That's probably what we want. Afterwords all we need is a nifty car icon to indicate the direction that the car is travelling (the direction part may be tricky). MapServer uses SYMBOLS to label geo features using an icon image.

MapServer supports four categories of data access. The first is the basic file method. It can access files of type shape, arcinfo, mapinfo, us census tiger, csv, etc. These are read only methods of accessing data. Other sources could update these files and MapServer would get the updates. This wouldn't be a good idea because there could be a io conflict.

ODBC can be used to access relational databases (SQL Server, Oracle, MySQL, and company)

The third category of data access is not applicable to our work. MapServer can access data provided by a Spatial database engine like ArcSDE, Oracle Spatial, or PostGIS. These solutions provide spatial indexing and special geographic types. I think this is out of our scope. It would take longer to set up, it is more complex to install. I would suggest exploring this option if you expect to address larger clients.

The last thing that I want to tell you about is MapScript. MapServer exposes their application programing interface so that hackers and integraters can do custom things with MapServer in the language of their choice (Java,PHP,Perl,Ruby). We are not using it but It can be used to create maps and plot data, as well as query data. I will deliver you an example that I found on the net.

And lastly, I looked at your database and the GPSActive table looks like it could be plotted on the Map using the ODBC solution. There were duplicates in the table but they had the same latitude and longitude. MapServer will plot all data from the table. If we want to get fancy and label each car with their own icon we will have to read the database using PHP and plot using MapScript. Give me some more thoughts on what you need.
Here is a simple script that I found using ms4w from maptools.org. It helped me get a grasp on MapScript PHP for MapServer.

<?php

/*
Application: QuickMap
Purpose: Use this file to test mapfiles
Authors: Bill Bronsema (bbronsema@dmsolutions.ca)
Philip Donaghy (philip.donaghy@gmail.com)
Copyright: 2005, DM Solutions Group Inc.
Instructions: - modify the MAPFILE path and the name of the phpmapscript
MODULE (lines 16 & 17)
- in a web browser goto http://127.0.0.1/quickmap.php
- an image of your data should be displayed in your browser, or
a MapServer error
*/

// define variables
define( "MAPFILE", "map/MorganCo.map" );
define( "MODULE", "php_mapscript_44.dll" );

// load the mapscript module
if (!extension_loaded("MapScript")) dl(MODULE);

// open map
//$oMap = ms_newMapObj( MAPFILE, dirname( MAPFILE ) );
$oMap = ms_newMapObj( MAPFILE );

// set projection
//$oMap->setProjection("init=epsg:42304");

// set size
$oMap->setsize(1200, 700);

// set image format
$oMap->selectoutputformat("png");

// draw map
$oImage = $oMap->draw();

// set header
header("Content-type: image/png");

// output map
$url = $oImage->saveImage("");

?>

Monday, November 14, 2005

Clarify the following skin, theme, layout-decorator, portlet-decorator.
I'm thinking about Jetspeed documentation. Correct me if I'm wrong, it sucks, so what can be done about it. Here are things that can be done by Users, Developers, and Administrators.

User can CustomizeTheLayout, CustomizeTheStyle, CustomizeTemplates, CreatePages, CreateFolders, CreateSeparators, and CreateLinks.

Developers can WritePortlets, ConfigurePortlets, WriteLayouts, WriteStyles, as well as anything a user can do.

Administrators can InstallJetspeed, OptimizeJetspeed, ClusterJetspeed, CreateUsers, CreateGroups, and CreateRoles. As well as anything a user or developer can do. They are extremely lazy people who often say "That's the developers job".
[#JS2-188] Implement the LDAP - ASF JIRA summarizes the development of LDAP authentication and authorization.

Another important feature of Jetspeed is its ability to integrate with Apache Derby.
The Jetspeed issue tracker, Browse Project - ASF JIRA, provides quick access to outstanding, resolved, added, updated, and important bugs.

The most significant recently added to jetspeed are translations, portlet api compliance, statistics and page manager implementations.
A quick thing that anyone can do with Jetspeed is change the Page, Link, PageSecurity, FolderMetadata in the JS2_SOURCE/src/webapp/WEB-INF/pages/ directory.

Sunday, November 13, 2005

Installing wifi card on my toshiba 1800-100 with suse 10.0 and ndiswrapper. The card is a Belkin 54g "High-Speed Mode Wireless G Notebook Network Card" model number is f5d7011. The ndiswrapper package version 1.5 requires the kernel sources and gcc which were not installed by default by suse 10.0.

Just follow the ndiswrapper guide and it should work.

Wednesday, November 09, 2005

A MapServer portlet requires the following elements:
  • MapServer Software
  • Geographic Data
  • MapServer Configuration
  • Apache Portlet Bridge for MapServer
  • Jetspeed Configuration
MapServer Software
MapServer is a C program therfore you must obtain the proper version for your target operating system. Linux and Unix users will find that downloading the source and compiling it is the simplest alternative. Listed here are links to MapServer source and its required dependencies. Build each of these packages using the ./configure, make, and sudo make install commands. Building MapServer will tell you which dependencies are missing on your system.

MapServer-4.6.1 source code
GD-2.0.33 source code
Freetype-2.1.10 source code
Jpeg-6b source code
Png-1.2.8 source code

Windows users can use the ms4w package provided by maptools.org.

Mac OS users will find help here.

Geographic Data
The MapServer demo includes some sample geographic data.

MapServer Configuration
MapServer is configured using a MapFile. The demo configuration file is itasca.map.

Apache Portal Bridge for MapServer
A contribution to the Apache Portal Bridges project yeilded a component capable of executing the MapServer program. This bridge uses the portlet initalization parameters to determine the inital map. MapScript for Java is on the roadmap.

Jetspeed Configuration
A simple modification to any existing portlet.xml is enough to deploy a new MapServer map. See the attachment in the Jira issue.

Thursday, November 03, 2005

I just realized the best way to trick google into better reference. That is to publish multiple formats of the same document. Word, OpenOffice, PDF, TXT, RTF. Give me credit if you use this method.

Tuesday, October 25, 2005

I am going to write a MapServer portlet. The mapserv cgi script can be used on the command line like this.


./mapserv QUERY_STRING="layer=Citylimits&layer=Citywards&zoomdir=1&zoomsize=2&map=%2Fms4w%2FApache%2Fhtdocs%2Fmap%2FMorganCo.map&program=%2Fcgi-bin%2Fmapserv&root=%2Fmap&map_web_imagepath=%2Ftmp%2F&map_web_imageurl=%2Fmap%2Ftmp%2F&map_web_template=map.html"


The parameter program will be replaced by a servlet mapping. Therefore all request to the url, /browse/map, will be redirected to the mapserver.

The template will have all
html
and
body
tags removed so that it is an html page fragment.

A MapServerPortlet class will implement the doView method and encapsulate the mapserv binary execution. The portlet requires the following settings, the location of the mapserv binary, the location of the map file, the initial layer to display, the template to use, the absolute uri to the servlet mapping, the temporary image directory, the temporary image uri, the zoom mode, the zoom value.

A Jetspeed bridge is required. It is based on the Perl bridge which was too busy for the mapserver needs, so I just adapted it to the simplicity of mapserver.
MapServer 4.6 requests can probably be broken down into the following steps. Here the common name is presented along with its corresponding code fragment and/or the name of the source file.
  • Create a mapserver object using mapserv.c.loadParams and mapserv.c.loadMap
  • Parse parameters mapserv.c.loadForm
  • Determine the mode. One of three are know to me, browse,query, and nquery. This is determined by the msObj.Mode property. Most of this logic is in mapserv.c.main.
Only the Browse mode is explained here.
  • Extent, scale, and query files are evaluated using mapserv.c.setExtent mapserv.c.checkWebScale and mapserv.c.msLoadQuery
  • Images are generated using maptemplate.c.msGenerateImages
  • Map is drawn using mapdraw.c.msDrawMap
  • Map is drawn using mapdraw.c.msDrawQueryMap
  • Legend is drawn using maplegend.c.msDrawLegend
  • Scalebar is drawn using mapscale.c.msDrawScalebar
  • Reference map is drawn using mapraster.c.msDrawReferenceMap

NOTES : Nice things to have.
  • Two maps on one page.

Sunday, October 23, 2005

Implicit versus explicit application development. Creating a application that relies on implicit configuration or rules is a bad idea. I came across a struts configuration in Jetspeed that made me think of this subject. A $M$P pattern indicated that pages exist with the /module/path. Although this case is not an implicit declaration programming with out explicitly declaring classes, configuration, or properties will only create confusion and hard to debug applications.

Saturday, October 22, 2005

Another short tutorial on the Jetspeed portlet.

CreateYourOwnSimpleServletPortal

= The portlet.xml =

Add a new portlet tag to one of the existing portlet applications. The security application is know to work.

{{{
edit $JETSPEED2_SRC/applications/security/src/webapps/WEB-INF/portlets.xml
}}}

The portlet tag can be placed anywhere inside the root element called portlet-app.

{{{


ViewPage
/WEB-INF/security/login/simple.jsp

MySimplePortlet
org.apache.portals.bridges.common.GenericServletPortlet

}}}

= The psml =

Add a fragment tag to one of the psml files. The default page is appropriate.

{{{
edit $JETSPEED2_SRC/src/webapp/WEB-INF/pages/default-page.psml
}}}

Note that the id must be unique. Using the same id twice will confuse Jetspeed. There is no error handling regarding this point so be creative.

{{{




}}}

= The JSP =

We did say that this is a simple servlet portlet, so the JSP will be simple.

{{{
edit $JETSPEED2_SRC/applications/security/src/webapps/WEB-INF/security/login/simple.jsp
}}}

Here are the contents of a very simple JSP.

{{{
<%@page import="java.util.Date"%>
The time is <%=(new Date()).toString()%>
}}}

Friday, October 21, 2005

Please read QuickstartForTheImpatient before before proceeding.

To simplify this document $JS2_PAGES will represent the directory path src/webapp/WEB-INF/pages of the Jetspeed 2 source code.

= Jetspeed Portlet Layout =

The Jetspeed portlet layout is defined by a number of mechanisms. The $JS2_PAGES file structure has an effect on the layout. Here are some modifications you can do without breaking the build.

== Change the Default Page ==
Modify the column and row indexes for some or all of the portlets on the welcome page($JS2_PAGES/default-page.psml).

== Add Additional Links ==
Create a file called myLink.link in the directory $JS2_PAGES. Refer to or copy one of the other .link files for the proper syntax.

== Create a New Tab ==
Tabs can be created by simply creating a psml file in the $JS2_PAGES directory. Copy $JS2_PAGES/default-page.psml to $JS2_PAGES/my-page.psml. Note that the security-constraint tag in psml defines the roles authorized to view this page.

== Modify the Menu ==
The left menu is defined in the folder.metadata file of each directory of the $JS2_PAGES directory.
I see that in Jetspeed's demo portlets the web.xml defines the following tags security-constraint, login-config, and multiple security-role tags. The meaning of these are explained here.

security-constraint defines a list of web resources (urls) protected by web security and a list of roles authorized to access these resources.

login-config defines the authentication method and the realm name. Optionally a login page and a error page can be defined.

The security-role tag must appear if this is a custom role that does not already exist in the container.
Seems there are some patches to do for Jetspeed.

demo/src/webapp/WEB-INF/jetspeed-portlet.xml and demo/src/webapp/WEB-INF/portlet.xml could use some more languages. Some dc:title tags with attributes xml:lang="en" to support Japanese, Chinese, Spanish, Italian as specified in the file resources.

Tuesday, October 18, 2005

I am writing a JetSpeed 2 quickstart development guide for the impatient.

Requirements

JDK 1.4.1 or higher
Maven 1.0.2
Tomcat 5.5.12

Set the following environment variables.

Linux and Unix

export MAVEN_HOME=/home/opensource/apache-maven-1.0.2/
export CATALINA_HOME=/home/opensource/apache-tomcat-5.5.12/
export JETSPEED2_SRC=/home/opensource/jetspeed-2/


Windows

set MAVEN_HOME=/home/opensource/apache-maven-1.0.2/
set CATALINA_HOME=/home/opensource/apache-tomcat-5.5.12/
set JETSPEED2_SRC=/home/opensource/jetspeed-2/


Modify Tomcat's tomcat-users.xml to contain the following lines


<role rolename="manager">
<user username="j2deployer" password="j2deployer" roles="manager">


Building

maven -Dorg.apache.jetspeed.server.home=$CATALINA_HOME -Dorg.apache.jetspeed.server.shared=$CATALINA_HOME/shared/lib -Dorg.apache.jetspeed.deploy.war.dir=$CATALINA_HOME/webapps -Dorg.apache.jetspeed.services.autodeployment.user=j2deployer -Dorg.apache.jetspeed.services.autodeployment.password=j2deployer -Dorg.apache.jetspeed.catalina.version.major=5.5 -Dorg.apache.jetspeed.project.home=$JETSPEED2_SRC initMavenPlugin

maven -Dorg.apache.jetspeed.server.home=$CATALINA_HOME -Dorg.apache.jetspeed.server.shared=$CATALINA_HOME/shared/lib -Dorg.apache.jetspeed.deploy.war.dir=$CATALINA_HOME/webapps -Dorg.apache.jetspeed.services.autodeployment.user=j2deployer -Dorg.apache.jetspeed.services.autodeployment.password=j2deployer -Dorg.apache.jetspeed.catalina.version.major=5.5 -Dorg.apache.jetspeed.project.home=$JETSPEED2_SRC j2:start.test.server

maven -Dorg.apache.jetspeed.server.home=$CATALINA_HOME -Dorg.apache.jetspeed.server.shared=$CATALINA_HOME/shared/lib -Dorg.apache.jetspeed.deploy.war.dir=$CATALINA_HOME/webapps -Dorg.apache.jetspeed.services.autodeployment.user=j2deployer -Dorg.apache.jetspeed.services.autodeployment.password=j2deployer -Dorg.apache.jetspeed.catalina.version.major=5.5 -Dorg.apache.jetspeed.project.home=$JETSPEED2_SRC allClean allBuild


Running

maven -Dorg.apache.jetspeed.server.home=$CATALINA_HOME -Dorg.apache.jetspeed.server.shared=$CATALINA_HOME/shared/lib -Dorg.apache.jetspeed.deploy.war.dir=$CATALINA_HOME/webapps -Dorg.apache.jetspeed.services.autodeployment.user=j2deployer -Dorg.apache.jetspeed.services.autodeployment.password=j2deployer -Dorg.apache.jetspeed.catalina.version.major=5.5 -Dorg.apache.jetspeed.project.home=$JETSPEED2_SRC j2:start.production.server

maven -Dorg.apache.jetspeed.server.home=$CATALINA_HOME -Dorg.apache.jetspeed.server.shared=$CATALINA_HOME/shared/lib -Dorg.apache.jetspeed.deploy.war.dir=$CATALINA_HOME/webapps -Dorg.apache.jetspeed.services.autodeployment.user=j2deployer -Dorg.apache.jetspeed.services.autodeployment.password=j2deployer -Dorg.apache.jetspeed.catalina.version.major=5.5 -Dorg.apache.jetspeed.project.home=$JETSPEED2_SRC j2:quickStart


I don't understand why the org.apache.jetspeed.project.home is required. Can't this be obtained from Maven.

Tomcat 5.5 is telling me that "[/jetspeed] startup failed due to previous errors". The errors and warnings are in order of appearance.

WARNING: A docBase /home/opensource/soft/bin/apache-tomcat-5.5.12/webapps/jetspeed inside the host appBase has been specified, and will be ignored

INFO: WARNING: Security role name admin used in an without being defined in a

SEVERE: Error filterStart

Tuesday, August 16, 2005

AndroMDA Cartridges - AndroMDA Cartridges will tell you the required elements of a AndroMDA Cartridge (namespace.xml, andromda-cartridge.xml and templates).
See the Profile for classes that represent uml objects.

cartridges/andromda-bpm4struts/src/java/org/andromda/cartridges/bpm4struts/Bpm4StrutsProfile.java
cartridges/andromda-bpm4struts/src/java/org/andromda/cartridges/bpm4struts/Bpm4StrutsUtils.java

See the metafacades directory for classes that represent uml profiles.

cartridges/andromda-bpm4struts/src/java/org/andromda/cartridges/bpm4struts/metafacades
cartridges/andromda-bpm4struts/src/java/org/andromda/cartridges/bpm4struts/metafacades/StrutsAttributeLogicImpl.java
cartridges/andromda-bpm4struts/src/java/org/andromda/cartridges/bpm4struts/metafacades/StrutsJspLogicImpl.java
cartridges/andromda-bpm4struts/src/java/org/andromda/cartridges/bpm4struts/metafacades/StrutsManageableEntityAttributeLogicImpl.java
cartridges/andromda-bpm4struts/src/java/org/andromda/cartridges/bpm4struts/metafacades/StrutsParameterLogicImpl.java
cartridges/andromda-bpm4struts/src/java/org/andromda/cartridges/bpm4struts/metafacades/StrutsUseCaseLogicImpl.java

Monday, August 15, 2005

Code generation is discussed on this tss article. People from XDoclet, Middlegen, and AndroMDA contribute ideas on the best way to use meta data.

Friday, July 22, 2005

This is completely unrelated to Geronimo but important to creative people. When creating a name use something that the reader wants. In this case it is a job, Media Job.

Tuesday, July 19, 2005

I am at ApacheCon Europe 2005 and the focus is on Java, Spring has been integrated in JetSpeed, ServiceMix, AndroMDA, Security, clustering, transaction managment, and POJOs. POJOs are important in web services jaxrpc which uses Java Service Enpoint JSE technology.

Tuesday, July 12, 2005

Thursday, June 30, 2005

The Apache Geronimo code source can be imported into eclipse. Or, preferably, one can change the workspace to the location of the directory where subversion checked out geronimo (the directory containing the directory geronimo). Proceed with the creation of a "New Java Project" by naming the project geronimo. Eclipse then reports some 30,000 compile errors. Enabling the "assert" keyword resoves a large number of these. Remove all the libraries detected by Eclipse and proceed to add the following libraries from your maven repository. Libraries used by geronimo include,
  • cglib (resolves 1% of the errors)
  • mx4j and mx4j remote (resolves less than 2% of the errors)
  • log4j (resolves less than 1% of the errors)
  • xml-resolver (resolves less than 1% of the errors)
  • junit (25% of the errors) and is only required for the tests
The geronimo-kernel, geronimo-system, geronimo-common and a slew of j2ee specs should now compile successfully. The j2ee specs compiled include transactions, ejb, jms, servlet, jsp, connectors, activation, deployment, authorization contract for containers, jmx, javamail, xml registries, saaj, jaxrcp, j2ee, and corba. Notice that geronimo-kernel and geronimo-deployment have circular dependency. Then add the xmlbeans library.
  • xmlbeans (resolves 51% of the errors)
XMLBeans is a special case because this is required by the generated code, but is no the less required at runtime.
  • concurrent (2%)
  • exolab castor 0.9.5.3 (6%)
  • axis 1.3 (4%)
Concurrent, Castor, and Axis resolve a number of build errors suggesting that each play an important role in Geronimo compilation. At this point the web service and axis modules are compiling.
  • howl (%)
Howl assists in Geronimo transaction managment. The Transaction module is now compiling.
  • activeio
  • ant
  • antlr
  • commons-collections
  • commons-cli
  • commons-fileupload
  • commons-httpclient
  • commons-io
  • commons-jelly
  • commons-logging
  • commons-modeler
  • commons-primatives
  • maven
  • regexps
  • velocity
These libraries result in the resolution of 6% of the compile errors.
  • hsqldb
HSQLDB is required for some of the security tests. Otherwise the security module is now compiling.
  • openejb
  • openorb
These libraries support common j2ee implementations of ejb and corba.

Security is now compiling.
  • axiondb
  • axis scout
  • bountycastle
  • catalina
  • derby
  • jetty
  • mockobjects
  • objectweb asm
  • spring
  • xfire
  • xstream
The frameworks that are extended by Geronimo are AxionDB, Axis Scout, BountyCastle, Catalina, Derby, Jetty, MockObjects, ObjectWeb ASM, Spring, XFire, and XStream. Adding these libraries resolves 10% of the compile errors.
  • geronimo-axis-builder-1.0-SNAPSHOT.jar
  • geronimo-client-builder-1.0-SNAPSHOT.jar
  • geronimo-connector-builder-1.0-SNAPSHOT.jar
  • geronimo-j2ee-builder-1.0-SNAPSHOT.jar
  • geronimo-j2ee-schema-1.0-SNAPSHOT.jar
  • geronimo-jetty-builder-1.0-SNAPSHOT.jar
  • geronimo-naming-1.0-SNAPSHOT.jar
  • geronimo-naming-builder-1.0-SNAPSHOT.jar
  • geronimo-security-builder-1.0-SNAPSHOT.jar
  • geronimo-service-builder-1.0-SNAPSHOT.jar
  • geronimo-spring-builder-1.0-SNAPSHOT.jar
  • geronimo-tomcat-builder-1.0-SNAPSHOT.jar
  • openejb-builder-1.0-SNAPSHOT.jar
These xmlbeans libraries represent configuration utilities used for reading and writing xml input and output. Adding these libraries to your Eclipse project classpath resolves 12% of the compile errors. All Geronimo modules that suffix "-builder" represent some kind of configuration processing library.

The remaining errors were caused by duplicate class files. I deleted them to move forward.

This is where it gets interesting. The server is started using the org.apache.geronimo.system.main.Daemon class in the system module. It requires the server.jar to be on the classpath. It is found in the modules/assembly/target/geronimo-1.0-SNAPSHOT/bin directory. Debugging this now. There are several errors that need to be work out.

Wednesday, June 29, 2005

The Eclipse UML2 Project is rapidly becoming a strong alternative to using MagicDraw for Andromda.
There are some electronic books listed on the Apache Geronimo Documentation page. Authors include Katia Aresti González, David Blevins, Aaron Mulder.
It never hurts to browse the Apache Geronimo Javadoc API.
There are five Apache Geronimo Mailing Lists, dev, user, source, pmc, and tck. The last two are reserved for people doing project managment and certification respectfully.
Get to know the Apache Geronimo Committers.

Tuesday, June 21, 2005

tomlauren.com: J2EE Best Practices. I found this site very informative concerning JBoss transactions isolation and tuning.
This Core Developers Network document describes "transaction-isolation" configuration and programming strategies.

Wednesday, June 01, 2005

Thursday, May 26, 2005

You can add the AndroMDA Schema2XMI - AndroMDA - Schema2XMI to the list of reverse engineering database tools.

Friday, May 20, 2005

Who should maintain open source projects? | InfoWorld | Column | 2005-04-11 | By Neil McAllister. JBoss vs Joe. This article explains the business strategy behind two open source models. GPL vs BSD. The license is not mentioned, but ultimately it determines everything.

Thursday, April 21, 2005

Overview (UML 1.4 with Diagram Interchange API) is a OMG standard.
Much of the Agentis Platform is based on open source projects. These include Ant, JBoss, CVS, CruiseControl, and NetBeans.

Wednesday, April 20, 2005

These are keywords that I obtained from James Odell's paper, UML 2.0 and Agents: How to Build Agent-based Systems with the new UML Standard.

Software methodology = modeling language + software process

Agent technology software system characteristics = situation awarness + intelligent behavior + distributed + mobility + nomadic users

SODA = Societies in Open Distributed Agent spaces = agent societies + agent environments + inter-agent aspects.

Agent methodology = external viewpoint (Services Purpose and Responsibitities) + internal viewpoint (Beliefs Goals and Plans).

See MESSAGE, Tropos, Prometheus, and JACK.

See section 3.1 of James Odell's paper.

MDA is the process of converting UML to an deployable application.

The UML models that are used by MDA are in two categories. Structural Diagrams = Static Aspects. Behavioral Diagrams = Dynamic Aspects.

Structural Diagrams = class + object + composition + component + deployment
Behavioral Diagrams = use case + activity + state + sequence + communication + interaction

Generating deployable applications is the final stage of MDA. It requires these models: Computational Independent Model (CIM), Platform Independent Model (PIM), and the Platform Specific Model (PSM). These are the models created during generation. See AndroMDA for more information on MDA. See Agentis for more information on Agent technology.
The FIPA Abstract Architecture for Agent technolgies is the recomended reference for the Java specification request (JSR) for Java Agent Services.
A list of tools and resources related to UML 2.0 and Agent technology, AUML Web Site
I just met James Odell and I read one of his papers on Agent technology. Some key words that apply to Agent technology are People Groups Roles Organisation Issues Events Ontology Emersion Cohesion and Coupling. UML 2.0 can be used to express Agent oriented systems using the the latest diagrams and extensions. See his most recent paper. James Odell--Publications
This series is on Agent technology, a branch of Artificial Intelligence. These are some sites I know that reference Agents : Open Directory - Computers: Artificial Intelligence: Agents, http://www.objs.com/agent/

Friday, April 15, 2005

Get to know Geronimo Architecture. See Architecture - Geronimo Wiki
Geronimo security, Security - Geronimo Wiki
Read this book on Geronimo, Chariot Solutions | J2EE Architects | Apache Geronimo documentation
I just read about the CMP implementation. Things to not is that cardinal relationships are supported, auto generation of primary keys, TranQL is the intermediate framework between OpenEJB and the underlying database. a connection factory is configured using the cmp-connection-factory. See Working with Enterprise JavaBeans - Geronimo Wiki
The last look at this page reveals CMP guide lines for Geronimo, Working with Enterprise JavaBeans - Geronimo Wiki
This are the J2EE naming conventions used by Geronimo, Naming - Geronimo Wiki
Logging the Geronimo server is most important if you want to find those bugs, Logging - Geronimo Wiki
Geronimo uses the MX4J implementation of the Java Managment Extension. Here is a utility for working with GBeans, JMXUtil (Geronimo :: Kernel 1.0-SNAPSHOT API)
Geronimo has a kernel and obviously this is where it is documented, org.apache.geronimo.kernel.config (Geronimo :: Kernel 1.0-SNAPSHOT API)
org.apache.geronimo.gbean (Geronimo :: Kernel 1.0-SNAPSHOT API), the javadoc for GBeans.
Some key Open Source developers seem to be working for Chariot Solutions | J2EE Architects | Home. Projects include Geronimo, JBoss, Jetspeed.
I met Bob McWhirter at ApacheCon 2004. Take a look at the latest thing he is doing. OpenXource: Crossings: Latest
Using the ActiveMQ embedded broker. See ActiveMQ - How do I embed a Broker inside a Connection
ActiveMQ features include a list of protocols used to determine the transport mechanism. See ActiveMQ - Protocols
Building ActiveMQ to test the peer environment from laptops producing and consuming purchase orders regardless of being connected to the Internet. JMS solution uses the peer and reliable protocol provided by ActiveMQ.

Testing requires SVN, Java, Maven, and the ActiveMQ source code. These are the quick start commands,


svn co svn://svn.activemq.org/activemq/scm/trunk/activemq
cd activemq
maven
cd modules/assembly
maven server
maven producer
maven consumer


More to come on customizing and integrating this configuration.

References :

http://activemq.codehaus.org/Examples
http://activemq.codehaus.org/SVN
http://maven.apache.org/
http://java.sun.com/

Friday, April 08, 2005

Wednesday, April 06, 2005

Tuesday, April 05, 2005

IconBAZAAR is classic. It is nice to see that it is still alive.
There is a JMS sample provided in the Gluecode Software | Geronimo Documentation & Samples distribution.
Deployment - Geronimo Wiki contains sample deployment commands.
Running - Geronimo Wiki lists the optional Config IDs used when starting Geronimo.

Wednesday, March 30, 2005

I start Geronimo using this command,

java -jar bin/server.jar org/apache/geronimo/DebugConsole org/apache/geronimo/RuntimeDeployer org/apache/geronimo/DefaultDatabase org/apache/geronimo/SystemJMS

The Debug, Deployer, JMS, and Database GBeans are started. As stated var/config/config.list contains the last stable config therefore subsequent restart is done using this command,

java -jar bin/server.jar

Geronimo EAR Deployment is done using this command,

java -jar bin/deployer.jar deploy ~/agentis/agentis/Agentis370_350IDE/work/SimpleProjectTest/dist/SimpleProjectTest-agent.ear
Be aware that the file $GERONIMO_HOME/var/config/config.list maintains the list of modules started by the Geronimo Server. By default they are org/apache/geronimo/Server and org/apache/geronimo/System. I use this the server.jar executable to add them but you can add them manually if you like.
Today Geronimo is Running. I followed the Building instructions. The debug console was deployed and executed without errors.

Tuesday, March 29, 2005

Wednesday, March 02, 2005

Creative Commons deserves a link. They are making music communities.

Sunday, February 27, 2005

My XMLBeans sample project. This sample integrates Velocity and XMLBeans to produce an commons-sql datamodel from an xml schema.

Wednesday, February 23, 2005

Agentis Software is a potential client. Their software is based on UML, OGM, Agents, J2EE, Process, Plans, and SODA.
I am on a domain naming spree. Welcome to the site of Consultant Philip Mark Donaghy

Monday, February 14, 2005

Thursday, February 03, 2005

This is quite a long exception. The cause is included and the problem is clear.


java.sql.SQLException: Table not found: DECISION_ITEM in statement [select decisionit0_.ID as ID, decisionit0_.class as class, decisionit0_.ROOT_ITEM as ROOT_ITEM, decisionit0_.YES_SUCCESSOR_FK as YES_SUCC4_, decisionit0_.NO_SUCCESSOR_FK as NO_SUCCE5_, decisionit0_.NAME as NAME, decisionit0_.PROMPT_STRING as PROMPT_S7_ from DECISION_ITEM decisionit0_ where (decisionit0_.ROOT_ITEM=true )]
at org.hsqldb.jdbc.jdbcUtil.throwError(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source)
at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.prepareStatement(BaseWrapperManagedConnection.java:355)
at org.jboss.resource.adapter.jdbc.WrappedConnection.prepareStatement(WrappedConnection.java:205)
at net.sf.hibernate.impl.BatcherImpl.getPreparedStatement(BatcherImpl.java:257)
at net.sf.hibernate.impl.BatcherImpl.getPreparedStatement(BatcherImpl.java:232)
at net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.java:65)
at net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:779)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:265)
at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)
at net.sf.hibernate.loader.Loader.doList(Loader.java:1033)
at net.sf.hibernate.loader.Loader.list(Loader.java:1024)
at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:854)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1544)
at net.sf.hibernate.impl.QueryImpl.list(QueryImpl.java:39)
at org.andromda.samples.animalquiz.decisiontree.DecisionItemFactory.findRoot(DecisionItemFactory.java:43)
at org.andromda.samples.animalquiz.decisiontree.DecisionServiceBeanImpl.handleGetFirstQuestion(DecisionServiceBeanImpl.java:17)
at org.andromda.samples.animalquiz.decisiontree.DecisionServiceBean.getFirstQuestion(DecisionServiceBean.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.invocation.Invocation.performCall(Invocation.java:345)
at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:214)
at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:185)
at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:113)
at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:48)
at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:105)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:313)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:146)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:122)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:191)
at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:624)
at org.jboss.ejb.Container.invoke(Container.java:856)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
at org.jboss.invocation.local.LocalInvoker$MBeanServerAction.invoke(LocalInvoker.java:155)
at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:104)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:90)
at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:46)
at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:55)
at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:97)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:86)
at $Proxy122.getFirstQuestion(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:384)
at org.apache.axis.providers.java.EJBProvider.invokeMethod(EJBProvider.java:459)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:281)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:319)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:450)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:285)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:653)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:301)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:66)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:153)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:54)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:595)
00:42:24,330 ERROR [LogInterceptor] EJBException in method: public abstract org.andromda.samples.animalquiz.decisiontree.VODecisionItem org.andromda.samples.animalquiz.decisiontree.DecisionService.getFirstQuestion() throws org.andromda.samples.animalquiz.decisiontree.DecisionException,java.rmi.RemoteException:
javax.ejb.EJBException: DecisionServiceBean.getFirstQuestion: javax.ejb.EJBException: null; CausedByException is:
Could not execute query
at org.andromda.samples.animalquiz.decisiontree.DecisionServiceBean.getFirstQuestion(DecisionServiceBean.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.invocation.Invocation.performCall(Invocation.java:345)
at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:214)
at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:185)
at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:113)
at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:48)
at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:105)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:313)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:146)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:122)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:191)
at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:624)
at org.jboss.ejb.Container.invoke(Container.java:856)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
at org.jboss.invocation.local.LocalInvoker$MBeanServerAction.invoke(LocalInvoker.java:155)
at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:104)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:90)
at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:46)
at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:55)
at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:97)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:86)
at $Proxy122.getFirstQuestion(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:384)
at org.apache.axis.providers.java.EJBProvider.invokeMethod(EJBProvider.java:459)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:281)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:319)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:450)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:285)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:653)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:301)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:66)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:153)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:54)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:595)

Monday, January 10, 2005

RESUME - PHILIP MARK DONAGHY - Professional consultant for the following (open source) technologies. PostgreSQL MySQL Oracle and IBM DB2 DBMS. Apache AXIS Geronimo LDAP Samba and Tomcat servers. GML JDOM JAXP SAX and XERCES XML specifications. AndroMDA Velocity and XDoclet code generators. Linux Solaris and Win OS. Struts MVC II design pattern. JSP Struts Tiles Struts Validator and DisplayTag presentation layers. J2EE EJB JDBC JMS JMX JNDI JSSE JSTL JTA JTX Java Thread Java beans Java IO Java Lang Java Net Java RMI Java Security Java SQL Java Text Java Util Javax Naming Javax SQL Javax XML w3c DOM XML SAX and JavaMail Java 2 SDK APIs. J2SDK Ant Maven Eclipse JBuilder Log4J Apache Jakarta Commons Clay DBCP Taglibs DisplayTag Easy Struts Lomboz Oxygen and CVS development platforms. ArcIMS GRASS PostGIS and MapServer GIS. OpenSSL SSH SSL HTTP SOAP and DNS BIND protocols. I use object-oriented analysis & design (OOAD), l'Unified Modeling Language (UML), Enterprise JavaBeans (EJBs), JavaServer Pages (JSPs), Java Server Faces (JSFs), Data Access Objects (DAOs). I support open source and the Java Community Process (JCP).

159 rue du Fbg Poissonniàre
75009 Paris France
Tel. : +33 (0)1 48 74 23 80
Mobile : +33 (0)6 20 83 22 62
Email : philipmarkdonaghy 0 yahoo 0 com
Website : donaghy.blogspot.com
Born the 8th of August 1972
Married
Nationality : American
French Resident
( working permit )

EDUCATION

1996. San Diego State University. Bachelors of Science in General Geology and Bachelors of Science in Computer Science.

LANGUAGES

English : Mother tongue
French : Read, written, and spoken

PROFESSIONAL EXPERIENCE

May 2004. GISIG. Paris (75). Apache Architect

  • Responsabilities

    • Produce an Apache compile farm

  • Application Functionalities

    • Compile Ant 1.6.1, Junit 3.8.1, MX4J 2.0.1, Apache Commons Lang

  • Technolgies

    • Linux 2.4.20, CVS 1.11.2

October 2003 to April 2004. Acadomia. Alten SI. Paris (75). Web Application Architect.

  • Responsabilities

    • Establish a framework for a mission critical web application

    • Define a security mechanism for user authentification and authorization

    • Determine the data acess requirements and create a code generator from JDBC connection which provides acces to a persitant data layer

    • Separate the data access layer from the business logic layer and the java bean and presentation layers

    • Establish an error mechanism using the Java exception technology

    • Train eight engineers to use the Struts actions, form beans, validator, tiles, and controller technologies

    • Assure the sychronisation of data using web services

    • Integrate common paging and tab panes tag libraries into the presentation layer

  • Application Functionalities

    • Intranet used for the managment of the Acadomia organisation and their client database

    • User interfaces permiting the creation of agencies, families, students, and tutors

    • Application controled security customized using the application back office administrator

  • References

February 2003 to September 2003. AirportSmart. Alten SI. LGS France. IBM Global Services. Paris (92). Web Application Architect.

  • Responsabilities

    • Responsable for the architecture and development of a intranet whos space is dedicated to buyers and suppliers of the airport industry.

    • Perform system administration for developer, preproduction, and production servers.

    • Install and configure Linux, Samba, Apache, Tomcat, IBM DB2, J2SDK, Struts, Ant, JBuilder, Log4J, OpenSSL, LDAP, PHP, CVS, JNDI, JDBC, JavaMail, TagLibs (JSTL), Apache Commons, Tiles, Velocity templates, Email Servers.

    • Train and provide assistance to eight other engineers.

    • The application is executed using multiple servers installed with the Linux Red Hat distribution.

    • The servers use the Java 2 Enterprise Platform to communicate between data sources most of which are based on Open Source products. LDAP Secureway and IBM DB2

  • Application Functionalities

    • The functionalities of the web application are supported in any language.

    • Internationalization is at the core of the application, which includes graphical interfaces for activating new languages, and for translating data.

  • References

December 2002 to May 2003. ATEC. Cachan (94). Project Manager Internet.

  • Responsabilities

    • Produce a web application for an office of Construction Economists.

  • References

August 2001 to July 2002. Egencia. Paris, France. Lead Java Developer.

  • Responsabilities

    • Development of travel portal using Java technology.

    • Responsible for implementing J2EE ( Java 2 Platform Enterprise Edition ) architecture on n-tier heterogeneous platform.

    • Creation and design of Web tier using JavaBeans constructed from Data Access Objects ( DAO ).

    • Data sources include XML ( Extensible Markup Language ), Oracle, and HTTP protocol over SSL using the Java Secure Socket Extension ( JSSE ).

    • Integrated platform with the SNCF Train Reservation System for Online Travel Agencies ( RAVEL, Système de Réservation SNCF pour les Agences de Voyages En Ligne ), the KIX XML API for KDS Wave Server, and Business Objects.

  • References

January 2001 to August 2001. MapImage. Paris, France. Internet Application Developer.

  • Responsabilities

    • Development of Web portal software using Java technology.

    • Responsible for designing and writing a Web application using Servlet technology on Internet Information Server ( IIS ) platform.

    • Utilisation of MS Java SDK and virtual machine.

  • References

June 2000 to January 2001. ESRI France. Meudon, France. Development Engineer.

  • Responsabilities

    • Development of GIS ( Geographic Information Systems ) project in the field of wireless telecommunications.

    • Responsible for developing a Web client to ArcIMS ( Arc Internet Map Server ) for a leading telecommunications company.

    • Product destinated for French Justice Department for use in criminal investigations notably for the positioning of mobile phone calls.

    • Designed a multi user environment used to display cartography based on dates, phone numbers, and/or locations.

    • Developed search engine tool to assist user in the research.

    • Developed reporting tool to log usage.

  • References

    • http://www.esrifrance.fr

June 1998 to April 2000. ESRI Inc. Redlands, CA, USA. Software Release Manager.

  • Responsabilities

    • Development of automated test suites for GIS software package called ArcIMS ( Arc Internet Map Server ).

    • Tests were written in Java and JavaScript to send multiple requests to the ArcIMS clients and servers to perform load, api, and regression tests.

    • Responsible for the quality of the software release for the Sun Solaris platform.

January 1996 to March 1998. Scripps Institution of Oceanography. San Diego, CA, USA. Research Assistant.

  • Responsabilities

    • Studying the climate of the San Francisco Bay area. Development of real-time weather website and tools to forecast weather based on statistics. Performed analysis of weather patterns using Matlab mathematical application. Graphs and models where created by developing programs using Matlab scripting language.

SKILLS

Knowledge of diverse IT systems and programming methods.
Research : Scientific Method, Mineralogy, Petrology, Structural Geology, Oceanography and Statistics
Programming : Java, JavaScript, C, C++, SQL, HTML, ASP, JSP, Taglibs, UNIX : bash, sh, csh, ksh, perl, php
Technologies : Tomcat, Struts, Servlet, JSP, XML, DTD, XSLT, JASP, EJB, JavaBeans, JavaMail, JDBC, JSSE, MVC, JDOM, Taglibs, TLD, NetBeans, Linux
Web Servers : Apache, IIS, iPlanet.

ArcIMS 3.0 Knowledge and Experience

Client, Middleware, and Server Architecture.
AXL Communication between components.
Administration of Map Services and multiple machine configurations.
Customization using HTML client and Servlet Connector.
Design and development of the test harness for the Java Viewer API.
Development of a debug and trace tool for the ArcIMS Viewers.
Configuration of the Cold Fusion Connector.
Experience developing custom AXL requests.

Developement Tools

Eight years experience using Sun Microsystems Java Development Kit
Five years experience using JBuilder for Java development.
Four years experience using Cold Fusion Studio/Server for HTML development.
Two years experience using Oracle 8, Toad, and sqlplus.
Six months experience using IBM DB2 datastore.
Six months experience using MS SQLServer.

Open Source Software Development for Service Oriented Projects

By Philip Mark Donaghy

There is no doubt that Open Source methods are becoming the norm used by service agencies everywhere. These are the guidelines I recommend when developing using open source software. These principals will guarantee an effective development process.

Communication with Mailing Lists

A large percentage of projects fail due to poor communications. It is very important that communication is traced so that managers, developers, and clients can have the correct information at the right time.

The solution to this problem :

Use internal mailing lists to notify people of news, events and or changes that are important to the end users as well as managers, clients, and developers. Three lists should be sufficient. The client list, a developers list, and a managers list. In addition the use of public mailing lists to effectively monitor software limitations and benefits.

Modeled Architecture using UML, Object, Exchange, and Database models

Problems arise from ineffectively copying and pasting source code.

The solution to this problem :

Use models to define the architecture of the application. Model driven architecture is the most modern method of developing service oriented software. A large portion of the application can be automatically generated using Velocity or AndroMDA.

Client Workflow

A third difficulty comes from poor client specifications. The solution is to monitor the clients needs and expectations.

The solution to this problem :

Architects and developers can not effectively create service oriented applications without the technical and functional contacts with the client.

Developer Workflow

Developers are curious animals. The all have their habits and methods of contributing to a project. The most important characteristics necessary to identify a responsible developer are his or her "bonne volonté", the desire to contribute ones maximum potential toward a projects success, and his or her professional attitude. These aside, here are some simple steps all developers should follow.

  • Verify the stability of the source code

  • Notify project directors when source code is unstable

  • Debug

  • Find the person responsible for the error

  • Work with them to estimate the

  • Run regression tests

  • Notify project directors when regression tests fail

  • Debug

  • Find the person responsible for the error

  • Work with them to estimate the correction

  • Evaluate remaining development

  • Meet with project directors to discuss solutions

Language

The software documentation must use a consistent language.

The solution to this problem :

A development team often consists of many nationalities. In such a case documentation communication should be written in English.

French can be the dominant language if the clients, managers, and staff are all French nationals or master French as a second language.

Development Platforms

A final and frequent problem arises with the network services used during the development process and the cost to maintain them.

The solution to this problem :

The development platform must be composed of all elements to run the application independently of network connections. Therefore the database must be installed on the development machine. Traditional Windows machines are not practical, secure or fast enough for this scenario therefore Linux is recommended.

Source Control

Problems arise when source code is locked by other developers.

The solution to this problem :

Use the most common open source source control. At the time of this writing this is CVS, although Subversion has be recently adopted by most new and cutting edge development efforts.

Build Scripts

Problems arise when build scripts are platform dependent.

The solution to this problem :

Use the most common open source build system. At the time of this writing this is Ant, although Maven is making great strides.

As with development build scripts should modular. Meaning that one central build script calls other scripts.

Delays

Delays can be avoided only by synchronizing the efforts made by the client, managers, third parties, and developers. In order to master the planning of a project all the technical, functional, and management aspects must be mastered. At our company we strive to make this our mission. Our contracts describe the exact solution and its implementation along with the time to delivery and the cost.

Blog Archive