I kind of did a little audit this morning to try and figure out how hard it 
will be to split the big bundle into little bundles to allow for smaller OSGi 
footprints and such by just loading the desired functionality into OSGi 
instead of the entire big bundle (and all it's deps).   

At this point, we have 25 packages that are split across multiple jars.   16 
of the 25 are split between common-utilities, api, and rt-core.   At this 
point, I'd likely just say make those 3 fragments of each other.   In the 
future, then figure out how to split that "big" bundle up a bit better.   Some 
of the 16 are "easy" (like cxf/phase) but not really worth spending time on if 
all of them cannot be resolved.    

Of the remaining 9, 5 are easy to resolve, 2 are "medium", and 2 are hard and 
would have a big impact.


Here is my analysis:

"Big 3" packages:
org/apache/cxf/binding  cxf-api cxf-rt-core
org/apache/cxf/buslifecycle  cxf-api cxf-rt-core
org/apache/cxf/clustering  cxf-api cxf-rt-core
org/apache/cxf/configuration  cxf-api cxf-common-utilities cxf-rt-core
org/apache/cxf/configuration/spring  cxf-common-utilities cxf-rt-core
org/apache/cxf/endpoint  cxf-api cxf-rt-core
org/apache/cxf/feature  cxf-api  cxf-rt-core
org/apache/cxf/headers  cxf-api cxf-rt-core
org/apache/cxf/interceptor  cxf-api cxf-rt-core
org/apache/cxf/io  cxf-api cxf-rt-core
org/apache/cxf/phase  cxf-api cxf-rt-core
org/apache/cxf/service  cxf-api cxf-rt-core
org/apache/cxf/service/invoker  cxf-api cxf-rt-core
org/apache/cxf/transport  cxf-api cxf-rt-core
org/apache/cxf/workqueue  cxf-api cxf-rt-core
org/apache/cxf/wsdl  cxf-api cxf-rt-core


Not easy:
org/apache/cxf/jaxb  cxf-common-utilities cxf-rt-databinding-jaxb
    Classes from both are used all over the place.   Big user impact.
    We COULD consider JAXB databinding a "core" thing and fragment it
    in since JAXB is pretty much required for any usage of CXF.

org/apache/cxf/service/factory  cxf-rt-core cxf-rt-frontend-simple
    Couple classes in rt-core used by JAX-RS and thus not really pushable into
    frontend-simple without pulling more deps for JAX-RS.   Changing package
    name in either place would affect users. (changing package for
    classes in rt-core would affect a LOT less users though)



Medium:
org/apache/cxf/ws/policy  cxf-api cxf-rt-ws-policy
   Move impls and interceptors to private package.  May impact users if
      referencing the impls/interceptors directly.
   Push abstract and basic stuff up to cxf-api
   Couple other issues to resolve (like WSPolicyFeature requires Spring)

org/apache/cxf/ws/addressing  cxf-api cxf-rt-ws-addr
   Moving all the classes from api to ws-addr can be done.  Users would need
   to depend on cxf-rt-ws-addr in addition to cxf-api if using the classes. 
   The main one is the AddressingProperties interface.  Some internal CXF 
classes will need to be updated and fixed, but nothing major.   The only 
"hard" one would be AbstractMultiplexDestination's call into the 
AddressingProperties, but that's all of 2 lines of code and could likely be 
handled better by have ws-add save the "TO" EPR on the message/exchange 
directly.

Easy:  
org/apache/cxf/frontend  cxf-rt-core cxf-rt-frontend-simple
    Move from rt-core to sub-module (not used elsewhere anyway):
org/apache/cxf/management  cxf-common-utilities cxf-rt-management
    Change package for generated type.  No impact to users.
org/apache/cxf/transport/http  cxf-rt-core cxf-rt-transports-http
    Impl in "core" moved to private package, utility class moved to common
    Possible impact to users as the utility class would move.
org/apache/cxf/tools/common  cxf-api cxf-tools-common
    Move to tools-common and update refs or replace with constants
org/apache/cxf/tools/validator  cxf-api cxf-tools-validator
    Move to tools-validator and adjust dependencies and set optional imports


Anyway, what are people's thoughts on the above?   Is it worth pursing more 
closely for 2.6?   Other than the JAXB one above that still needs a good 
solution, the impact isn't very large and could easily be documented in the 
migration guides.


Dan

Reply via email to