A specific question: what about class to base-class relationships? Can a
base-class or java interface be in a separate jar/module?

On Thu, Mar 31, 2022 at 12:57 PM Mike Beckerle <mbecke...@apache.org> wrote:

> Taking this thread over to our dev list.
>
> Please sanity check this notion on how to readily fix the conflict from
> packages that are split across jars.
>
> Consider a module such as daffodil-lib. It contains code in package
> org.apache.daffodil.api today.
>
> Some of this code is written by hand, other code is generated by a code
> generator.
>
> We simply insert a package in the chain so that all this code is now in
> package org.apache.daffodil.lib.api
>
> Other modules similarly grow a module-named package tier. E.g.,
> daffodil-runtime1 all packages get put under org.apache.daffodil.runtime1.
>
> Modules would then no longer be sharing packages. All the package nests
> become 1 step deeper.
>
> I know this will break quite a few things that are depending on internal
> APIs right now, but hey, those are depending on internal APIs.
>
> Is the needed change as simple as this?
>
>
>
>
>
> On Thu, Mar 31, 2022 at 11:01 AM Martin Lichtin <lich...@yahoo.com> wrote:
>
>> Thanks for adding me to the thread.
>>
>> Regarding your last comment, let's ignore services, this is a
>> higher-level feature that we do not need to discuss in the context of the
>> Daffodil library. As you say, Daffodil is just a library (a very useful
>> one, btw) and that's ok, no need to change anything in this regard. It's
>> also fine to split the code into several JARs, no problem there.
>>
>> The only issue I'm trying to address is the split-package that I'm seeing
>> for package "org.apache.daffodil.api" (and perhaps others as you mention).
>> Classes of this package reside in more than one JAR and that's a problem
>> with regards to modularity (see also Java 9 modules where this is not
>> allowed either, for example
>> https://docs.microsoft.com/en-us/java/openjdk/transition-from-java-8-to-java-11#noclassdeffounderror-caused-by-split-packages
>> ).
>>
>> Think of a package as being _exported_ by one (and only one) JAR and a
>> class loader can therefore remember this upfront and doesn't need to search
>> the complete class path to find a class at run-time.
>>
>> I haven't yet looked at org.apache.daffodil.processors, but if you using
>> sub-packages for each converter, such as org.apache.daffodil.processors.a,
>> org.apache.daffodil.processors.b, org.apache.daffodil.processors.c,
>> org.apache.daffodil.processors.test then "a", "b", "c", "test" can
>> certainly reside in separate JARs, that again is not a problem. It's only a
>> problem if the split is on the same package level, e.g. if class
>> org.apache.daffodil.processors.A.class and
>> org.apache.daffodil.processors.B.class would not be packaged in the same
>> JAR.
>>
>> Sorry for the lengthy mail, it all may seem a bit strange, but the
>> concept is around for years and it really helps with modular programming.
>> Just as an exercise, check the MANIFEST.MF of some of your favorite
>> open-source JARs, most in fact are built as bundles, and have Import- and
>> Export-Package declarations to support modular container runtimes.
>>
>> - Martin
>>
>>
>> On 31/03/2022 16:17, Mike Beckerle wrote:
>>
>> (resend making sure M Lichtin is on this thread)
>>
>> It seems that an OGSi module is supposed to provide a "service" which can
>> be activated.
>>
>> Our daffodil jars are nothing like organized as separate service
>> providers. They're more ad-hoc libraries of code with shared concerns.
>>
>> A sensible "service" from daffodil would involve running code from
>> several of the jars.
>>
>> Can you comment on this - when a sensible OGSI service requires code that
>> is distributed across many jars?
>>
>>
>>> On Thu, Mar 31, 2022 at 10:03 AM Mike Beckerle <mbecke...@apache.org>
>>> wrote:
>>>
>>>> Created https://issues.apache.org/jira/browse/DAFFODIL-2683 to track
>>>> this issue.
>>>>
>>>>
>>>>
>>>> On Thu, Mar 31, 2022 at 9:55 AM Mike Beckerle <mbecke...@apache.org>
>>>> wrote:
>>>>
>>>>> So, it seems there is, in general, an assumption in OGSi that a
>>>>> package does not get contributions from multiple jar files?
>>>>>
>>>>> I expect that the org.apache.daffodil.api conflict is only the first
>>>>> of many such conflicts you would hit. Several of our packages are split
>>>>> across the jars. Participation in a package is kind of orthogonal to
>>>>> presence in a jar in Daffodil right now.
>>>>>
>>>>> org.apache.daffodil.processors is split across 5 modules. 6 if you
>>>>> count the test code.
>>>>>
>>>>> This can of course be fixed but this is our first experience with this
>>>>> requirement.
>>>>>
>>>>> I will create a JIRA ticket for this.
>>>>>
>>>>> In the mean time, I'm not sure what to suggest as a workaround.
>>>>> Perhaps you have to unjar everything, put all the files in a common
>>>>> directory tree, and re-jar it all?
>>>>>
>>>>>
>>>>> On Thu, Mar 31, 2022 at 1:42 AM Martin Lichtin <lich...@yahoo.com>
>>>>> wrote:
>>>>>
>>>>>> Hi
>>>>>>
>>>>>> Trying to run Daffodil inside Apache Karaf (OSGi container) I noticed
>>>>>> that the Daffodil JARs are not built as bundles. That's not a
>>>>>> problem,
>>>>>> they can be bundle'ized on the fly.
>>>>>>
>>>>>> However, what's an issue is that two JARs contain the same package.
>>>>>> Both
>>>>>> daffodil-runtime1_2.12 and daffodil-lib_2.12 expose
>>>>>> "org.apache.daffodil.api" and therefore this package is split and
>>>>>> causes
>>>>>> a conflict.
>>>>>>
>>>>>> Could perhaps this package moved into an "api" JAR, or one of the two
>>>>>> JARs renames it such that there's no longer a split-package situation.
>>>>>>
>>>>>> - Martin
>>>>>>
>>>>>>
>>>>>>

Reply via email to