You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Martynas Jusevičius <ma...@atomgraph.com> on 2020/06/29 13:47:25 UTC

ConcurrentModificationException using RDFLanguages.getRegisteredLanguages()

Hi,

I've got a class that is initialized with Jena's registered languages:

    public MediaTypes()
    {
        this(RDFLanguages.getRegisteredLanguages(), UTF8_PARAM);
    }

    protected MediaTypes(Collection<Lang> registered, Map<String,
String> parameters)
    {
        ...
        Iterator<Lang> langIt = registered.iterator();
        while (langIt.hasNext())
        {
            Lang lang = langIt.next();
        ...

After the upgrade to 3.16.0-SNAPSHOT, I am getting a
ConcurrentModificationException on the langIt.next() (worked without
problems with 3.0.1).

I've been able to debug that the MediaTypes() constructor is being
called while Jena's languages are not done initializing yet.
The breakpoint at line 256 is from within RDFLanguages.register(Lang
lang); at line 71 is the MediaTypes() constructor.

...
Breakpoint hit at line 256 in class org.apache.jena.riot.RDFLanguages
by thread http-nio-8080-exec-290.
Breakpoint hit at line 256 in class org.apache.jena.riot.RDFLanguages
by thread http-nio-8080-exec-290.
Breakpoint hit at line 71 in class com.atomgraph.core.MediaTypes by
thread http-nio-8080-exec-290.
Breakpoint hit at line 256 in class org.apache.jena.riot.RDFLanguages
by thread http-nio-8080-exec-290.
Breakpoint hit at line 256 in class org.apache.jena.riot.RDFLanguages
by thread http-nio-8080-exec-290.
...

I cannot get the caller info with NetBeans, but I'm quite sure these
are Jena's internal RDFLanguages.register() calls as I've removed all
calls from our code for now.

This is more of a general static initialization problem I suppose, but
how would you go about addressing it? How does one get all the
languages from RDFLanguages.getRegisteredLanguages()? There's no hook
that would notify completed registration AFAIK.

Thanks.

Martynas

Re: ConcurrentModificationException using RDFLanguages.getRegisteredLanguages()

Posted by Martynas Jusevičius <ma...@atomgraph.com>.
I know. I have no explanation. Maybe the NetBeans are messing with me.

On Wed, Jul 1, 2020 at 2:52 PM Andy Seaborne <an...@apache.org> wrote:
>
>
>
> On 01/07/2020 09:58, Martynas Jusevičius wrote:
> > Thanks.
> >
> > What jar is missing though? I have apache-jena-libs as a dependency. I
> > can see it includes TDB and TDB2.
>
> And ARQ - but that disagrees with the error you are seeing:
>
> java.lang.NoClassDefFoundError:
> org/apache/jena/sparql/engine/main/StageGenerator
>
>      Andy
>
> >
> > What weirds me out is that this only happens during debugging.
> >
> > On Wed, Jul 1, 2020 at 9:56 AM Andy Seaborne <an...@apache.org> wrote:
> >>
> >>
> >>
> >> On 30/06/2020 23:11, Martynas Jusevičius wrote:
> >>> Andy,
> >>>
> >>> where do you put JenaSystem.init() in unit tests, for example?
> >>>
> >>> Using 3.16.0-SNAPSHOT, I've changed the test code a little and started
> >>> getting this - though only when I attempt to debug the ConstraintTest
> >>> class:
> >>>
> >>> com.atomgraph.spinrdf.constraints.ConstraintTest  Time elapsed: 0.419
> >>> sec  <<< ERROR!
> >>> java.lang.NoClassDefFoundError:
> >>> org/apache/jena/sparql/engine/main/StageGenerator
> >>> at org.apache.jena.tdb.sys.InitTDB.start(InitTDB.java:29)
> >>> at org.apache.jena.sys.JenaSystem.lambda$init$2(JenaSystem.java:117)
> >>> at java.util.ArrayList.forEach(ArrayList.java:1257)
> >>> at org.apache.jena.sys.JenaSystem.forEach(JenaSystem.java:192)
> >>> at org.apache.jena.sys.JenaSystem.forEach(JenaSystem.java:169)
> >>> at org.apache.jena.sys.JenaSystem.init(JenaSystem.java:115)
> >>> at com.atomgraph.spinrdf.constraints.ConstraintTest.<clinit>(ConstraintTest.java:51)
> >>>
> >>> The call is in a static initializer:
> >>>
> >>> public class ConstraintTest
> >>> {
> >>>
> >>>       static
> >>>       {
> >>
> >> You check everything is available with:
> >>
> >>              JenaSystem.DEBUG_INIT = true;
> >>
> >>>           JenaSystem.init();
> >>>       }
> >>>
> >>> Or is this unrelated to the JenaSystem.init()?
> >>
> >>
> >> Unrelated.
> >>
> >> It is as if there is a missing jar.
> >>
> >>       Andy
> >>
> >>
> >> Most of the time JenaSystem.init() happens automatically because it is
> >> in a static block of every major entry point class - but Java class
> >> initialization, and the fact that initialization of recursive class is
> >> switched off by off when one class is loading, makes it complicated even
> >> though thread-safe.  "static final X = new Object" can be null!
> >>
> >> (RDFLangauges/Lang is particular hard because there is a mutual
> >> dependency that predates the full JenaSystem.init).
> >>
> >>>
> >>> POM:
> >>>
> >>>           <dependency>
> >>>               <groupId>org.apache.jena</groupId>
> >>>               <artifactId>apache-jena-libs</artifactId>
> >>>               <version>3.16.0-SNAPSHOT</version>
> >>>               <type>pom</type>
> >>>           </dependency>
> >>>
> >>> On Mon, Jun 29, 2020 at 11:40 PM Martynas Jusevičius
> >>> <ma...@atomgraph.com> wrote:
> >>>>
> >>>> On Mon, Jun 29, 2020 at 6:34 PM Andy Seaborne <an...@apache.org> wrote:
> >>>>>
> >>>>>
> >>>>>
> >>>>> On 29/06/2020 14:47, Martynas Jusevičius wrote:
> >>>>>> Hi,
> >>>>>>
> >>>>>> I've got a class that is initialized with Jena's registered languages:
> >>>>>
> >>>>> And how/when is that called?
> >>>>>
> >>>>> I presume you don't use Jena initialization mechanism.
> >>>>>
> >>>>> https://jena.apache.org/documentation/notes/system-initialization
> >>>>
> >>>> You're right, I've missed that. JenaSystem.init() wasn't being called.
> >>>>
> >>>>> One thing as a general measure: call "JenaSystem.init()" early in statup
> >>>>> before requests come in.
> >>>>
> >>>> Yes. I was wondering where that could be in a webapp. But then I found
> >>>> the FusekiServerEnvironmentInit (ServletContextListener) and
> >>>> implemented the same and now it looks like the problem went away.
> >>>> https://github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/webapp/FusekiServerEnvironmentInit.java

Re: ConcurrentModificationException using RDFLanguages.getRegisteredLanguages()

Posted by Andy Seaborne <an...@apache.org>.

On 01/07/2020 09:58, Martynas Jusevičius wrote:
> Thanks.
> 
> What jar is missing though? I have apache-jena-libs as a dependency. I
> can see it includes TDB and TDB2.

And ARQ - but that disagrees with the error you are seeing:

java.lang.NoClassDefFoundError:
org/apache/jena/sparql/engine/main/StageGenerator

     Andy

> 
> What weirds me out is that this only happens during debugging.
> 
> On Wed, Jul 1, 2020 at 9:56 AM Andy Seaborne <an...@apache.org> wrote:
>>
>>
>>
>> On 30/06/2020 23:11, Martynas Jusevičius wrote:
>>> Andy,
>>>
>>> where do you put JenaSystem.init() in unit tests, for example?
>>>
>>> Using 3.16.0-SNAPSHOT, I've changed the test code a little and started
>>> getting this - though only when I attempt to debug the ConstraintTest
>>> class:
>>>
>>> com.atomgraph.spinrdf.constraints.ConstraintTest  Time elapsed: 0.419
>>> sec  <<< ERROR!
>>> java.lang.NoClassDefFoundError:
>>> org/apache/jena/sparql/engine/main/StageGenerator
>>> at org.apache.jena.tdb.sys.InitTDB.start(InitTDB.java:29)
>>> at org.apache.jena.sys.JenaSystem.lambda$init$2(JenaSystem.java:117)
>>> at java.util.ArrayList.forEach(ArrayList.java:1257)
>>> at org.apache.jena.sys.JenaSystem.forEach(JenaSystem.java:192)
>>> at org.apache.jena.sys.JenaSystem.forEach(JenaSystem.java:169)
>>> at org.apache.jena.sys.JenaSystem.init(JenaSystem.java:115)
>>> at com.atomgraph.spinrdf.constraints.ConstraintTest.<clinit>(ConstraintTest.java:51)
>>>
>>> The call is in a static initializer:
>>>
>>> public class ConstraintTest
>>> {
>>>
>>>       static
>>>       {
>>
>> You check everything is available with:
>>
>>              JenaSystem.DEBUG_INIT = true;
>>
>>>           JenaSystem.init();
>>>       }
>>>
>>> Or is this unrelated to the JenaSystem.init()?
>>
>>
>> Unrelated.
>>
>> It is as if there is a missing jar.
>>
>>       Andy
>>
>>
>> Most of the time JenaSystem.init() happens automatically because it is
>> in a static block of every major entry point class - but Java class
>> initialization, and the fact that initialization of recursive class is
>> switched off by off when one class is loading, makes it complicated even
>> though thread-safe.  "static final X = new Object" can be null!
>>
>> (RDFLangauges/Lang is particular hard because there is a mutual
>> dependency that predates the full JenaSystem.init).
>>
>>>
>>> POM:
>>>
>>>           <dependency>
>>>               <groupId>org.apache.jena</groupId>
>>>               <artifactId>apache-jena-libs</artifactId>
>>>               <version>3.16.0-SNAPSHOT</version>
>>>               <type>pom</type>
>>>           </dependency>
>>>
>>> On Mon, Jun 29, 2020 at 11:40 PM Martynas Jusevičius
>>> <ma...@atomgraph.com> wrote:
>>>>
>>>> On Mon, Jun 29, 2020 at 6:34 PM Andy Seaborne <an...@apache.org> wrote:
>>>>>
>>>>>
>>>>>
>>>>> On 29/06/2020 14:47, Martynas Jusevičius wrote:
>>>>>> Hi,
>>>>>>
>>>>>> I've got a class that is initialized with Jena's registered languages:
>>>>>
>>>>> And how/when is that called?
>>>>>
>>>>> I presume you don't use Jena initialization mechanism.
>>>>>
>>>>> https://jena.apache.org/documentation/notes/system-initialization
>>>>
>>>> You're right, I've missed that. JenaSystem.init() wasn't being called.
>>>>
>>>>> One thing as a general measure: call "JenaSystem.init()" early in statup
>>>>> before requests come in.
>>>>
>>>> Yes. I was wondering where that could be in a webapp. But then I found
>>>> the FusekiServerEnvironmentInit (ServletContextListener) and
>>>> implemented the same and now it looks like the problem went away.
>>>> https://github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/webapp/FusekiServerEnvironmentInit.java

Re: ConcurrentModificationException using RDFLanguages.getRegisteredLanguages()

Posted by Martynas Jusevičius <ma...@atomgraph.com>.
Thanks.

What jar is missing though? I have apache-jena-libs as a dependency. I
can see it includes TDB and TDB2.

What weirds me out is that this only happens during debugging.

On Wed, Jul 1, 2020 at 9:56 AM Andy Seaborne <an...@apache.org> wrote:
>
>
>
> On 30/06/2020 23:11, Martynas Jusevičius wrote:
> > Andy,
> >
> > where do you put JenaSystem.init() in unit tests, for example?
> >
> > Using 3.16.0-SNAPSHOT, I've changed the test code a little and started
> > getting this - though only when I attempt to debug the ConstraintTest
> > class:
> >
> > com.atomgraph.spinrdf.constraints.ConstraintTest  Time elapsed: 0.419
> > sec  <<< ERROR!
> > java.lang.NoClassDefFoundError:
> > org/apache/jena/sparql/engine/main/StageGenerator
> > at org.apache.jena.tdb.sys.InitTDB.start(InitTDB.java:29)
> > at org.apache.jena.sys.JenaSystem.lambda$init$2(JenaSystem.java:117)
> > at java.util.ArrayList.forEach(ArrayList.java:1257)
> > at org.apache.jena.sys.JenaSystem.forEach(JenaSystem.java:192)
> > at org.apache.jena.sys.JenaSystem.forEach(JenaSystem.java:169)
> > at org.apache.jena.sys.JenaSystem.init(JenaSystem.java:115)
> > at com.atomgraph.spinrdf.constraints.ConstraintTest.<clinit>(ConstraintTest.java:51)
> >
> > The call is in a static initializer:
> >
> > public class ConstraintTest
> > {
> >
> >      static
> >      {
>
> You check everything is available with:
>
>             JenaSystem.DEBUG_INIT = true;
>
> >          JenaSystem.init();
> >      }
> >
> > Or is this unrelated to the JenaSystem.init()?
>
>
> Unrelated.
>
> It is as if there is a missing jar.
>
>      Andy
>
>
> Most of the time JenaSystem.init() happens automatically because it is
> in a static block of every major entry point class - but Java class
> initialization, and the fact that initialization of recursive class is
> switched off by off when one class is loading, makes it complicated even
> though thread-safe.  "static final X = new Object" can be null!
>
> (RDFLangauges/Lang is particular hard because there is a mutual
> dependency that predates the full JenaSystem.init).
>
> >
> > POM:
> >
> >          <dependency>
> >              <groupId>org.apache.jena</groupId>
> >              <artifactId>apache-jena-libs</artifactId>
> >              <version>3.16.0-SNAPSHOT</version>
> >              <type>pom</type>
> >          </dependency>
> >
> > On Mon, Jun 29, 2020 at 11:40 PM Martynas Jusevičius
> > <ma...@atomgraph.com> wrote:
> >>
> >> On Mon, Jun 29, 2020 at 6:34 PM Andy Seaborne <an...@apache.org> wrote:
> >>>
> >>>
> >>>
> >>> On 29/06/2020 14:47, Martynas Jusevičius wrote:
> >>>> Hi,
> >>>>
> >>>> I've got a class that is initialized with Jena's registered languages:
> >>>
> >>> And how/when is that called?
> >>>
> >>> I presume you don't use Jena initialization mechanism.
> >>>
> >>> https://jena.apache.org/documentation/notes/system-initialization
> >>
> >> You're right, I've missed that. JenaSystem.init() wasn't being called.
> >>
> >>> One thing as a general measure: call "JenaSystem.init()" early in statup
> >>> before requests come in.
> >>
> >> Yes. I was wondering where that could be in a webapp. But then I found
> >> the FusekiServerEnvironmentInit (ServletContextListener) and
> >> implemented the same and now it looks like the problem went away.
> >> https://github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/webapp/FusekiServerEnvironmentInit.java

Re: ConcurrentModificationException using RDFLanguages.getRegisteredLanguages()

Posted by Andy Seaborne <an...@apache.org>.

On 30/06/2020 23:11, Martynas Jusevičius wrote:
> Andy,
> 
> where do you put JenaSystem.init() in unit tests, for example?
> 
> Using 3.16.0-SNAPSHOT, I've changed the test code a little and started
> getting this - though only when I attempt to debug the ConstraintTest
> class:
> 
> com.atomgraph.spinrdf.constraints.ConstraintTest  Time elapsed: 0.419
> sec  <<< ERROR!
> java.lang.NoClassDefFoundError:
> org/apache/jena/sparql/engine/main/StageGenerator
> at org.apache.jena.tdb.sys.InitTDB.start(InitTDB.java:29)
> at org.apache.jena.sys.JenaSystem.lambda$init$2(JenaSystem.java:117)
> at java.util.ArrayList.forEach(ArrayList.java:1257)
> at org.apache.jena.sys.JenaSystem.forEach(JenaSystem.java:192)
> at org.apache.jena.sys.JenaSystem.forEach(JenaSystem.java:169)
> at org.apache.jena.sys.JenaSystem.init(JenaSystem.java:115)
> at com.atomgraph.spinrdf.constraints.ConstraintTest.<clinit>(ConstraintTest.java:51)
> 
> The call is in a static initializer:
> 
> public class ConstraintTest
> {
> 
>      static
>      {

You check everything is available with:

            JenaSystem.DEBUG_INIT = true;

>          JenaSystem.init();
>      }
> 
> Or is this unrelated to the JenaSystem.init()?


Unrelated.

It is as if there is a missing jar.

     Andy


Most of the time JenaSystem.init() happens automatically because it is 
in a static block of every major entry point class - but Java class 
initialization, and the fact that initialization of recursive class is 
switched off by off when one class is loading, makes it complicated even 
though thread-safe.  "static final X = new Object" can be null!

(RDFLangauges/Lang is particular hard because there is a mutual 
dependency that predates the full JenaSystem.init).

> 
> POM:
> 
>          <dependency>
>              <groupId>org.apache.jena</groupId>
>              <artifactId>apache-jena-libs</artifactId>
>              <version>3.16.0-SNAPSHOT</version>
>              <type>pom</type>
>          </dependency>
> 
> On Mon, Jun 29, 2020 at 11:40 PM Martynas Jusevičius
> <ma...@atomgraph.com> wrote:
>>
>> On Mon, Jun 29, 2020 at 6:34 PM Andy Seaborne <an...@apache.org> wrote:
>>>
>>>
>>>
>>> On 29/06/2020 14:47, Martynas Jusevičius wrote:
>>>> Hi,
>>>>
>>>> I've got a class that is initialized with Jena's registered languages:
>>>
>>> And how/when is that called?
>>>
>>> I presume you don't use Jena initialization mechanism.
>>>
>>> https://jena.apache.org/documentation/notes/system-initialization
>>
>> You're right, I've missed that. JenaSystem.init() wasn't being called.
>>
>>> One thing as a general measure: call "JenaSystem.init()" early in statup
>>> before requests come in.
>>
>> Yes. I was wondering where that could be in a webapp. But then I found
>> the FusekiServerEnvironmentInit (ServletContextListener) and
>> implemented the same and now it looks like the problem went away.
>> https://github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/webapp/FusekiServerEnvironmentInit.java

Re: ConcurrentModificationException using RDFLanguages.getRegisteredLanguages()

Posted by Martynas Jusevičius <ma...@atomgraph.com>.
Andy,

where do you put JenaSystem.init() in unit tests, for example?

Using 3.16.0-SNAPSHOT, I've changed the test code a little and started
getting this - though only when I attempt to debug the ConstraintTest
class:

com.atomgraph.spinrdf.constraints.ConstraintTest  Time elapsed: 0.419
sec  <<< ERROR!
java.lang.NoClassDefFoundError:
org/apache/jena/sparql/engine/main/StageGenerator
at org.apache.jena.tdb.sys.InitTDB.start(InitTDB.java:29)
at org.apache.jena.sys.JenaSystem.lambda$init$2(JenaSystem.java:117)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.apache.jena.sys.JenaSystem.forEach(JenaSystem.java:192)
at org.apache.jena.sys.JenaSystem.forEach(JenaSystem.java:169)
at org.apache.jena.sys.JenaSystem.init(JenaSystem.java:115)
at com.atomgraph.spinrdf.constraints.ConstraintTest.<clinit>(ConstraintTest.java:51)

The call is in a static initializer:

public class ConstraintTest
{

    static
    {
        JenaSystem.init();
    }

Or is this unrelated to the JenaSystem.init()?

POM:

        <dependency>
            <groupId>org.apache.jena</groupId>
            <artifactId>apache-jena-libs</artifactId>
            <version>3.16.0-SNAPSHOT</version>
            <type>pom</type>
        </dependency>

On Mon, Jun 29, 2020 at 11:40 PM Martynas Jusevičius
<ma...@atomgraph.com> wrote:
>
> On Mon, Jun 29, 2020 at 6:34 PM Andy Seaborne <an...@apache.org> wrote:
> >
> >
> >
> > On 29/06/2020 14:47, Martynas Jusevičius wrote:
> > > Hi,
> > >
> > > I've got a class that is initialized with Jena's registered languages:
> >
> > And how/when is that called?
> >
> > I presume you don't use Jena initialization mechanism.
> >
> > https://jena.apache.org/documentation/notes/system-initialization
>
> You're right, I've missed that. JenaSystem.init() wasn't being called.
>
> > One thing as a general measure: call "JenaSystem.init()" early in statup
> > before requests come in.
>
> Yes. I was wondering where that could be in a webapp. But then I found
> the FusekiServerEnvironmentInit (ServletContextListener) and
> implemented the same and now it looks like the problem went away.
> https://github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/webapp/FusekiServerEnvironmentInit.java

Re: ConcurrentModificationException using RDFLanguages.getRegisteredLanguages()

Posted by Martynas Jusevičius <ma...@atomgraph.com>.
On Mon, Jun 29, 2020 at 6:34 PM Andy Seaborne <an...@apache.org> wrote:
>
>
>
> On 29/06/2020 14:47, Martynas Jusevičius wrote:
> > Hi,
> >
> > I've got a class that is initialized with Jena's registered languages:
>
> And how/when is that called?
>
> I presume you don't use Jena initialization mechanism.
>
> https://jena.apache.org/documentation/notes/system-initialization

You're right, I've missed that. JenaSystem.init() wasn't being called.

> One thing as a general measure: call "JenaSystem.init()" early in statup
> before requests come in.

Yes. I was wondering where that could be in a webapp. But then I found
the FusekiServerEnvironmentInit (ServletContextListener) and
implemented the same and now it looks like the problem went away.
https://github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/webapp/FusekiServerEnvironmentInit.java

Re: ConcurrentModificationException using RDFLanguages.getRegisteredLanguages()

Posted by Andy Seaborne <an...@apache.org>.

On 29/06/2020 14:47, Martynas Jusevičius wrote:
> Hi,
> 
> I've got a class that is initialized with Jena's registered languages:

And how/when is that called?

I presume you don't use Jena initialization mechanism.

https://jena.apache.org/documentation/notes/system-initialization

> 
>      public MediaTypes()
>      {
>          this(RDFLanguages.getRegisteredLanguages(), UTF8_PARAM);
>      }
> 
>      protected MediaTypes(Collection<Lang> registered, Map<String,
> String> parameters)
>      {
>          ...
>          Iterator<Lang> langIt = registered.iterator();
>          while (langIt.hasNext())
>          {
>              Lang lang = langIt.next();
>          ...
> 
> After the upgrade to 3.16.0-SNAPSHOT, I am getting a
> ConcurrentModificationException on the langIt.next() (worked without
> problems with 3.0.1).

Where's the concurrency coming from?
Always? Often? Sometimes?

> I've been able to debug that the MediaTypes() constructor is being
> called while Jena's languages are not done initializing yet.
> The breakpoint at line 256 is from within RDFLanguages.register(Lang
> lang); at line 71 is the MediaTypes() constructor.

Does your code initialize Jena explicitly or leave it to requests? That 
would be the concurrency?

One thing as a general measure: call "JenaSystem.init()" early in statup 
before requests come in.

> 
> ...
> Breakpoint hit at line 256 in class org.apache.jena.riot.RDFLanguages
> by thread http-nio-8080-exec-290.
> Breakpoint hit at line 256 in class org.apache.jena.riot.RDFLanguages
> by thread http-nio-8080-exec-290.
> Breakpoint hit at line 71 in class com.atomgraph.core.MediaTypes by
> thread http-nio-8080-exec-290.
> Breakpoint hit at line 256 in class org.apache.jena.riot.RDFLanguages
> by thread http-nio-8080-exec-290.
> Breakpoint hit at line 256 in class org.apache.jena.riot.RDFLanguages
> by thread http-nio-8080-exec-290.
> ...
> 
> I cannot get the caller info with NetBeans, but I'm quite sure these
> are Jena's internal RDFLanguages.register() calls as I've removed all
> calls from our code for now.
> 
> This is more of a general static initialization problem I suppose, but
> how would you go about addressing it? How does one get all the
> languages from RDFLanguages.getRegisteredLanguages()? There's no hook
> that would notify completed registration AFAIK.
> 
> Thanks.
> 
> Martynas
>