--- # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. title: TODO in_menu: true --- name:overview pipeline:haml,tags %h1 The TODO list Stuff that still needs to get done. Contributions Welcomed! --- name:content pipeline:textile h2. Transactions: * Should be backed by cursored queue h2. Large Message Support: * There are some stubs in the Store interface for this, but basically for large messages we should be able to stage them to disk, and when given to a consumer chunk the payload out to keep memory low. The cursored queue will need to be updated to handle this. h2. Protocol Support Lots of work still to be done here\! * Protocol Handlers are there for OpenWire and STOMP, and we'll want to add proto buf as well. * Do we convert things to a common message format on arrival or keep them in their native format doing transforms on the fly? * Common interfaces for Connection/Session/*Consumer for the broker to interact with? * Threading model ... We should probably come up with a good abstract base class for the protocol handlers that helps to provide a threading model that will make synchronization between I/O events (exceptions etc), protocol events and message dispatch). h2. Standalone Broker Server The standalone broker would be probably best implemented as a set of OSGi services running in the Apache Karaf server. Karaf is basically a small OSGi based micro server. * Implement Karaf 'features' bundles for the ActiveMQ sevices * Setup a customized binary distro of Karaf with the ActiveMQ features. Ideally the Karaf distro is customized so that it displays ActiveMQ branding. h2. JMX / Management Integration In 5.x all the JMX bits are tightly coupled to the broker core implementation which made it hard to extend or provide alternative management interfaces to the broker. What would be ideal is if the broker core did not depend on any management modules. This would require all interesting broker resources to be easy to navigate to and be externally watched by the management modules. Some more research would be needed in this area. h2. IoC / Container Integration h3. Spring Integration Need to make sure it easy to: * configure and embedded broker in Spring xml files * create connection factories (including the XA and pooled variants) in spring xml We should put all the spring bits in the activemq-spring module to avoid tightly coupling the broker with Spring like was the case with the 5.x version of the broker. h3. J2EE Resource Adapter The 5.x Resource Adapter will need to get ported to support integrating with J2EE servers like Geronimio. h2. General Interface cleanliness A fair amount of clean up work needs to be done to clean up and harden interfaces in the prototype. h2. Testing As much of the work to date has been largely experimental in nature, testing up to now has focussed mainly on end to end type performance tests, but more unit testing and functional testing of edge cases such as slow subscriber test etc are needed. Almost all the 5.x tests have been copied over into the activemq-all module under a legacy package. The build is configured not to run any of the legacy tests. We need to try to port legacy tests to the 6.x APIs and try to make them pass then move them out of the legacy package once they are passing so that they are run by the maven build. h2. Misc Tasks * InactivityMonitor needs to get inserted for OpenWire on the server side of MultiWireFormat negotiation. * BIO SSL Transport does not currently pass Client Certificate chain in OpenWire ConnectionInfo command. This used to be done by the SSL transport but this shouldn't have OpenWire dependencies; instead protocol handler should be able to retrieve it from the underlying transport as needed. * Add javadoc to all classes * Add nice toString() methods to aid when debugging. h2. General Cleanup / Abstraction Leaks / Smelly Stuff * TransportFactory Spaghetti Inheritance: It's way too complicated for folks implementing a TransportFactory to know which methods to override and to get it right. Might be better to avoid the base class and just provide static utility methods. * Factories that take a URI should probably be changed to just take a String. More generic, and easier to use from a end user perspective. If a factory does require a String to be URI formated, it can under the covers still parse the string with a URI class.