Release Notes -- Apache Geronimo -- Version 1.1

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://cwiki.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).

For users that do not require CORBA for their applications may also choose to use
Sun Java 1.5 VM.

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.

If you wish to modify the default ports that Geronimo will use, edit the file 
<geronimo_home>/var/config/config.xml

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 to set JAVA_HOME:

export JAVA_HOME=<JDK/JRE_home>

To see the available command options type:

<geronimo_home>/bin/geronimo.sh
or
<geronimo_home>/bin/geronimo.bat

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 <geronimo_home>/bin/server.jar

Once the server has started, you can access the Geronimo 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 Geronimo Administration Console 
and deployment tool is system/manager.  You can change these defaults directly 
from the Geronimo Administration Console by accessing Security -> Console Realm
and change the user name and password from the Console Realm Users portlet.

As an alternative, you can make the same changes by editing the 
<geronimo_home>/var/security/users.properties and 
<geronimo_home>/var/security/groups.properties files.


Deploying Applications
----------------------
Geronimo comes with deploy scripts and batch files to deploy J2EE modules or 
applications. You can use the scripts or simply invoke the executable jar by 
running the following command (note that you need to start Geronimo first):

<geronimo_home>/bin/java -jar 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.

You can also use the "Login" command once and avoid to enter user name and 
password every time you use the deploy tool

For more information on the commands and options supported by the deploy tool,
run from within the Geronimo directory <geronimo_home>/bin:

java -jar deployer.jar help [command]

You can also graphically deploy applications and resources via the Geronimo 
Administration Console available at http://localhost:8080/console/


Other Deployment Options
------------------------
As an alternative to the command-line deployer, you can copy application 
modules into the <geronimo_home>/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.

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 1.0 Release
----------------------------------------
 * Deployment plans have been updated, ConfigId has been replaced by a more 
   complete ModuleId structure. Previous releases of Geronimo will require 
   modifications, refer to the Geronimo documentation for further details.
 * Tools and commands have been also updated to reflect the ConfigID -> ModuleId
   change as well as geronimo-config-1.1.xsd -> geronimo-module-1.1.xsd schemas.
 * More functionality has been included in the Administrative Console 
   (http://localhost:8080/console/). Memory utilization graphics, more Thread 
   Pools, remote HTTPd configuration wizard and plugins are some of these new 
   features.
 * All the applications (except for those deployed via Hot Deployment) are 
   stored in the <geronimo_home>/repository directory. Previous config-store has 
   been removed.
 * Enhanced SMTP support.
 * Keystore configuration.
 * Little-G is an alternative distribution offered in Geronimo 1.1.  This new 
   distribution has a reduced footprint.  It comes with either Tomcat or Jetty
   as WebContainer options.
 * Geronimo applications, server features, and integrated products can be 
   distributed as Geronimo plugins.  Plugins are easy to install, automatically 
   download any dependencies, and do not require server restarts."  
   "Using the plugin infrastructure, applications or modules can be copied from 
   one Geronimo installation to another (from developer to developer, test to 
   production, etc.).
 * Geronimo also supports in-place deployments.  This means an archive or a directory 
   can be deployed without being copied into the Geronimo directory structure.


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.  
Download the binary that is more appropriate for your environment.


Configuration
-------------
Most configuration attributes can be updated in the 
<geronimo_home>/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
----------------------
Apache Geronimo v1.1 introduces several structural changes improving 
scalability, portability and overall organization as well as including new 
features and functionality. This release continues the J2EE certification path
led the previous version of Geronimo providing 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.
 * Enhance configuration, administration and management tools.
 * Improve clustering support for web containers and EJBs.

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.

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.1 has passed the J2EE(tm) certification test suite and it is 
officially J2EE certified.


Works In Progress
-----------------

* Geronimo has two system properties that should not be modified by the user
  even though they are visible in some property files.  They are:
    org.apache.geronimo.server.dir
    org.apache.geronimo.server.name

  These are subject to change and will be documented in a future release

* The GERONIMO_HOME environment variable in the startup scripts is not
  currently used and is subject to change in a future release.

Known Issues
------------
* WAR in an EAR cannot use a database pool by including a dependency on it 
  The EAR must declare the dependency.

* Manifest Class-Path for WAR in EAR was respected in 1.0, is ignored in 1.1
  This will be addressed in 1.1.1

* Cannot create an EJB reference to an EJB in another module.
  This will be addressed in 1.1.1

* In-place deployment does not work for EJB modules
  This will be addressed in a follow on release.

* Creating a new activeio listener from the JMS server portlet fails
  with NoSuchMethodError.  There's some discussion of this issue in GERONIMO-1906.
  This issue will be addressed in 1.1.1


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

Release Notes - Geronimo - Version 1.1

** Bug
    * [GERONIMO-289] - WEB-INF/lib/* and WEB-INF/classes aren't on configuration class loader
    * [GERONIMO-396] - Transient failure to install configuration on WinXP/JDK1.5
    * [GERONIMO-436] - JSR-88: Targets Ignored
    * [GERONIMO-609] - geronimo.log can be closed whilst distributing an EAR if the application uses log4j
    * [GERONIMO-753] - GBeanName.matches does not respect quotes
    * [GERONIMO-837] - Switch all references in standard plans to not use <gbean-name>
    * [GERONIMO-948] - Need reference counting on load/start of configurations
    * [GERONIMO-973] - Add security to /console-standard
    * [GERONIMO-1012] - Tomcat integration does not set a subject in an unsecured web module in a secured ejb application
    * [GERONIMO-1071] - trust material/truststore for Jetty and Tomcat HTTPS Connectors
    * [GERONIMO-1140] - Bad component query building logic (JCAResourceImpl finds no JCAConnectionFactories)
    * [GERONIMO-1179] - Update ActiveMQ Manager for Adding/Removing Connectors
    * [GERONIMO-1212] - Timeouts in commons-fileupload
    * [GERONIMO-1287] - IzPack Installer does not set line endings to CRLF on windows and LF on non-Windows platforms
    * [GERONIMO-1316] - Create JMS destination pretty darn broken
    * [GERONIMO-1329] - Cannot connect to Geronimo with jconsole
    * [GERONIMO-1330] - MBeans registered on the MBeanServer can not be viewed
    * [GERONIMO-1336] - Setting the Max PoolSize on a DataBase pool with invalid information does not yield an error message and silently fails
    * [GERONIMO-1344] - Get java usage help when a trailing slash '/' is in GERONIMO_HOME environment variable when running geronimo.bat
    * [GERONIMO-1352] - RMI port number is not specified in URL for JMXConnector in server config.xml files
    * [GERONIMO-1360] - Misleading error for missing web deployer
    * [GERONIMO-1370] - velocity.log is created in current directory on server startup
    * [GERONIMO-1379] - Login Error page does not include updates to remove table and include About link
    * [GERONIMO-1387] - Geronimo Console Applications portlets fail after starting app client.
    * [GERONIMO-1395] - text files (except *.bat files) have LF endings in ZIP file
    * [GERONIMO-1402] - Recipients set by calling MimeMessage.setRecipients(RecipientType, Adress[]) not remembered by getAllRecipients()
    * [GERONIMO-1411] - servlet 2.3 context-param elements are not converted properly to servlet 2.4 schema
    * [GERONIMO-1414] - Console About page does not set the shortcut icon
    * [GERONIMO-1416] - [daytrader] Broken links on benchmarking page
    * [GERONIMO-1417] - [daytrader] daytrader/docs/tradeFAQ.html out of date
    * [GERONIMO-1421] - DB portlet failure in Tomcat only
    * [GERONIMO-1422] - Geronimo shutdown does not complete due to ActiveMQ attempting to reconnect endpoints to broker every 30 seconds
    * [GERONIMO-1425] - access to unprotected web resource after login does not use correct Subject
    * [GERONIMO-1426] - DatabasePoolPortlet gets NPE when saving
    * [GERONIMO-1433] - Security vulnerability of WEB-INF contents on windows platforms
    * [GERONIMO-1435] - resource-env-ref mapping by admin-object-link broken
    * [GERONIMO-1437] - INFO  [Http11Protocol] messages (from tomcat) written to stdout during startup of Geronimo
    * [GERONIMO-1438] - INFO  [StandardContext] logged (from Tomcat) during shutdown of Geronimo
    * [GERONIMO-1440] - JAASJettyRealm not shared enough
    * [GERONIMO-1441] - "Build path contains duplicate entry" errors for some geronimo projects in eclipse
    * [GERONIMO-1443] - The hot deployer should accept plan-only deployments just like the online deployer
    * [GERONIMO-1444] - Allow deployment and use of exploded EAR modules
    * [GERONIMO-1446] - Tomcat server assembly does not include geronimo javamail car
    * [GERONIMO-1447] - MagicGBall sample does not work in AG 1.0
    * [GERONIMO-1448] - debug-tool does not work on Tomcat
    * [GERONIMO-1450] - Console usage plans use old namspace & parentId
    * [GERONIMO-1452] - Config.xml refers to the wrong JMX remote service gbean (Fix included)
    * [GERONIMO-1453] - GBeanOverride throws NullPointerException when more than one reference element specified
    * [GERONIMO-1455] - Start of CAR does not load and start its GBeans
    * [GERONIMO-1456] - geronimo-1.0-src.zip has a meta-inf folder in the root directory
    * [GERONIMO-1459] - service builder should require name or gbeanName
    * [GERONIMO-1462] - Finish implementing inverseClassloading attribute in plan schemas
    * [GERONIMO-1463] - Tomcat doesn't always get the right servlet name when evaluating isUserInRole
    * [GERONIMO-1465] - FixCRLF processing in assembly plugin sometimes fails under windows trying to rename a temp file
    * [GERONIMO-1467] - DB pool portlet error when web session saved
    * [GERONIMO-1468] - FileSystemRepository#listUris() produces wrong URI array when the repository contains a malformed entry
    * [GERONIMO-1472] - packaging plugin creates client cars with wrong version
    * [GERONIMO-1474] - Cross site scripting vulnerabilites
    * [GERONIMO-1475] - Configs needing updated to not include Xerces files in the Repository as duplicates to lib\endorsed
    * [GERONIMO-1477] - JMX debug tool should not be loaded in the supplied config.xml
    * [GERONIMO-1480] - Cross context include does not set jacc contextID for 2nd web app. (Tomcat only)
    * [GERONIMO-1483] - During Undeploy entry in config.xml is not removed
    * [GERONIMO-1489] - Minor fixes/updates to jUDDI webapp and Tomcat config
    * [GERONIMO-1490] - setjavaenv.bat is not called by deploy.bat
    * [GERONIMO-1491] - ActiveMQ plan uses hardcoded obsolete org/apache/geronimo/ActiveMQ module name
    * [GERONIMO-1495] - Installer build failure when using Maven 1.0.2
    * [GERONIMO-1498] - DriverDownloader.DriverInfo causes java.io.NotSerializableException during server shutdown
    * [GERONIMO-1502] - Installer does not install docs on 1.0.1
    * [GERONIMO-1503] - keystore generated by KeyStore portlet could not be used to add either Jetty or Tomcat HTTPS Listeners
    * [GERONIMO-1505] - Installer should default Tomcat on at runtime if Jetty pack is not selected
    * [GERONIMO-1506] - DB info portlet should use new GeronimoVersion
    * [GERONIMO-1508] - 1.1 won't accept plans with 1.0 configIds in references, parents, imports, etc.
    * [GERONIMO-1510] - NPE in connector DConfigBeans if no config params present on connection definition instance
    * [GERONIMO-1513] - The directory "geronimo-1.0\lib\extension" does not match the "Extension-Dirs: lib/ext" value in server.jar's manifest.mf file
    * [GERONIMO-1517] - Installer - Install Derby with base J2EE Features
    * [GERONIMO-1523] - Openejb corba class is included (serialized) in all enc contexts
    * [GERONIMO-1525] - Error in DB Pool Portlet
    * [GERONIMO-1532] - NullPointerException when a badly named jar is put into repository directory
    * [GERONIMO-1535] - Error in security realm portlet
    * [GERONIMO-1536] - Installer - j2ee-installer assembly project.xml fix
    * [GERONIMO-1537] - Installer - IzPack assembly does not qualify plugin version for code copied to installer assembly for use at install time
    * [GERONIMO-1540] - Fix security vulnerability in jsp-examples
    * [GERONIMO-1545] - CMP update statements will cause incorrect trigger firing in a database
    * [GERONIMO-1561] - Misspelling in Kernel Exception Message
    * [GERONIMO-1566] - Binary distributions (both zip and tgz) contain a META-INF/manifest.mf file under the geronimo-1.0 directory.
    * [GERONIMO-1569] - improve packaging plugin control of logging.
    * [GERONIMO-1570] - jetty is setting hosts instead of virtual hosts
    * [GERONIMO-1575] - JMX service doesn't start up when server hostname does not resolve correctly
    * [GERONIMO-1599] - HOWLLog throws NPE because XidFactory is missing
    * [GERONIMO-1600] - Non-standard artifact in repository cause Common Libraries portlet to fail
    * [GERONIMO-1603] - shutdown.bat does not set ERRORLEVEL and does not honour GERONIMO_BATCH_ECHO and GERONIMO_BATCH_PAUSE environment variables
    * [GERONIMO-1604] - Output from deploy.sh/bat is inconsistent with other scripts - does not output info on environment variable settings (e.g. JAVA_HOME)
    * [GERONIMO-1609] - Fix typo in error message in geronimo.bat - "cannot find ...setclasspath.bat" should read "cannot find ...setjavaenv.bat"
    * [GERONIMO-1610] - deploy.bat does not honour GERONIMO_BATCH_ECHO and GERONIMO_BATCH_PAUSE environment variables
    * [GERONIMO-1612] - Remove -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS"  from commands in geronimo.sh
    * [GERONIMO-1615] - CSS GSSUP dynamic auth sends domain name as username
    * [GERONIMO-1616] - CSS GSSUP token encoding sets username to username@domain but decoding does not reverse that
    * [GERONIMO-1635] - kernel.listGBeans(pattern) does not respect default domain name
    * [GERONIMO-1643] - NullTransport class needs to implement protocolConnect
    * [GERONIMO-1649] - Invalid deployment descriptor error when deploying an EJB 2.0 MDB
    * [GERONIMO-1655] - Daytrader MDBs do not start properly
    * [GERONIMO-1661] - Version class does not implement equals and hashCode
    * [GERONIMO-1683] - Web app context-root should trim whitespace
    * [GERONIMO-1684] - server does not start if openejb-jar.xml activation-config had whitespace in values
    * [GERONIMO-1696] - JPDA run command not listed in usage help for geronimo.sh and geronimo.bat
    * [GERONIMO-1720] - Update instructions for "Create Database Pool -- Show Deployment Plan"
    * [GERONIMO-1743] - Deploy.bat doesn't accept any arguments and hence doesn't work.
    * [GERONIMO-1744] - "dt_shmem" default in geronimo.bat for JPDA_TRANSPORT environment variable not compatible with Eclipse debugger
    * [GERONIMO-1745] - The JPDA_OPTS environment variable is not honoured by geronimo.bat and is inconsistent with geronimo.sh
    * [GERONIMO-1751] - Deployment of ear with external plan using "Deploy New" console option caused FileNotFoundException
    * [GERONIMO-1752] - JMS Server portlet - Edits to JMS Network Listener are lost upon server restart
    * [GERONIMO-1756] - Move from 1.1-dev version of commons-fileupload to version 1.1
    * [GERONIMO-1759] - getConsoleFrameworkServletPath broken
    * [GERONIMO-1760] - Several bugs in the javamail spec
    * [GERONIMO-1762] - Create a derby network /embedded XA datasource via admin console fail
    * [GERONIMO-1763] - default config.xml does not list Jetty AJP connector
    * [GERONIMO-1769] - Console should create links for all sections including the "current section"
    * [GERONIMO-1773] - Automatic driver download is duplicated
    * [GERONIMO-1774] - baseDir NPE in org.apache.geronimo.deployment.DeploymentContext
    * [GERONIMO-1782] - Properties File Login module fails after editing through Admin Console
    * [GERONIMO-1784] - SQL Login Modules logs "null" instead of the driver name
    * [GERONIMO-1787] - Possible to have a configuration partially installed that is not possible to undeploy
    * [GERONIMO-1789] - Exceptions while adding SQL Realm thru Admin Console
    * [GERONIMO-1790] - Long Geronimo path and file names cause problems on Windows
    * [GERONIMO-1802] - Console breakage in 1.1 branch
    * [GERONIMO-1806] - config.xml need to allow for nulls, empty string attributes and ability to remove references
    * [GERONIMO-1815] - Remove empty config-store directory
    * [GERONIMO-1818] - ActiveMQ broker is shutting down before the rest of the server
    * [GERONIMO-1821] - "maven new4" in 1.1 leaves loads of /tmp/packageNNNNN.tmpdir directories behind
    * [GERONIMO-1822] - Connector builder doesn't check consistency of transaction settings
    * [GERONIMO-1824] - geronimo-config-1.0.xsd incorrectly documents that classes can be comma-separated inside a filter element
    * [GERONIMO-1825] - Only one filter element can be specified inside a hidden-classes or non-overridable-classes element in plans
    * [GERONIMO-1827] - deployment-1.1.xsd missing
    * [GERONIMO-1828] - JSR-88 treats AbstractName like an ObjectName
    * [GERONIMO-1830] - Need to add Environment to DConfigBeans
    * [GERONIMO-1831] - Need to package console WEB-INF/classes into a JAR
    * [GERONIMO-1832] - Non-public Sun classes dependencies in tests
    * [GERONIMO-1836] - Packaging plugin expects does not handle the environment element being in namespaces other than the deployer namespace
    * [GERONIMO-1839] - Stopping or unloading a configuration with 2 or more dependent configurations is broken
    * [GERONIMO-1841] - JMS connector fails to start if <name> is used instead of <gbean-link>
    * [GERONIMO-1843] - Error attempting to deploy web applications to tomcat without a geronimo plan
    * [GERONIMO-1846] - geronimo-config-1.1.xsd needs to be changed - import element is not valid as a child of the configId element in a plan
    * [GERONIMO-1847] - FileNotFoundException when installing car into repository with packaging plugin when parent directories not created.
    * [GERONIMO-1849] - Attribute Manager broken WRT Reference
    * [GERONIMO-1850] - environment merge problem between ear and ejb modules (at least)
    * [GERONIMO-1851] - Proxy logic busted
    * [GERONIMO-1852] - Configuration and Kernel may differ on what gbeans are installed
    * [GERONIMO-1853] - modules/j2ee DomainTest failure
    * [GERONIMO-1854] - Coordinate list of started configs for Jetty,Tomcat for 1.1
    * [GERONIMO-1855] - Compile of OpenEJB's DeploymentHelper fails
    * [GERONIMO-1863] - Don't save enhanced classes, cglib is going to remove support for saving classes.
    * [GERONIMO-1867] - Startup output from --long badly formatted (regression from 1.0)
    * [GERONIMO-1870] - Fix dependencies scope in the spec jars
    * [GERONIMO-1871] - Unable to deploy Tapestry app due to classloading issue
    * [GERONIMO-1872] - Two meanings of META-INF/geronimo-service.xml
    * [GERONIMO-1875] - More work to port little-g to 1.1
    * [GERONIMO-1877] - Tomcat Console throws ClassCast Exception when selecting the Tomcat Web Connector
    * [GERONIMO-1878] - Cannot redeploy the console
    * [GERONIMO-1882] - Deploy from web console fails with NoSuchOperationException
    * [GERONIMO-1883] - Make sure all documentation is clearly marked as G 1.0 or G 1.1
    * [GERONIMO-1886] - NPE on simple web app deployment
    * [GERONIMO-1889] - Changing pooling parameters for connector does not persist to config.xml
    * [GERONIMO-1891] - Meaningless ERROR printed by attribute manager during redeploy
    * [GERONIMO-1893] - Corba failures on startup
    * [GERONIMO-1895] - Issues with geronimo specs
    * [GERONIMO-1896] - configs/client-deployer requires activemq-core-3.2.1
    * [GERONIMO-1897] - Configurations get version-ful reference to geronimo/j2ee-server/1.1-SNAPSHOT/car
    * [GERONIMO-1898] - Console JVM statistics break b/c can't cast JVM to StatisticsProvider
    * [GERONIMO-1899] - Build includes J2EE 1.1-SNAPSHOT spec
    * [GERONIMO-1900] - Sample app links on welcome app are broken by default
    * [GERONIMO-1902] - Console does not allow editing of Tomcat Connector Attributes
    * [GERONIMO-1903] - Add Spring to default class ignore list
    * [GERONIMO-1904] - Precompile JSPs for all apps by default
    * [GERONIMO-1906] - Cannot add a new connector using ActiveMQManagerGBean
    * [GERONIMO-1908] - Error in executing list-modules after application failure in Geronimo
    * [GERONIMO-1910] - NoSuchFieldError on deployment
    * [GERONIMO-1916] - Handle Delegate references can't be loaded without OpenEJB present
    * [GERONIMO-1918] - NoClassDefFoundError/ClassNotFoundException when attempting to deploy web app from console GUI
    * [GERONIMO-1919] - AG 1.1-SNAPSHOT has a memory leak when running DayTrader in Direct Mode
    * [GERONIMO-1920] - [Build Break] upgrade module: Test failure: assemblies_1 files in test-data missing.
    * [GERONIMO-1923] - Many Geronimo 1.1 configs depend on non-G1.1 ActiveMQ configs
    * [GERONIMO-1924] - Need to register the tomcat jndi url handler somehow
    * [GERONIMO-1925] - JSP Example Plugin Install/Uninstall/Install doesn't work
    * [GERONIMO-1927] - Need way to disable or make invisible security when using deployer.jar
    * [GERONIMO-1928] - CLI doesn't allow --inPlace as an option
    * [GERONIMO-1929] - Enable web apps exposed on separate ports
    * [GERONIMO-1931] - Deployers and the deploying classes are in separate class loader hierarchies
    * [GERONIMO-1932] - remove config-store directories from assemblies, now that they aren't used any more
    * [GERONIMO-1933] - Database pool usage doesn't include mandatory dependency
    * [GERONIMO-1934] - Incomplete dependency resolution assumes JAR as type
    * [GERONIMO-1935] - EJB refs fail when EJB module has no version in ConfigID
    * [GERONIMO-1936] - WAR deployed with configId with no type isn't treated as WAR by deploy tool, is by console
    * [GERONIMO-1937] - Resource reference names not trimmed for whitespace
    * [GERONIMO-1938] - Plugins portlet 'help' link throws PortletException
    * [GERONIMO-1940] - Bad deployment can't be undeployed
    * [GERONIMO-1941] - jaxr lookup doesn't work under tomcat server
    * [GERONIMO-1943] - cli.CommandRedeploy implementation doesn't support inPlace
    * [GERONIMO-1946] - SingleFileHotDeploy fixes for resolve, no force restart, empty target, and messages
    * [GERONIMO-1947] - Repeat hot deployment of WARs with no Geronimo plan
    * [GERONIMO-1949] - Some Tomcat & Jetty web app deployment errors do not identify web app module name associated with the error
    * [GERONIMO-1951] - config.xml settings should be applied to newer versions
    * [GERONIMO-1952] - MimeMessage modified and flags are not getting set properly by all constructors.
    * [GERONIMO-1953] - MimeUtility uuencode support has multiple bugs.
    * [GERONIMO-1954] - Failed web app deployment cannot be undeployed
    * [GERONIMO-1956] - Multiple problems with javamail Message serialization
    * [GERONIMO-1957] - The 1.1 SMTP code version is out of sync with the javamail spec being used with 1.1
    * [GERONIMO-1958] - Handle incomplete plugin downloads
    * [GERONIMO-1961] - SingleFileHotDeployer -  Application is not started on server restart
    * [GERONIMO-1962] - SingleFileHotDeployer:  Messages on the deployment status are not issued to console or log file.
    * [GERONIMO-1963] - Command-line plugin installer broken
    * [GERONIMO-1964] - Automatic geronimo-plugins.xml generation broken
    * [GERONIMO-1966] - Stack trace in geronimo-gbean-deployer configuration
    * [GERONIMO-1968] - Session getProvider() resolution not properly implementing search order.
    * [GERONIMO-1969] - MailGBean not handling debug property correctly.
    * [GERONIMO-1970] - During deployment, ModuleBuilders don't log an error if call to DeploymentUtil.recursiveDelete(dir) does not work
    * [GERONIMO-1971] - Redeployment of webapp without geronimo plan fails
    * [GERONIMO-1972] - Plugin Installer only works with 1 repository
    * [GERONIMO-1973] - javamail Session class using wrong classloader search sequence for resolving providers.
    * [GERONIMO-1974] - Can't "redeploy" a copy of an application using a different version in the module ID
    * [GERONIMO-1975] - security builder should trim everything
    * [GERONIMO-1977] - Remove corba spec & javamail spec from rmi-naming
    * [GERONIMO-1981] - Web Connector has GBean=(container name) in AbstractName
    * [GERONIMO-1985] - More then one configuration mananger was found in kernel with daytrader-derby-jetty-streamer-client
    * [GERONIMO-1992] - Exception in ConfigManager during redeploy
    * [GERONIMO-1993] - Build failure during assembly of j2ee-installer
    * [GERONIMO-1994] - geronimo-installer-1.1-SNAPSHOT.jar cannot be launched
    * [GERONIMO-1997] - Not possible to account for startup time in --long startup output due to configurations showing 0s
    * [GERONIMO-1998] - tomcat connector gbean sets wrong attribute
    * [GERONIMO-1999] - commons-modeler 1.1 is broken
    * [GERONIMO-2000] - PluginInstallerGBean generates invalid geronimo-plugin.xml files
    * [GERONIMO-2001] - Eliminate unnecessary CRs in deployment and other messages
    * [GERONIMO-2003] - Remove geronimo-config-1.1.xsd
    * [GERONIMO-2004] - Hot deployment of welcome app failed
    * [GERONIMO-2006] - Deploying an application with an incorrect deployment plan results in non-functional admin console panel
    * [GERONIMO-2008] - JarFileClassLoader creates jar urls for plain old files
    * [GERONIMO-2009] - JarFileResourceFinder ResourceEnumeration can't count.
    * [GERONIMO-2010] - Simplify the assemblies
    * [GERONIMO-2012] - Reflect configuration -> module change in config.xml
    * [GERONIMO-2013] - make upgrader into a command line tool
    * [GERONIMO-2017] - MEJB should not extend Management because it extends EJBObject pulling in requirements for the ejb-spec
    * [GERONIMO-2020] - Relative symlinks to the shell scripts were not handled correctly
    * [GERONIMO-2024] - namespace updates were turned off in 1.1
    * [GERONIMO-2031] - cvs.apache.org/repository has been moved (temporarily?) to people.apache.org/repository
    * [GERONIMO-2032] - [console] Some input and output streams are not closed in finally blocks
    * [GERONIMO-2033] - [axis] ensure input streams are closed in finally blocks
    * [GERONIMO-2034] - [deployment] ensure output streams are closed in finally blocks
    * [GERONIMO-2035] - [system] ensure input and output streams are closed in finally blocks
    * [GERONIMO-2036] - SingleFileHotDeployer doesn't undeploy app on force if directory has changed
    * [GERONIMO-2037] - Build failing on some Windows boxes and Solaris x86
    * [GERONIMO-2038] - assemblies\minimal-tomcat-server fails on windows due to file path length
    * [GERONIMO-2039] - typos in org.apache.geronimo.kernel.config.recursiveCopy(File srcDir, File destDir)
    * [GERONIMO-2040] - MagicGBall application not working in AG 1.1
    * [GERONIMO-2041] - Geronimo 1.3 Mail API : RFC  EncodeText and DecodeText methods does nothing
    * [GERONIMO-2042] - ConfigurationAwareReference needs Serial Version UID
    * [GERONIMO-2043] - remove context-priority-classloader element, provide separate artifact and dependency elements
    * [GERONIMO-2047] - JMS resource portlet broken by change to ActiveMQ RA
    * [GERONIMO-2048] - Keystore manager broken (by change to fix GERONIMO-1981?)
    * [GERONIMO-2049] - Jetty HTTPS edit shows no keystores in list
    * [GERONIMO-2050] - Unlocking a trust store still prompts for private key selection/password
    * [GERONIMO-2051] - Console Jetty HTTPS connector has wrong trust store help text
    * [GERONIMO-2052] - Dynamically added keystores never appear as unlocked
    * [GERONIMO-2054] - http://geronimo.apache.org/xml/ns/j2ee/web-1.0 name spaces are not upgraded by Upgrade1_0To1_1
    * [GERONIMO-2057] - Sun specific class references in disabled test prevent building Geronimo with a non-Sun JDK
    * [GERONIMO-2058] - Invalid gbean names in config.xml do not prevent server starting or module starting
    * [GERONIMO-2059] - dependencies in etc/project.properties need to be updated to use the appropriate versions
    * [GERONIMO-2060] - Changes made to plugins without bumping up version
    * [GERONIMO-2061] - Welcome app for 1.1 features 1.0 deployment plan
    * [GERONIMO-2065] - Not able to Build Geronimo1.0 , Geronimo 1.1
    * [GERONIMO-2068] - Upgrade tool should deal with gbean-name element in gbean refs.
    * [GERONIMO-2069] - o.a.g.system.configuration.LocalAttributeManager.load() does not setErrorHandler when parsing
    * [GERONIMO-2070] - config.xml validation error when attempting to clear references for a GBean
    * [GERONIMO-2077] - Under load receiving Null Pointer Exceptions in CMPGetter
    * [GERONIMO-2078] - Deployment errors can lead to directories and other artifacts not being cleaned up in the repo
    * [GERONIMO-2081] - Concurrency problems in Daytrader or AMQ
    * [GERONIMO-2088] - Plugin installer writes bad XML for config.xml content
    * [GERONIMO-2089] - Plugin exporter omits copy file and config.xml blocks
    * [GERONIMO-2095] - Problem with attribute manager
    * [GERONIMO-2096] - PluginInstallerGBean.updatePluginMetadata(..) may leave geronimo-plugin.xml file open
    * [GERONIMO-2100] - Subject can remain attached to thread on return from web app request, causing problems later on subsequent use of that thread
    * [GERONIMO-2101] - Deployment failures prevent future deployments
    * [GERONIMO-2108] - web app deployment fails with strange error if geronimo-web.xml defines a message-destination
    * [GERONIMO-2115] - Exclude j2ee-installer assembly from 1.1 build by renaming project.xml file to project.xml.ignore

** Improvement
    * [GERONIMO-232] - The ${geronimo.home}/config-store  should be created if missing prior to deployment.
    * [GERONIMO-241] - GBean proxy code could use improvement
    * [GERONIMO-440] - Installing package in offline mode should fail if server is running
    * [GERONIMO-571] - Provide ability to start all non-started GBeans and see error messages as to why they did not start
    * [GERONIMO-615] - RMIClassLoaderSpiImpl.normalizeCodebase(..) generates MalformedURLExceptions unnecessarily
    * [GERONIMO-847] - Better error for unmapped resource reference
    * [GERONIMO-944] - Bundle a JavaMail implementation & SMTP provider
    * [GERONIMO-1018] - Clarification of references
    * [GERONIMO-1137] - Proper DConfigBeans for Connectors
    * [GERONIMO-1174] - Hot deployer should know when a file was last deployed
    * [GERONIMO-1194] - Installer should only install packs(features) selected at install time
    * [GERONIMO-1199] - Keystore portlet should display certificate finger print before importing trusted certificates
    * [GERONIMO-1405] - support more than one config-store
    * [GERONIMO-1430] - Create TimedConfigStore (config store that timestamps deployments)
    * [GERONIMO-1434] - Allow GBeans to be bound into a component's java:comp/env namespace
    * [GERONIMO-1520] - Add product name to NetworkManager
    * [GERONIMO-1529] - Console should display Geronimo Version
    * [GERONIMO-1554] - Installer - Move advanced features to non-default installer path (simplify default installation)
    * [GERONIMO-1571] - Just a suggestion to state in the source distributin's BUILDING.txt file that compilation requires a JDK compatible with version 1.4, and that 1.5 will not work.
    * [GERONIMO-1605] - Display PID of started process when using geronimo.sh start or startup.sh
    * [GERONIMO-1606] - Display message indicating Geronimo is being started in another window when started with geronimo.bat start or startup.bat
    * [GERONIMO-1607] - Allow user to specify arguments to be used on the Windows START command issued by geronimo.bat
    * [GERONIMO-1608] - Improve Geronimo script documentation
    * [GERONIMO-1636] - Support optional version number on dependencies
    * [GERONIMO-1640] - Upgrade to Tomcat 5.5.15
    * [GERONIMO-1664] - Export / Import configurations capability
    * [GERONIMO-1689] - Eliminate config-store/# directory structure
    * [GERONIMO-1691] - Console should help configure Geronimo to hook up to Apache HTTP
    * [GERONIMO-1741] - Console should provide option to "redeploy" applications
    * [GERONIMO-1778] - Commits that shoud be merged from HEAD to 1.1
    * [GERONIMO-1803] - Manage by reference, not by name
    * [GERONIMO-1809] - Remove GBeanName
    * [GERONIMO-1811] - Improve the "Error: Unable to distribute foo.ear: Cannot deploy the requested application module" message
    * [GERONIMO-1814] - Add version number XStream serialized configuration files
    * [GERONIMO-1837] - Uninstalling an ear should cascade-uninstall all application clients
    * [GERONIMO-1844] - Precompile jsp pages in console
    * [GERONIMO-1856] - Provide more control over eclipse project name generation
    * [GERONIMO-1859] - Should be able to pass a JAR when deploying a service
    * [GERONIMO-1861] - Assembly plugin should make a backup "original" copy of the config.xml file
    * [GERONIMO-1866] - Make the packaging plugin output to target/ then JAR that into the local repo
    * [GERONIMO-1881] - Remove obsolete interop module
    * [GERONIMO-1890] - Support zip files in sharedir in addition to jars
    * [GERONIMO-1901] - Add additional parameters to TomcatGBean to provide improved configuration of Tomcat Attributs
    * [GERONIMO-1950] - Plugins should be able to specify config.xml settings to include explicitly
    * [GERONIMO-2011] - Set default logging to INFO rather than DEBUG in minimal assemblies
    * [GERONIMO-2016] - Provide source module info in UnresolvedReferenceException
    * [GERONIMO-2018] - Change temporary system proerty flags to start with "X"
    * [GERONIMO-2019] - KeystoreManager API needs ability to create client-side socket factories.
    * [GERONIMO-2021] - backport the activemq-embedded-rar from trunk to 1.1
    * [GERONIMO-2023] - Improve sample app install process
    * [GERONIMO-2029] - Plugins cannot install files outside repository

** New Feature
    * [GERONIMO-572] - GBeanName instead of ObjectName
    * [GERONIMO-927] - Provide a statement cache for TranQL for JDBCs drivers that don't inherintly provide this functionality.
    * [GERONIMO-1192] - Installer should create a config.xml for the target install
    * [GERONIMO-1507] - prototype offline deploy tool
    * [GERONIMO-1845] - Add minimal-tomcat-server assembly (little-G) to Geronimo 1.1
    * [GERONIMO-1848] - Shared Library support via a GBean
    * [GERONIMO-1978] - little-G for Jetty
    * [GERONIMO-1979] - Add custom class loader that does not leave open file locks


** Task
    * [GERONIMO-191] - Deployment of multiple modules into a single configuration
    * [GERONIMO-739] - Review location of config-store directory
    * [GERONIMO-1092] - Create a Maven2 build for the Daytrader sample app
    * [GERONIMO-1466] - Preparing 1.0 branch for development of 1.0.1
    * [GERONIMO-1514] - Fix installer license statements
    * [GERONIMO-1544] - Installer - Straighten out licensing issues for IzPack sub-components.
    * [GERONIMO-1666] - Console issues resulting from configID changes
    * [GERONIMO-1876] - backport console progress bar from 1.2 to 1.1
    * [GERONIMO-2094] - All geronimo jars and distributions should include at least the required LICENSE and NOTICE files
    * [GERONIMO-2112] - Place required attrtibutions in the NOTICES.txt file or a license included in the LICENSE.txt file
