Release Notes -- Apache Geronimo -- Version 1.0

Geronimo URLs
-------------
Home Page:     http://geronimo.apache.org/
Downloads:     http://geronimo.apache.org/downloads.html
Documentation: http://geronimo.apache.org/documentation.html
Mailing Lists: http://geronimo.apache.org/mailing.html
Source Code:   http://geronimo.apache.org/svn.html
Bug Tracking:  http://issues.apache.org/jira/browse/GERONIMO
Wiki:          http://wiki.apache.org/geronimo


System Requirements
-------------------
You need a platform that supports the Sun JDK 1.4.2.  CORBA
support requires a Sun Java 1.4.2 VM (specifically 1.4.2_08
or a higher 1.4.2_* release).

Most testing has been done on Linux, Mac OS X, and Windows.


Installing & Starting Geronimo
------------------------------
To install, simply unpack the .zip (Windows) or tar.gz (Unix) file 
containing Geronimo.

Documentation is included in the docs directory in your unpacked server.

If you wish to modify the default ports that 
Geronimo will use, edit the file var/config/config.xml in your 
Geronimo directory.

Geronimo comes with batch and script files to control server start 
and stop functions.  To see usage examples simply type geronimo.bat 
or geronimo.sh command as appropriate for your platform.  It is 
necessary to set JAVA_HOME to the copy of your Sun 1.4.2 JDK/JRE 
prior to executing the command.  Here is an example:

export JAVA_HOME=/directory_to_the_JRE/
bin/geronimo.sh

The command will display help text instructing you as to how to start 
and stop the Geronimo server.

If you prefer to start the server without a script file you can simply type: 

java -jar bin/server.jar

Once the server has started, you can access the administration console
at http://localhost:8080/console/ . The default user name is "system" and
the default password is "manager".


Administration Console Security Configuration
---------------------------------------------
The default administration user/password for the admin console and
deployment is system/manager.  To change this edit the
var/security/users.properties and var/security/groups.properties
files.


Deploying Applications
----------------------
Geronimo comes with deploy scripts and batch files to deploy J2EE
modules or applications. Alternatively, to deploy a J2EE module or 
application, start Geronimo and then run (for example):

   java -jar bin/deployer.jar deploy my-web-app.war [deploy plan]

You will need to use the username "system" and password "manager"
unless you customized those during the install process.  The
deployment plan argument is optional -- you can pack a deployment
plan into the application module, provide it on the command line,
or in some cases omit it entirely.

For more information on the commands and options supported by the
deploy tool, run

   java -jar bin/deployer.jar help [command]


Other Deployment Options
------------------------
As an alternative to the command-line deployer, you can copy
application modules into the geronimo/deploy/ directory and the
hot deployer service will deploy them automatically.  The
command-line deployer has some advantages, as it will output any
deployment errors to its own console rather than just the server
log, but either method will generally work.

Additionally, Geronimo provides a Maven plugin that can deploy
applications to Geronimo as part of a Maven build.


Future Road Map at a Glance
---------------------------
http://issues.apache.org/jira/browse/GERONIMO?
      report=com.atlassian.jira.plugin.system.project:roadmap-panel

  (the above URL must be all on one line)



Significant Changes Since the M5 Release
----------------------------------------
 * the ConfigID format has been updated in anticipatation of future
   enhancements.  Application plans that include configIds of
   configurations included in Geronimo M5 and earlier will require
   modifications.  See the Wiki at http://wiki.apache.org/geronimo
   for more information.
 * More functionality and new look and feel for the Administrative
   Console (http://localhost:8080/console/)
 * Added HTTP session clustering to the Tomcat configuration
   included with Geronimo
 * Hot Deploy by copying your deployment artifact to the deploy/
   directory
 * Ability to run the deploy tool from a machine other than the
   application server (remote deployment)
 * Packages that represented experimental, pre-release or obsolete
   versions were removed.
 * Clustering
   - Tomcat support for clustering is available in this release.
   - WADI has been included as a technology preview for both Jetty
     and Tomcat.  See http://wadi.codehaus.org for additional
     information.


Choice of Web container
-----------------------
Two versions of the Geronimo binary are available for download.
There is a version for the Jetty Web container and a version for
the Tomcat Web container.  Both distributions are fully supported
by the Geronimo team.  Please download the binary appropriate for
your installation.


Configuration
-------------
Most configuration attributes can be updated in the
geronimo/var/config/config.xml file.  The attributes most likely
to be changed are already included in the supplied config.xml file,
while others may need to be added manually.


Overall Project Status
----------------------
The current version release of 1.0 represents a significant step
for the Geronimo  project.  After a little over two years of effort
this distribution is a fully compliant and usable J2EE container
suitable for everything from development to Enterprise deployments.

The next version of Geronimo is focused on several areas, including:

 * continue to enhance the performance and usability of the server
 * improve cross-platform compatibility
 * improve integration with third-party development tools and
   server products

User feedback is critical for future released to be successful!
The Geronimo team is anxious to gather feedback to ensure we are
meeting the needs and expectations of the user community.

In addition to the goals mentioned above, several specific changes
are currently being considered:

 * Make the Geronimo kernel pluggable, to help ease integration of
   external components. 
 * Enhance the ability to assemble customized servers (including only
   the services required by the applications to be run).
 * Enhance configuration, administration and management tools
 * Improve clustering support for web containers and ejbs

For more information on specific bugs or features, or to help with
testing efforts, please visit JIRA, our bug/issue tracking system, at
http://issues.apache.org/jira/browse/GERONIMO


Certification Status
--------------------
Geronimo 1.0 has passed the J2EE(tm) certification test suite.  We
will be filing the appropriate certification paperwork with Sun for
official J2EE certification.


Significant Missing Features
----------------------------
 * J2EE Application Client that works from a machine other than the
   server
 * Full JSR-88 support for DConfig Beans (the current features are
   somewhat incomplete)
 * Offline deployment and assembly tools (expected shortly)
 * Installer program (expected shortly)



Late Release News (not in RELEASE-NOTES-1.0.txt in build)
---------------------------------------------------------
Just as the Geronimo Release was being prepared a report was made about a 
potential security issue when using the Jetty Web Conatiner.  The issue was noted 
on Jetty 5.1.9 which used by geronimo 1.0, which allows a crafted URL to access the 
contents of a WEB-INF directory if the server is running on a Windows platform.   
This issue is fixed in Jetty 5.1.10 and will be provided in Geronimo 1.0.1 which will
be available in the near future.

Known Issues
------------
 * ActiveMQ (our JMS implementation) is not shut down in the right
   way and thus tends to generate exceptions to the console during
   the shutdown process.  This does not cause any actual problems
   as far as we know, but it sure doesn't look nice.
 * See also outstanding JIRA issues at 
   http://issues.apache.org/jira/browse/GERONIMO


Specific Issues, Features and Improvements fixed in Version 1.0
---------------------------------------------------------------

** Bugs
    * [GERONIMO-287] - Control-C termination overwrites log files created with log4j.xml
    * [GERONIMO-386] - openejb cmp attempt to modify identity columns
    * [GERONIMO-409] - SQLSecurityRealm/SQLLoginModule needs overhaul
    * [GERONIMO-453] - DerbySystemGBean doesn't call System.gc() in doStop() and soFail() as recommended in the Derby doco
    * [GERONIMO-477] - Deployer should not auto-connect if not asked to
    * [GERONIMO-518] - Deploying Struts app fails on Logging ClassCastException
    * [GERONIMO-626] - Marshall Exception while reading an object array with length 0.
    * [GERONIMO-629] - Misleading error when ra.xml is included in the RAR jar as well as the RAR
    * [GERONIMO-637] - LogFactory.release(ClassLoader) can release the parent config's logger.
    * [GERONIMO-670] - Use of undocumented fields with setAccessible
    * [GERONIMO-688] - ActiveMQActivationSpec default maxSessions value reset to 0 by Geronimo
    * [GERONIMO-689] - Cannot set MDB activation config maxSessions property
    * [GERONIMO-717] - Root configurations should use dependencies not manifest classpath.  Requires built-in repository.
    * [GERONIMO-751] - wsdl4j version is a private build
    * [GERONIMO-774] - OpenEJB itests - GBeanInstance should already be stopped before die() is called
    * [GERONIMO-825] - schemaLocation attribute values in deployment plans contain problematic "schema\" prefix.
    * [GERONIMO-829] - undeploy of components leaves web-inf\lib directory and jars in config-store
    * [GERONIMO-858] - Clean up dependencies in console application
    * [GERONIMO-861] - Investigate warning from Pluto portal
    * [GERONIMO-872] - Jetty does not verify servlet mapping against the servlets
    * [GERONIMO-877] - Update TranQL connector jar filename in console properties
    * [GERONIMO-879] - The console inclusion of a license for JDBM is obsolete.
    * [GERONIMO-883] - We need a flag to indicate if login modules should have their principals wrapped or not
    * [GERONIMO-886] - Demo application cannot start using the Geronimo console
    * [GERONIMO-890] - Role Mapping using Login Domain Name
    * [GERONIMO-912] - Installer uses wrong port variable for web containers
    * [GERONIMO-918] - Change service-ref to use single definition of "port"
    * [GERONIMO-935] - ManagedAttribute injection should work when multiple stores are present
    * [GERONIMO-936] - Reconfigure plugin .classpath to follow Maven convention
    * [GERONIMO-950] - JVM portlet shouid display all system property values
    * [GERONIMO-978] - StackOverflowError shutting down Derby
    * [GERONIMO-980] - jetty to 5.1.5rc1
    * [GERONIMO-983] - Memory used by proxies isn't released by dereferencing the proxy (I speculate)
    * [GERONIMO-990] - Remove external SNAPSHOT dependencies
    * [GERONIMO-1007] - Deployment exception for Local interface class not found error does not show name of local interface class in log
    * [GERONIMO-1008] - Leading blank lines in <url-pattern>
    * [GERONIMO-1011] - HTTPS Connectors fail on IBM JDK
    * [GERONIMO-1014] - problems getting the UserPrincipal for servlets and struts
    * [GERONIMO-1017] - Non-persistent attributes shouldn't default to manageable
    * [GERONIMO-1019] - Exception for bad servlet-mapping
    * [GERONIMO-1021] - tomcat ejb ws login and authorization doesn't work
    * [GERONIMO-1024] - Null Pointer exception thrown if message destination specifies an  incorrect module name.
    * [GERONIMO-1028] - WebLogViewerPortlet does not honor the date in the search
    * [GERONIMO-1029] - tomcat web log seems to be created with wrong name and isn't found by the web log viewer portlet
    * [GERONIMO-1031] - NullPointerException during deploy of Struts App on Tomcat
    * [GERONIMO-1032] - Deploy reports an improper port number for a newly deployed web app
    * [GERONIMO-1036] - Tomcat configurations are not relocatable
    * [GERONIMO-1039] - Milestone 5 Corba not running with IBM JDK & SUSE LInux
    * [GERONIMO-1040] - Tomcat and Jetty config files are missing CORBA GBeans
    * [GERONIMO-1041] - Portlets updates required to match new ActiveMQ and TranQL versions in trunk
    * [GERONIMO-1042] - Portlet error in Database Pools
    * [GERONIMO-1043] - Portlet error in All Realms
    * [GERONIMO-1044] - LoginModule class must be in o/a/g/Security configuration classloader to work
    * [GERONIMO-1045] - xml-reference in the gbean declaration located in the geronimo-application.xml does not work
    * [GERONIMO-1046] - ORA-00920 SQL Exception thrown when testing day trader with Oracle
    * [GERONIMO-1047] - undeploy using "uninstall" in Applications Management page doesn't do the cleanup properly
    * [GERONIMO-1049] - Remove unused cts-* plans from tck
    * [GERONIMO-1051] - CSSGSSUPMechConfigDynamic can't get subject
    * [GERONIMO-1055] - Geronimo schema validation errors
    * [GERONIMO-1059] - Petstore application won't build via maven if stand-alone
    * [GERONIMO-1061] - SampleSecurityRealm's LoginService references are obsolete
    * [GERONIMO-1062] - OpenEJB client leaks memory on each JNDI lookup.  Get OutOfMemoryException after a few thousand lookups
    * [GERONIMO-1063] - Viewing server logs results in warning message in command prompt
    * [GERONIMO-1064] - WebConnector portlet results in CodeGenerationException when G is configured for tomcat
    * [GERONIMO-1065] - Portlet Exception in JMS Connection Factory portlet
    * [GERONIMO-1067] - Portlet Error in Console Realm portlets
    * [GERONIMO-1068] - Web Access log management can only handle one log file.
    * [GERONIMO-1070] - Network Listeners added through console are lost upon server restart
    * [GERONIMO-1072] - Better error for bad EJB QL
    * [GERONIMO-1077] - DeploymentException propagated to deployer are incomplete (stack + nested exceptions)
    * [GERONIMO-1080] - CMP generates invalid update SQL
    * [GERONIMO-1083] - daytrader does not work with tomcat
    * [GERONIMO-1090] - By default, CMP fields of type char should be mapped to the CHAR SQL type.
    * [GERONIMO-1093] - Creating Tomcat Web Connector fails due to unknown gbean attribute acceptCount
    * [GERONIMO-1094] - OpenEJB client attempts to close connection even when a connection couldn't be obtained causing "Error closing connection with server: null" message
    * [GERONIMO-1096] - Incomplete ServerPolicy/ClientPolicy classes causes problems with non-Sun ORBs
    * [GERONIMO-1098] - Tomcat web connector fails to start due to missing name attribute
    * [GERONIMO-1099] - Error Uninstalling an application - cannot re-install application or restart server
    * [GERONIMO-1100] - Java Mail portlet loads the Keystore portlet implementation
    * [GERONIMO-1104] - org.openejb.proxy.CglibEJBProxyFactory$NoOverrideCallbackFilter should implement equals() and hashcode() methods
    * [GERONIMO-1105] - org.apache.geronimo.axis.client.NoOverrideCallbackFilter should implement should implement equals() and hashcode() methods
    * [GERONIMO-1108] - CertManagerPortlet is being loaded for the SecurityRealms portlet
    * [GERONIMO-1112] - Problem with sending mail using G's JavaMail SMTP transport
    * [GERONIMO-1114] - gbeans with xml-attribute/reference in j2ee plan need correct namespace
    * [GERONIMO-1115] - Restart/Reboot of G from console give plethora of exceptions
    * [GERONIMO-1116] - LocalAttributeManager should allow command line override of its configuration file
    * [GERONIMO-1117] - [Build break] junit tests in openejb failed.
    * [GERONIMO-1121] - ConnectionManager leaves several timer tasks running even after gbeans are shutdown -- causes memory leak
    * [GERONIMO-1124] - bouncycastle/jars/bcprov-jdk14-124.jar not found
    * [GERONIMO-1125] - AbstractSinglePoolConnectionInterceptor$IdleReleaser keeps MultiParentClassLoaders alive
    * [GERONIMO-1128] - Derby Log Viewer performance problem
    * [GERONIMO-1131] - component context not available in tomcat servlet init methods
    * [GERONIMO-1132] - Undeploy using Deployment Manager fails to undeploy application
    * [GERONIMO-1136] - Console deployment dies unless separate plan provided
    * [GERONIMO-1138] - Revise database pool creation portlet to use JSR-88
    * [GERONIMO-1144] - The deployer does not look for ConfigurationBuilder in other modules
    * [GERONIMO-1145] - Too many ORBs (or possibly not enough)
    * [GERONIMO-1146] - imported transactions in mdbs don't work properly
    * [GERONIMO-1147] - CORBAHandleDelegate does not work with some orbs
    * [GERONIMO-1148] - Jetty & Tomcat Consoles use conflicting Keystore GBean
    * [GERONIMO-1150] - NullPointerException when no security element is in plan
    * [GERONIMO-1151] - Changing EJB port from 4201 to another value in config.xml does not take effect
    * [GERONIMO-1152] - Connector portlet does not display all WebConnectors
    * [GERONIMO-1154] - connector and security xsd's need import to xml.xsd
    * [GERONIMO-1155] - ActiveMQSessions build up during DayTrader execution
    * [GERONIMO-1157] - Repository list/upload screen should use management API
    * [GERONIMO-1158] - Need edit screen for new database pool portlet
    * [GERONIMO-1159] - New L&F for Console: Fix Header
    * [GERONIMO-1160] - New database pool portlet doesn't edit existing pools
    * [GERONIMO-1161] - Web Server - Network Listeners - HTTPS Listener edit page updates
    * [GERONIMO-1162] - GeronimoSchemaUtils security schema upgrade code broken
    * [GERONIMO-1165] - Changing System DB pool size to 65 causes ActiveMQ to fail to get a connection
    * [GERONIMO-1171] - GBeanInstance should load reference types from types classloader, not gbeans classloader
    * [GERONIMO-1172] - SecurityBuilder needs to use configuration classloader to construct principals.
    * [GERONIMO-1177] - URLJarFile memory leak
    * [GERONIMO-1181] - Add/Edit Tomcat HTTPS Connector does not address truststore parameters
    * [GERONIMO-1185] - Updated Web Access Log Viewer doesn't display any log records
    * [GERONIMO-1186] - Illegal argument exception when returning from add listener to display list in web server page, network listeners portlet
    * [GERONIMO-1200] - HotDeployer gets IllegalStateExceptions during a non-hot deploy deploy of an app
    * [GERONIMO-1201] - All our login modules implement login() incorrectly
    * [GERONIMO-1203] - LoginConfig processing can silently do the wrong thing
    * [GERONIMO-1205] - Security realms load XML login module definitions in reverse order
    * [GERONIMO-1206] - SQLSecurityRealm doesn't work with PostgreSQL
    * [GERONIMO-1207] - Dependency / Lifecycle Woes
    * [GERONIMO-1208] - LoginConfig XML doesn't support the wrap flag
    * [GERONIMO-1209] - New security realm portlet doesn't update existing realms
    * [GERONIMO-1211] - Problems with javamail implementation
    * [GERONIMO-1218] - deploy command cannot be run when server is stopped as help indicates
    * [GERONIMO-1219] - EJB Deploy Error
    * [GERONIMO-1220] - EJB Deploy Error #2
    * [GERONIMO-1221] - Recent caching changes in cglib broke axis-builder
    * [GERONIMO-1222] - Principal wrapping changes broke CSSSASITTPrincipalNameDynamic
    * [GERONIMO-1225] - The recently added "Common Console Actions" on welcome page doesn't work right
    * [GERONIMO-1226] - Remove broken Reboot option from Console Shutdown/Restart
    * [GERONIMO-1229] - Schema conversion search for elements should use qname, not just localname.
    * [GERONIMO-1232] - startup.sh is not executable when built on windows
    * [GERONIMO-1245] - Backward M5 deployment capability broken
    * [GERONIMO-1247] - Patch for xml.xsd, geronimo-connector-1.0.xsd and geronimo-security-1.1.xsd
    * [GERONIMO-1248] - Problem in using a security realm added through geronimo console
    * [GERONIMO-1249] - Error in deploying a web application through geronimo console
    * [GERONIMO-1250] - Console Realm Create new user results in error and gives confusing error message.
    * [GERONIMO-1251] - Unable to add a new realm thru "Security Realms" portlet
    * [GERONIMO-1252] - Keystore portlet gets exception trying to view generated keypair.
    * [GERONIMO-1253] - Button labels on Generate Keystore Page dialog not consistent.
    * [GERONIMO-1256] - deploy:waitForStarted broken
    * [GERONIMO-1261] - Writes to repository broken
    * [GERONIMO-1262] - Common Libraries portlet fails with a GBeanNotFoundException
    * [GERONIMO-1263] - dependency element components need white space trimmed
    * [GERONIMO-1264] - Link icon in console is the Gluecode Joe logo
    * [GERONIMO-1266] - Geronimo Izpack installer does not set shell scripts as executable
    * [GERONIMO-1270] - NoClassDefFound exception in JMS Connection Factory portlet
    * [GERONIMO-1274] - Cannot install an application on Geronimo using the admin console
    * [GERONIMO-1276] - Installing an application into Jetty - "started" state not retained after a restart
    * [GERONIMO-1283] - Demo Application Broken
    * [GERONIMO-1291] - Document geronimo-config.xsd
    * [GERONIMO-1292] - Connector Portlet: List connectors in Web Server management page throws exception
    * [GERONIMO-1295] - Deploy & Undeploy no longer affect config.xml; next startup dies
    * [GERONIMO-1297] - Scripts in assemblies servers probably don't have right permissions
    * [GERONIMO-1299] - Refresh servlet-examples and jsp-examples war files
    * [GERONIMO-1301] - Need to move shutdown jar to "new" servers
    * [GERONIMO-1304] - assemblies servers need online deployer
    * [GERONIMO-1305] - Packaging a car with the maven plugin, using the geronimo.include properties on dependencies,  fails
    * [GERONIMO-1308] - Continued build problems with "new" Maven goals
    * [GERONIMO-1309] - Shutdown of tomcat configuration noisy and has GBeanInstanceState Errors
    * [GERONIMO-1310] - Jetty startup noisy and corrupts the startup progress bar output
    * [GERONIMO-1311] - Geronimo server assemblies do not set execute permission on *.sh scripts
    * [GERONIMO-1312] - app client builder uses config-store in a way inconsistent with the packaging plugin
    * [GERONIMO-1313] - openejb builder listener attribute has bad object name
    * [GERONIMO-1319] - web apps need more dependencies, on admin objects in the same ear
    * [GERONIMO-1320] - Assembly plugin should install all the parents of a configuration you install
    * [GERONIMO-1321] - svn:eol-style property not set to native on all *.java *.xml *.html *.txt etc.
    * [GERONIMO-1325] - server tar.gz files built on windows don't have execute permission set on scripts
    * [GERONIMO-1331] - QName class escaped from startup classpath
    * [GERONIMO-1334] - 142 config-store directories are created during a build
    * [GERONIMO-1337] - Add quotes around variable reference in geronimo.sh
    * [GERONIMO-1339] - db pool size & connection attributes are not saved in config.xml
    * [GERONIMO-1340] - Assemblies include all car files in the repository
    * [GERONIMO-1345] - Connection pool resizing does not calculate what to do correctly
    * [GERONIMO-1348] - Packaging plugin does not set extension directories
    * [GERONIMO-1350] - Web Console indicates that web server stats are available for Tomcat when they really are not
    * [GERONIMO-1363] - DayTrader still using old geronimo-spec files
    * [GERONIMO-1364] - update welcome pages to point at HTTP redirects in the geronimo.apache.org site
    * [GERONIMO-1377] - Startup Warning on tomcat - unknown default host.
    * [GERONIMO-1372] - Exception during startup - TradeEJB
    * [GERONIMO-1373] - DB info portlet not working correctly
    * [GERONIMODEVTOOLS-4] - React to WTP model/API changes in LaunchConfiguration

** New Features
    * [GERONIMO-419] - Lockout after N failed logins
    * [GERONIMO-512] - non-reference gbean dependencies
    * [GERONIMO-513] - jndi refs should result in dependencies, optionally
    * [GERONIMO-686] - Directory based hot deployment support
    * [GERONIMO-778] - Geronimo XDoclet 1.2.2 module contribution
    * [GERONIMO-922] - Provide a simple filter to show or hide Geronimo system applications in the Application views.
    * [GERONIMO-1087] - Add Tomcat servlets-examples to geronimo
    * [GERONIMO-1109] - Need class for server shutdown
    * [GERONIMO-1178] - Reference material for an SMTP provider
    * [GERONIMO-1193] - Installer should include schema files for components included in the install target
    * [GERONIMODEVTOOLS-1] - Geronimo Tooling: migrate UI to EMF.edit framework

** Improvements
    * [GERONIMO-242] - Keep history of running configurations
    * [GERONIMO-358] - JSR-88 deployer should work remotely
    * [GERONIMO-406] - Move assembly out of modules
    * [GERONIMO-417] - Provide an LDAP security realm
    * [GERONIMO-463] - CLI Deployer doesn't give login prompt for non-Geronimo server
    * [GERONIMO-640] - Remove dependency on Sun internals code for URL decoding
    * [GERONIMO-699] - Need welcome page at http://localhost:8080/
    * [GERONIMO-733] - Ouput configuration startup times in startup console output
    * [GERONIMO-788] - Improved look & feel for web console
    * [GERONIMO-804] - Redeploy should calculate ModuleID to replace if not provided
    * [GERONIMO-839] - Require flag to provide config list on server startup, handle bogus arguments
    * [GERONIMO-849] - Be able to add configuration dependencies
    * [GERONIMO-887] - Improve the Keystore portlet
    * [GERONIMO-1015] - Management API: Web Logging
    * [GERONIMO-1052] - By default finders and selects should retrieve all CMP fields not mapped to LOB columns
    * [GERONIMO-1060] - Improvements to attribute management
    * [GERONIMO-1074] - GeronimoLogFactory should be installed via the service provider mechanism
    * [GERONIMO-1088] - Add Tomcat jsp-examples to geronimo
    * [GERONIMO-1091] - Adding a partition to Apache DS with Geronimo
    * [GERONIMO-1119] - Web apps should know what container they're in
    * [GERONIMO-1120] - Auto-detect config ID for a deployable archive
    * [GERONIMO-1122] - Updated view of configurations
    * [GERONIMO-1123] - generate geronimo-service.xml files from marked dependencies in project.xml
    * [GERONIMO-1126] - Packaging plugin should add marked dependencies from project.xml
    * [GERONIMO-1127] - Assembly plugin should analyse config dependencies to fill geronimo repo
    * [GERONIMO-1139] - Deploy tool should offer host/port options not just URL
    * [GERONIMO-1143] - Need a capable security realm configuration portlet
    * [GERONIMO-1149] - Installment 1 of new Epiq provided look and feel
    * [GERONIMO-1153] - Add New Application should be on its own page from the web console navigation
    * [GERONIMO-1166] - Enhance Startup scripts to allow process to be launched in background
    * [GERONIMO-1169] - Highlight links, clean up some colors
    * [GERONIMO-1170] - Update Geronimo Welcome page to Epiq provided look and feel
    * [GERONIMO-1188] - Get necessary izpack jars into Maven repository for access during build
    * [GERONIMO-1189] - Installer should be built from its own module in assemblies.
    * [GERONIMO-1190] - usability: Install should not display configuration screens for packs not being installed
    * [GERONIMO-1195] - Present a Welcome Portlet with Geronimo information after login
    * [GERONIMO-1197] - Geronimo Console Look and Feel installement #2  - icons in navigation, improved images/layout.
    * [GERONIMO-1202] - SQL Login Module support for server Database Pools
    * [GERONIMO-1213] - Install tomcat default files using a gbean rather than adding explicit jelly code to assembly
    * [GERONIMO-1214] - Uniformize the schemas for imports, dependencies, and class lists over all geronimo plan schemas
    * [GERONIMO-1217] - WARN message in console for JMS Server
    * [GERONIMO-1223] - Hot Deploy performance improvement Just check directories -patch available
    * [GERONIMO-1230] - Use abstract non-path maven-like uris for repository and configId
    * [GERONIMO-1246] - BasicKernel.listGBeansByInterface should get GBeanInfo directly
    * [GERONIMO-1258] - Introduce Tomcat examples - using new build structure
    * [GERONIMO-1267] - Startup processing should check that a temp directory configured in java.io.tmpdir exists before starting configurations
    * [GERONIMO-1268] - Add --long startup option that uses a startup progress output format that is suitable for redirection to a file
    * [GERONIMO-1269] - Rename -quiet and -override startup options to follow the -short and --long option naming convention
    * [GERONIMO-1272] - Edit Network Listener portlet should show name of listener being editted.
    * [GERONIMO-1275] - Security realm configuration file connecting specifically to the Apache Directory Server in Geronimo
    * [GERONIMO-1279] - Upgrade to Ant 1.6.5 from 1.5
    * [GERONIMO-1280] - Upgrade from TranQL 1.1 to 1.2
    * [GERONIMO-1281] - Upgrade TranQL Connector Version 1.1
    * [GERONIMO-1282] - Upgrade to TranQL Vendor connectors 1.1
    * [GERONIMO-1284] - Set default console log level to INFO
    * [GERONIMO-1286] - Have CRLF line endings for zip distribution and LF line endings for tar.gz distribution
    * [GERONIMO-1288] - Add README.txt file to var/config directory
    * [GERONIMO-1289] - Include a config.xml.original file in the var/config directory in the distribution
    * [GERONIMO-1290] - Rename the "geronimo.base.dir" System Property to "org.apache.geronimo.base.dir"
    * [GERONIMO-1294] - Remove offline deployment capabilities from deployer.jar
    * [GERONIMO-1298] - Apache Geronimo V1.0 - Documentation Draft
    * [GERONIMO-1300] - Add the new Geronimo powered by gif to the Welcome Page and the web console welcome portlet
    * [GERONIMO-1306] - Remove modules/assembly build
    * [GERONIMO-1318] - HTTP redirects for the geronimo.apache.org site
    * [GERONIMO-1328] - Remove bad/missing portlets from Console *in 1.0 Branch only*
    * [GERONIMO-1332] - Allow deployment and use of exploded modules (e.g., EARs, JARs, WARs, etc.)
    * [GERONIMO-1346] - Encrypt passwords stored in config.xml

** Tests
    * [GERONIMO-1254] - Changing Axis version from 1.3 to 1.4-SNAPSHOT
    * [GERONIMO-1255] - Changing ActiveMQ from 3.2 to 3.2.1 in preperation for Geronimo 1.0 Release

** Wish List
    * [GERONIMO-1227] - please re-allow read-only repositories

** Tasks
    * [GERONIMO-194] - Date, time and datetime data type support for CMP entitiy beans
    * [GERONIMO-271] - PetStore deployment
    * [GERONIMO-320] - Geronimo Realm provider for existing Tomcat Realm implementations
    * [GERONIMO-627] - Geronimo Incubator Web Page Must Die!
    * [GERONIMO-744] - Review specs and move them from rc versions to formal versions
    * [GERONIMO-754] - Move from HOWL version 0.1.8 to HOWL version 0.1.9
    * [GERONIMO-855] - CORBA configuration in izpack installer is not used and needs to be updated to configure the CORBA support in OpenEJB
    * [GERONIMO-1106] - Upgrade to CgLib maintenance release 2.1_03
    * [GERONIMO-1107] - Upgrade HOWL from version 0.1.8 to version 0.1.11
    * [GERONIMO-1167] - Upgrade to Tomcat 5.5.12
    * [GERONIMO-1244] - Upgrade to Derby 10.1.2.1
    * [GERONIMO-1326] - Remove ServiceMix modules / builder from 1.0 branch


