>
> When a class is loaded, the <init> is not run. That happens on first use.
>
Ah, this is what I did not understand correctly. Okay, no problem.
IMHO JenaSystem.init is a step in the right direction and better way than
> the current way initialization is done.
>
No argument here.
What would be helpful at this point is concrete improvements/alternatives
and concrete evaluation esp in OSGi. [*]
I would like to do that, but I am still working JENA-624, _very_ slowly
(bits of Sunday afternoons only). Ah, the joys of all-volunteer projects,
right? {grin}
---
A. Soroka
The University of Virginia Library
On Sun, Sep 20, 2015 at 9:53 AM, Andy Seaborne <[email protected]> wrote:
> On 20/09/15 12:16, A. Soroka wrote:
>
>> On Sep 18, 2015, at 6:21 PM, Andy Seaborne <[email protected]> wrote:
>>
>>>
>>> How would people have the chance to call JenaSystem::set before those
>>>> static initializers run? Or am I misunderstanding the use of the hook?
>>>>
>>>
>>> The documentation
>>>
>>> /**
>>> * Set the {@link JenaSubsystemRegistry}.
>>> * To have any effect, this function must be called before any other
>>> Jena code,
>>> * and especially before calling {@code JenaSystem.init()}.
>>> */
>>>
>>> Touch Jena and it initialises.
>>>
>>
>> Yes, this is what I don’t understand. If JenaSystem.init() is
>> gettingcalled in static initializers (and it is) then that means I must
>> somehow
>> call JenaSystem.set() in static code, too, or I don’t see how it happen
>> before JenaSystem.init(). Even then, it doesn’t seem that I can
>> guarantee that my JenaSystem.set() call will precede JenaSystem.init()
>> getting called.
>>
>
> This works with "*********** LOAD" printed and running with debug on:
>
> JenaSubsystemRegistry r = new JenaSubsystemRegistryBasic() {
> @Override
> public void load() {
> System.err.println("*********** LOAD") ;
> super.load();
> }
> } ;
>
> // Set the sub-system registry
> JenaSystem.setSubsystemRegistry(r);
>
> // Enable output if required
> JenaSystem.DEBUG_INIT = true ;
>
> // Initialize Jena directly or indirectly
> //JenaSystem.init() ;
> ModelFactory.createDefaultModel() ;
>
> and ModelFactory has a static initializer. This is the first call to
> "other Jena code". When a class is loaded, the <init> is not run. That
> happens on first use.
>
> Run the example code above uncommenting the "System.init()" and you will
> see that the call in ModelFactory returns early (the recursive
> initialization problem - much discussed in the comments and a well known
> Java issue.) if the explicit JenaSystem.init() is used.
>
>
> IMHO JenaSystem.init is a step in the right direction and better way than
> the current way initialization is done.
>
> What would be helpful at this point is concrete improvements/alternatives
> and concrete evaluation esp in OSGi. [*]
>
> Andy
>
>
> http://jena.staging.apache.org/documentation/notes/system-initialization.html
>
> [*] JENA-913 : The OSGi integration testing in the build is broken.
>
>
>
>> ---
>> A. Soroka
>> The University of Virginia Library
>>
>>
>>
>