Why not create an additional geronimo-javamail-nodep-x.x.jar artifact
that has all the jars merged together?
-dain
On May 2, 2006, at 1:57 AM, Rick McGuire wrote:
> Alan D. Cabrera wrote:
>> Rick McGuire wrote:
>>> The more the geronimo javamail support is starting to get used,
>>> the more uncomfortable I'm getting with the current structure of
>>> the javamail code. Let me level-set the situation first, so
>>> everybody understands the issues.
>>>
>>> To start with, the Sun impl of javamail is not really like other
>>> jar files we consider "spec" code. This jar files contains lots
>>> of classes in the javax.mail.* package tree, but it also contains
>>> a number of backing classes in a com.sun.mail.* tree that help
>>> implement certain features. For example, there are various
>>> encoders/decoders used by the MimeUtility class. These classes
>>> are undocumented, and are separate from the public javamail api
>>> classes.
>>>
>>> In addition to those classes, the Sun javamail jar file contains
>>> the Sun implementations of the protocol transports and stores
>>> (smtp, pop3, and imap are supported). In order to use the Sun
>>> version of javamail, you only need to javamail jar and the jaf
>>> (activation jar).
>>>
>>> For the Geronimo implementation, things are split up a little
>>> more. The geronimo-spec-javamail jar file contains all of the
>>> javax.mail.* classes, plus whatever backing utility classes are
>>> needed to implement some of the features (with
>>> org.apache.geronimo.* package structure). The jar does NOT
>>> however, contain any of the protocol implementations.
>>>
>>> The Geronimo protocol implementations are contained in the
>>> javamail-transport module of the main Geronimo code tree. This
>>> jar contains only the protocol implementations, plus some utility
>>> classes shared between the protocols. In order to use the
>>> Geronimo javamail support, you need 3 jar files: 1) the
>>> activation jar, 2) the javamail jar, and 3) the javamail-
>>> transport jar. 1) and 2) are available separately, but 3) IIUC,
>>> is only available within a Geronimo snapshot jar.
>>> And just to confuse matters even more, there is another Geronimo
>>> mail module. This module contains GBeans for configuring various
>>> mail resources. These GBeans are independent of which javamail
>>> implementation is being used, so we can keep these out of the
>>> discussion.
>> This is normal for just about all the spec implementations for
>> Geronimo. 1) spec jar, 2) impl, 3) GBean-mumbo-jumbo. Hopefully,
>> w/ XBean, the GBean stuff will go away.
>>>
>>> There is a major problem with the current Geronimo structure.
>>> The implementation of the protocol handlers (transports and
>>> stores) is highly dependent on the version of the api they are
>>> written to. I ran into this problem just today. Jira
>>> GERONIMO-1957 addressed the fact that changes in the geronimo 1.1
>>> javamail spec jar broke the 1.0 version of the SMTP transport.
>>> However, the current 1.1 codebase was running with this obsolete
>>> code, so I had to back port the trunk version of the SMTP
>>> transport into the 1.1 code tree. This also raised the question
>>> of whether we should pull back the other transport/store
>>> implementations into 1.1.
>>>
>>> Now this is an issue that never arises with the Sun
>>> implementation. Since the protocol handlers are contained within
>>> the API jar, you can never get these packages out of sync. They
>>> travel around together by definition. In order for somebody to
>>> make use of the Geronimo javamail stack, you'd need to pull down
>>> the javamail and activation spec jars, then extract a javamail-
>>> transport jar from a Geronimo snapshot that was using a matching
>>> spec level. Lots of opportunity for error here, and it makes it
>>> difficult for other projects to use the javamail support. Axis
>>> is already doing this, but fortunately, they are only using the
>>> javax.mail.* stuff for Mime encoding support and are not
>>> dependent on transport or store implementations.
>>>
>>> It seems, at a minimum, that the javamail-transport code should
>>> be moved from being a Geronimo module to a spec component.
>>> Ideally, it really should be merged into the javamail spec module
>>> to mirror how the Sun implementation works.
>>> Am I missing something? Is there some compelling reason why this
>>> should be structured this way? I really suspect we ended up at
>>> this point through a combination of ignorance and historical
>>> accident. Originally, the smtp transport code was just a sandbox
>>> component. It was upgraded into working code because the console
>>> wanted to implement a portlet for configuring mail resouces
>>> configurations. When this code was promoted out of the sandbox,
>>> a new javamail-transport module was created because we weren't
>>> really sure where it really belonged....and we named it badly to
>>> boot. It really should have been called javamail-protocol. The
>>> transport portion of the name starting looking silly when we add
>>> the pop3 STORE protocol handler.
>>
>> I look at things from a different viewpoint. I never really
>> understood why any part of the implementation had to be bundled
>> with the JavaMail spec jar. Folklore has it that the
>> specification implies that this must be the case. This flies in
>> the face of my experience w/ many of the Java JSR specs that I am
>> familiar with; I have not read the spec for fear of being asked to
>> support it. :) IMO, doing something because Sun does it that way
>> is not a good argument.
>>
>> Can you explain why *any* part of the implementation needs to be a
>> part of the spec jar? My personal preference is to keep the
>> protocol handlers out of it.
> I think part of my concern with javamail is the growing desire to
> use it decoupled from Geronimo. Axis is already doing this, but
> only using the base API classes (which are more implementation than
> "spec". There's a lot of executable code in the base API
> classes). Axis is already doing this for their attachment
> support. I hear rumblings that Harmony would like to use this
> package as well. As currently bundled, there is no one place you
> can go to obtain just the complete Geronimo javamail
> implementation. Right now, you need to download 2 spec jars +
> extract the javamail-transport jar from a Geronimo snapshot in
> order to do this. The code in javamail-transport has no
> dependencies on any other part of Geronimo, so that coupling is a
> bit artificial.
>
> The other reason is just one of pragmatics. Users seem to be
> tripping over this all the time, getting errors about unable to
> load the smtp protocol because the javamail-transport is missing
> from there configuration. If the protocol handlers and the API
> classes are together, as with the Sun jars, these errors will no
> longer occur.
>
>
>>
>>
>> Regards,
>> Alan
>>
>>
>>
>>