>
> 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
>>
>>
>>
>

Reply via email to