Great initiative.

Instead of storing such information in a plain-text file it could be
stored in the neo4j store itself (as a sub-reference node or
something).

I don't know if that'd be good/better though.

2010/1/4 Tobias Ivarsson <[email protected]>:
> Hi,
>
> Neo4j today is made up of a core service that persists nodes, relationships
> and properties. In addition to that there are a number of additional
> services, where index-util is probably the most used and most important at
> the moment. index-util is also a good example of the problem I would like to
> discuss in this email.
>
> With the current architecture there is no way of introspecting which
> additional services have been initialized with a particular Neo store, for
> example there is no way of telling which (if any) IndexService has been
> used. This causes problems with the transaction recovery process, where the
> recovery mechanism today has to know about all possible extension services
> without having a compile time dependency on them. Needless to say this
> causes a mess. The code for this is ugly and borderline-buggy. It also
> causes a problem when introspecting a store, or even restarting your
> software, since it is up to the programmer to remember to restart all of the
> same services as last time.
>
> I would like to propose an addition to the store, in a separate metadata
> file in the store directory, where we store a simple list of all started
> additional services. Does anyone have any suggestions to what this should
> look like to be reasonable future proof (i.e. be able to handle some service
> that is not implemented yet as well as the current index-utils).
>
> What comes to mind is something similar to the Java ServiceLoader API [1],
> but simplified with the fact that we can require all classes referenced in
> the file to implement one specific interface, and we know where the file
> will be, in effect taking out all the complications involving ClassLoaders.
> What I'm worrying about is that storing Java classnames in a file will make
> this metadata unusable to any future implementations of the NeoStore format
> outside of the Java platform. Any suggestions to how information about
> loaded services can be stored is welcome, my idea of a clear text file might
> not even be good (since people have a tendency to think they can patch those
> manually).
>
> Since we have a community of smart and entrepreneurial individuals I thought
> I'd throw the question out here and see if I got any good responses.
>
> Cheers,
> Tobias
>
> [1] http://java.sun.com/javase/6/docs/api/java/util/ServiceLoader.html
> Simple explanation of how it works:
>  * You have an interface with fully qualified classname:
> com.somedomain.someproduct.ServiceInterface
>  * In each jar that provides implementations of the ServiceInterface you add
> a file called
>   META-INF/services/com.somedomain.someproduct.ServiceInterface
>  * In this file you put the fully qualified classnames of each implementing
> class separated by newline
>  * In your code you do: ServiceLoader<ServiceInterface> impls =
> ServiceLoader.load(ServiceInterface.class);
> --
> Tobias Ivarsson <[email protected]>
> Hacker, Neo Technology
> www.neotechnology.com
> Cellphone: +46 706 534857
> _______________________________________________
> Neo mailing list
> [email protected]
> https://lists.neo4j.org/mailman/listinfo/user
>



-- 
Mattias Persson, [[email protected]]
Neo Technology, www.neotechnology.com
_______________________________________________
Neo mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to