[jboss-as7-dev] IMPORTANT!: I NEED FINALS LIST
David M. Lloyd
david.lloyd at redhat.com
Mon Feb 6 08:58:32 EST 2012
On 02/06/2012 03:00 AM, Carlo de Wolf wrote:
> On 02/04/2012 07:29 PM, David M. Lloyd wrote:
>> On 02/04/2012 04:52 AM, Carlo de Wolf wrote:
>>> On 02/03/2012 12:40 PM, Carlo de Wolf wrote:
>>>> On 02/02/2012 06:22 PM, Jason T. Greene wrote:
>>>>> org.jboss.ejb3.ext-api 2.0.0-beta-3
>>>>> org.jboss.metadata 7.0.0.Beta35
>>>>>
>>>> Branch https://github.com/wolfc/metadata/tree/dependencies is waiting on:
>>>> - jboss-logging
>>> Upgraded to 3.1.0.GA.
>>>
>>>> - https://github.com/jboss/jboss-ejb-api_spec/pull/1
>>> I see it has been merged, but rolled back.
>>> What is the issue here?
>>> (Note that it can be viewed as a regression from 1.0.0 to 1.0.1.)
>> It can also be viewed as not a regression. These dependencies should be
>> provided as they are only required if you actually reference those
>> classes. Compile scope dependencies should only be used in APIs when
>> the API is completely unusable without the dependency.
>
> It is a known deficiency on the EG that EJB API has dependencies on JTA
> API and JAX-RPC API.
> Unfortunately there is nothing that can be done to change that.
>
> I think we should not make it any harder on consumers of the EJB API,
> because having the JTA API or JAX-RPC API through EJB API should not
> imply those functions are available.
I don't think it's particularly onerous at all. At compile-time, if you
don't use JTA or JAX-RPC then there is absolutely no benefit to having
them on your compile class path. It's not about available
functionality. It's about opting in to the features that you use,
instead of opting out of features that the user probably isn't even
aware of, and avoiding pointless class path explosion and all the
problems that come with it.
> In fact the EJB container is obliged to have JAX-RPC API available even
> in lite mode, because else you would run into a problem with
> SessionContext.getMessageContext. The method itself however will throw
> an IllegalStateException.
Good thing Maven dependencies have absolutely nothing to do with the EJB
container run time.
> In other words having EJB API provided, implies JTA API and JAX-RPC API
> are provided as well.
Not at all. When something is "provided" in Maven, that doesn't mean
that the dependency is provided. The scope was named on the assumption
of the run time disposition of the JAR, which is pretty silly given that
Maven is a compile-time tool. Think of "provided" as "import" and
"compile" as "re-export" and you're a lot closer to reality (though of
course Maven is very sloppy when it comes to actually assembling the
artifacts since they're all flattened into one class path, so it's not
perfectly identical to the corresponding modular terms).
The rule is this. Given APIs named A and B, and B depends on A, the
dependency should always be "provided" unless B is completely unusable
without A, in which case the default "compile" is acceptable.
--
- DML
More information about the jboss-as7-dev
mailing list