Re: [Neo4j] Any webservice based spring data graph example

2011-08-16 Thread Vipul Gupta
Thanks Sujit and Saikat.
I managed to get it up and running now.

Regarding the 2 process issue - I have a homegrown ApplicationContext loader
which was loading graph context twice. Managed to figure it out after
Sujit's suggestion.

On Tue, Aug 16, 2011 at 11:18 PM, Sujit Pal  wrote:

> Hi Vipul,
>
> I saw the same issue when trying to expose an embedded Neo4j database
> (plus some other things) via a Spring webapp.
>
> *"Caused by: java.lang.IllegalStateException: Unable to lock store
> [\neo4j\db\project\graph-project\neostore], this is usually a result of
> some other Neo4j kernel** running using the same store." *
>
> The problem was that I was trying to instantiate the
> GraphDatabaseService from two components with a new().
>
> I ended up building a factory that instantiates a singleton and returns
> a reference to the same GraphDatabaseService using a getInstance()
> method to all the components that need a handle to it.
>
> In my spring config I declare the bean containing the
> GraphDatabaseService (nodeService) like so:
>
>  factory-method="getInstance" destroy-method="destroy"/>
>
> where the NodeServiceFactory exposes 2 static methods getInstance() that
> returns the singleton reference and destroy which closes the reference
> on application shutdown.
>
> In the app, where I was doing a nodeService = new NodeService(), I
> replaced with nodeService = NodeService.getInstance().
>
> -sujit
>
>
> ___
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>
___
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user


Re: [Neo4j] Any webservice based spring data graph example

2011-08-16 Thread Vipul Gupta
 source [nioneodb], see nested exception for cause of
error
at
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:288)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at
org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
... 80 more
Caused by: org.springframework.beans.BeanInstantiationException: Could not
instantiate bean class [org.neo4j.kernel.EmbeddedGraphDatabase]: Constructor
threw ex
ception; nested exception is org.neo4j.graphdb.TransactionFailureException:
Could not create data source [nioneodb], see nested exception for cause of
error
at
org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:141)
at
org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:108)
at
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:280)
... 89 more
Caused by: org.neo4j.graphdb.TransactionFailureException: Could not create
data source [nioneodb], see nested exception for cause of error
at
org.neo4j.kernel.impl.transaction.TxModule.registerDataSource(TxModule.java:153)
at org.neo4j.kernel.GraphDbInstance.start(GraphDbInstance.java:111)
at
org.neo4j.kernel.EmbeddedGraphDbImpl.(EmbeddedGraphDbImpl.java:189)
at
org.neo4j.kernel.EmbeddedGraphDatabase.(EmbeddedGraphDatabase.java:79)
at
org.neo4j.kernel.EmbeddedGraphDatabase.(EmbeddedGraphDatabase.java:63)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at
org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126)
... 91 more
Caused by: java.lang.IllegalStateException: Unable to lock store
[\neo4j\db\project\graph-project\neostore], this is usually a result of some
other Neo4j kernel
 running using the same store.
at
org.neo4j.kernel.impl.nioneo.store.CommonAbstractStore.checkStorage(CommonAbstractStore.java:266)
at
org.neo4j.kernel.impl.nioneo.store.CommonAbstractStore.(CommonAbstractStore.java:169)
at
org.neo4j.kernel.impl.nioneo.store.AbstractStore.(AbstractStore.java:120)
at
org.neo4j.kernel.impl.nioneo.store.NeoStore.(NeoStore.java:65)
at
org.neo4j.kernel.impl.nioneo.xa.NeoStoreXaDataSource.(NeoStoreXaDataSource.java:134)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at
org.neo4j.kernel.impl.transaction.XaDataSourceManager.create(XaDataSourceManager.java:75)
at
org.neo4j.kernel.impl.transaction.TxModule.registerDataSource(TxModule.java:147)


On Tue, Aug 16, 2011 at 10:09 PM, Michael Hunger <
michael.hun...@neotechnology.com> wrote:

> do you by chance have different version of spring on your classpath?
>
> mvn dependency:tree
>
> helps to figure that out
>
>
>
> mobile mail please excuse brevity and typos
>
> Am 16.08.2011 um 17:53 schrieb Vipul Gupta :
>
> > Hi Andreas,
> >
> > Yes, I have been trying to run  Neo4j as an embedded database, with CXF
> > exposing a WSDL interface. I was having a number of issues in terms of
> > setting these 2 together.
> > Standalone test cases for just the neo4j graph and internal API works
&g

Re: [Neo4j] Any webservice based spring data graph example

2011-08-16 Thread Vipul Gupta
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at
org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
at
org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at
org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at
org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:222)
at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at
org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132)
at
org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:371)
at
org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:307)
at
org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:203)
at
org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:184)
at
org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:107)
at
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
at
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at
org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at
org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:534)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)

On Tue, Aug 16, 2011 at 5:59 AM, Andreas Kollegger <
andreas.kolleg...@neotechnology.com> wrote:

> Hi Vipul,
>
> What was the trouble you were having with Apache CXF? Were you deploying
> Neo4j as an embedded database, intending to use CXF to expose an interface?
> Or were you accessing Neo4j Server's REST api from Apache CXF?
>
> I'm not aware of any example projects that have used Apache CXF, but am
> pretty interested to hear about your experiences.
>
> Cheers,
> Andreas
>
> On Aug 15, 2011, at 8:07 AM, Vipul Gupta wrote:
>
> > I was having some trouble integrating Apache CXF with Spring data graph
> > container.
> > So I am wondering if there is any webservice based spring data graph
> example
> > for which I can look at the source code.
> >
> > Please let me know
> >
> > Thanks
> > ___
> > Neo4j mailing list
> > User@lists.neo4j.org
> > https://lists.neo4j.org/mailman/listinfo/user
>
> ___
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>
___
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user


[Neo4j] Any webservice based spring data graph example

2011-08-15 Thread Vipul Gupta
I was having some trouble integrating Apache CXF with Spring data graph
container.
So I am wondering if there is any webservice based spring data graph example
for which I can look at the source code.

Please let me know

Thanks
___
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user


Re: [Neo4j] Spring Data Graph 1.1.0.M1 milestone released

2011-06-16 Thread Vipul Gupta
please give the maven repository information from where it can be downloaded.


On Thu, Jun 16, 2011 at 6:50 PM, Michael Hunger
 wrote:
> You could just use the direct repository factory for that.
>
> directGraphRepositoryFactory.createGraphRepository(clazz).findAll()
>
>
> normally you would have a
>
> interface PersonRepository extends GraphRepository {}
>
> and get this injected.
>
> @Autowired PersonRepository personRepository;
>
> personRepository.findAll();
>
> Cheers
>
> Michael
>
> Today I discussed some nice derived-method for cypher queries.
> See: 
> https://github.com/SpringSource/spring-data-graph/wiki/Repository-query-methods
>
>
> Am 16.06.2011 um 14:30 schrieb Alfredas Chmieliauskas:
>
>> Dear Michael,
>>
>> sounds great! Especially the annotated repository methods. That was
>> something *really* desirable and now its there. Fantastischt!
>>
>> One question though. Before the upgrade i used to have a handy method
>> to find all things of a type (Class) by using a method like
>>
>> public  Iterable findAll(Class clazz) {
>>   finderFactory.createNodeEntityFinder(clazz).findAll();
>> }
>>
>> is there a good way to replicate such functionality in the current release?
>>
>> Alfredas
>>
>> P.S. we're delayed with publishing our energy simulations (bureaucracy
>> problems more than technical or conceptual). but i'm still determined
>> to make it happen (publish the thing online) before summer end.
>>
>> On Wed, Jun 15, 2011 at 10:17 AM, Michael Hunger
>>  wrote:
>>> Dear Graphistas,
>>>
>>> After some quiet time that I spend on other important issues, we're back on 
>>> our regular release cycle/rhythm.
>>>
>>> We discussed the future SDG roadmap with our CEO Emil and decided to work 
>>> first on the issues that were
>>> reported by our users here on the mailing list, on the spring forums and on 
>>> twitter.
>>>
>>> So primarily we updated the dependencies to Neo4j 1.4.M04 and AspectJ 
>>> (1.6.12.M1), the latter fixing some issues.
>>>
>>> With the new Neo4j release we are also able to start working some important 
>>> new features.
>>>
>>> The most interesting one is the adoption of the query language "cypher" 
>>> which is now accessible from NodeEntities (dynamic annotated fields, 
>>> introduced methods) and repositories (annotated repository interface 
>>> methods).
>>> (https://jira.springsource.org/browse/DATAGRAPH-91)
>>>
>>> Example, NodeEntity-field:
>>>
>>> @GraphQuery("start me=(%d) match 
>>> (me)-[:works_at]->(company)<-[:works_at]-(colleague) return colleague")
>>> Iterable colleagues;
>>>
>>> Example, Repository:
>>>
>>> interface PersonRepository extends GraphRepository {
>>>   @GraphQuery("start person=(%d) match (person)-[:boss]->(boss) return 
>>> boss")
>>>   Person findBoss(Person developer);
>>> }
>>>
>>> We also accommodate for the change of allowing self-relationships.
>>>
>>> Another annoyance for SDG users - the need to specify an elementClass on 
>>> @RelatedTo annotations has also been removed this change will also be added 
>>> to the other annotations that we use.
>>>
>>> We would like to get your feedback on those changes and also on Spring Data 
>>> Graph in general, so please check it out and get back to us.
>>>
>>> And please spread the word: 
>>> http://twitter.com/#!/neo4j/statuses/80503228319547392
>>>
>>> Cheers
>>>
>>> Michael
>>>
>>> Announcement: http://www.springsource.org/node/3152
>>> JIRA: https://jira.springsource.org/browse/DATAGRAPH
>>> Project Page: http://www.springsource.org/spring-data/neo4j
>>> Forum: forum.springsource.org/forumdisplay.php?f=80
>>>
>>> Github: http://github.com/springsource/spring-data-graph
>>> Download: 
>>> http://www.springsource.com/download/community?project=Spring%20Data%20Neo4j
>>>
>>>
>>>
>>>
>>>
>>>
>>> ___
>>> Neo4j mailing list
>>> User@lists.neo4j.org
>>> https://lists.neo4j.org/mailman/listinfo/user
>>>
>> ___
>> Neo4j mailing list
>> User@lists.neo4j.org
>> https://lists.neo4j.org/mailman/listinfo/user
>
> ___
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>
___
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user


Re: [Neo4j] Which version of neo4j does spring data graph project use ?

2011-06-14 Thread Vipul Gupta
Michael,

I don't see anything released on maven repo yet?
Please update.

-VIpul

On Fri, Jun 10, 2011 at 3:40 PM, Michael Hunger
 wrote:
> Wait for our spring data graph 1.1.0.M1 release on Monday :)
>
> it will be updated to Neo4j 1.4.M04
>
> Cheers
>
> Michael
>
> Am 10.06.2011 um 11:55 schrieb Vipul Gupta:
>
>> Please let me know..
>> I want to use the latest version of neo4j say " Neo4j 1.4 M03 “Kiruna
>> " with spring data graph. WHat do I do ?
>> ___
>> Neo4j mailing list
>> User@lists.neo4j.org
>> https://lists.neo4j.org/mailman/listinfo/user
>
> ___
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>
___
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user


Re: [Neo4j] Which version of neo4j does spring data graph project use ?

2011-06-10 Thread Vipul Gupta
Cool. thanks Michael.


On Fri, Jun 10, 2011 at 3:40 PM, Michael Hunger
 wrote:
> Wait for our spring data graph 1.1.0.M1 release on Monday :)
>
> it will be updated to Neo4j 1.4.M04
>
> Cheers
>
> Michael
>
> Am 10.06.2011 um 11:55 schrieb Vipul Gupta:
>
>> Please let me know..
>> I want to use the latest version of neo4j say " Neo4j 1.4 M03 “Kiruna
>> " with spring data graph. WHat do I do ?
>> ___
>> Neo4j mailing list
>> User@lists.neo4j.org
>> https://lists.neo4j.org/mailman/listinfo/user
>
> ___
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>
___
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user


[Neo4j] Which version of neo4j does spring data graph project use ?

2011-06-10 Thread Vipul Gupta
Please let me know..
I want to use the latest version of neo4j say " Neo4j 1.4 M03 “Kiruna
" with spring data graph. WHat do I do ?
___
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user


Re: [Neo4j] Question from Webinar - traversing a path with nodes of different types

2011-04-20 Thread Vipul Gupta
Hi David,

Inputs are 1 and 6 + Graph is acyclic.

domain.Client@1 -> domain.Router@2 -> domain.Router@3 -> domain.Router@5 ->
domain.Server@6
  -> domain.Router@7 -> domain.Router@8 ->

I want a way to start from 1,

process the 2 path till it reaches 5 (say in a thread)
process the 7 path till it reaches 5 (in another thread)

then process 5 and eventually 6.
the above step of processing intermediate path and waiting on the blocking
point can happen over and over again in a more complex graph (that is there
could be a number of loops in between even) and the traversal stops only we
reach 6

I hope this makes it a bit clear. I was working out something for this, but
it is turning out to be too complex a solution for this sort of traversal of
a graph, so I am hoping if you can suggest something.

Best Regards,
Vipul


On Thu, Apr 21, 2011 at 11:36 AM, David Montag <
david.mon...@neotechnology.com> wrote:

> Hi Vipul,
>
> Zooming out a little bit, what are the inputs to your algorithm, and what
> do you want it to do?
>
> For example, given 1 and 6, do you want to find any points in the chain
> between them that are join points of two (or more) subchains (5 in this
> case)?
>
> David
>
>
> On Wed, Apr 20, 2011 at 10:56 PM, Vipul Gupta wrote:
>
>> my mistake - I meant "5" depends on both 3 and 8 and acts as a blocking
>> point till 3 and 8 finishes
>>
>>
>> On Thu, Apr 21, 2011 at 11:19 AM, Vipul Gupta wrote:
>>
>>> David/Michael,
>>>
>>> Let me modify the example a bit.
>>> What if my graph structure is like this
>>>
>>> domain.Client@1 -> domain.Router@2 -> domain.Router@3 -> domain.Router@5-> 
>>> domain.Server@6
>>>   -> domain.Router@7 -> domain.Router@8 ->
>>>
>>>
>>> Imagine a manufacturing line.
>>> 6 depends on both 3 and 8 and acts as a blocking point till 3 and 8
>>> finishes.
>>>
>>> Is there a way to get a cleaner traversal for such kind of relationship. I
>>> want to get a complete intermediate traversal from Client to Server.
>>>
>>> Thank a lot for helping out on this.
>>>
>>> Best Regards,
>>> Vipul
>>>
>>>
>>>
>>>
>>> On Thu, Apr 21, 2011 at 12:09 AM, David Montag <
>>> david.mon...@neotechnology.com> wrote:
>>>
>>>> Hi Vipul,
>>>>
>>>> Thanks for listening!
>>>>
>>>> It's a very good question, and the short answer is: yes! I'm cc'ing our
>>>> mailing list so that everyone can take part in the answer.
>>>>
>>>> Here's the long answer, illustrated by an example:
>>>>
>>>> Let's assume you're modeling a network. You'll have some domain classes
>>>> that are all networked entities with peers:
>>>>
>>>> @NodeEntity
>>>> public class NetworkEntity {
>>>> @RelatedTo(type = "PEER", direction = Direction.BOTH, elementClass =
>>>> NetworkEntity.class)
>>>> private Set peers;
>>>>
>>>> public void addPeer(NetworkEntity peer) {
>>>> peers.add(peer);
>>>> }
>>>> }
>>>>
>>>> public class Server extends NetworkEntity {}
>>>> public class Router extends NetworkEntity {}
>>>> public class Client extends NetworkEntity {}
>>>>
>>>> Then we can build a small network:
>>>>
>>>> Client c = new Client().persist();
>>>> Router r1 = new Router().persist();
>>>> Router r21 = new Router().persist();
>>>> Router r22 = new Router().persist();
>>>> Router r3 = new Router().persist();
>>>> Server s = new Server().persist();
>>>>
>>>> c.addPeer(r1);
>>>> r1.addPeer(r21);
>>>> r1.addPeer(r22);
>>>> r21.addPeer(r3);
>>>> r22.addPeer(r3);
>>>> r3.addPeer(s);
>>>>
>>>> c.persist();
>>>>
>>>> Note that after linking the entities, I only call persist() on the
>>>> client. You can read more about this in the reference documentation, but
>>>> essentially it will cascade in the direction of the relationships created,
>>>> and will in this case cascade all the way to the server entity.
>>>>
>>>> You can now query this:
>>>>
>>>> Iterable> paths =
>>>> c.findAllPathsByTraversal(

Re: [Neo4j] Question from Webinar - traversing a path with nodes of different types

2011-04-20 Thread Vipul Gupta
my mistake - I meant "5" depends on both 3 and 8 and acts as a blocking
point till 3 and 8 finishes

On Thu, Apr 21, 2011 at 11:19 AM, Vipul Gupta wrote:

> David/Michael,
>
> Let me modify the example a bit.
> What if my graph structure is like this
>
> domain.Client@1 -> domain.Router@2 -> domain.Router@3 -> domain.Router@5-> 
> domain.Server@6
>   -> domain.Router@7 -> domain.Router@8 ->
>
>
> Imagine a manufacturing line.
> 6 depends on both 3 and 8 and acts as a blocking point till 3 and 8
> finishes.
>
> Is there a way to get a cleaner traversal for such kind of relationship. I
> want to get a complete intermediate traversal from Client to Server.
>
> Thank a lot for helping out on this.
>
> Best Regards,
> Vipul
>
>
>
>
> On Thu, Apr 21, 2011 at 12:09 AM, David Montag <
> david.mon...@neotechnology.com> wrote:
>
>> Hi Vipul,
>>
>> Thanks for listening!
>>
>> It's a very good question, and the short answer is: yes! I'm cc'ing our
>> mailing list so that everyone can take part in the answer.
>>
>> Here's the long answer, illustrated by an example:
>>
>> Let's assume you're modeling a network. You'll have some domain classes
>> that are all networked entities with peers:
>>
>> @NodeEntity
>> public class NetworkEntity {
>> @RelatedTo(type = "PEER", direction = Direction.BOTH, elementClass =
>> NetworkEntity.class)
>> private Set peers;
>>
>> public void addPeer(NetworkEntity peer) {
>> peers.add(peer);
>> }
>> }
>>
>> public class Server extends NetworkEntity {}
>> public class Router extends NetworkEntity {}
>> public class Client extends NetworkEntity {}
>>
>> Then we can build a small network:
>>
>> Client c = new Client().persist();
>> Router r1 = new Router().persist();
>> Router r21 = new Router().persist();
>> Router r22 = new Router().persist();
>> Router r3 = new Router().persist();
>> Server s = new Server().persist();
>>
>> c.addPeer(r1);
>> r1.addPeer(r21);
>> r1.addPeer(r22);
>> r21.addPeer(r3);
>> r22.addPeer(r3);
>> r3.addPeer(s);
>>
>> c.persist();
>>
>> Note that after linking the entities, I only call persist() on the client.
>> You can read more about this in the reference documentation, but essentially
>> it will cascade in the direction of the relationships created, and will in
>> this case cascade all the way to the server entity.
>>
>> You can now query this:
>>
>> Iterable> paths =
>> c.findAllPathsByTraversal(Traversal.description());
>>
>> The above code will get you an EntityPath per node visited during the
>> traversal from c. The example does however not use a very interesting
>> traversal description, but you can still print the results:
>>
>> for (EntityPath path : paths) {
>> StringBuilder sb = new StringBuilder();
>> Iterator iter =
>> path.nodeEntities().iterator();
>> while (iter.hasNext()) {
>> sb.append(iter.next());
>> if (iter.hasNext()) sb.append(" -> ");
>> }
>> System.out.println(sb);
>> }
>>
>> This will print each path, with all entities in the path. This is what it
>> looks like:
>>
>> domain.Client@1
>> domain.Client@1 -> domain.Router@2
>> domain.Client@1 -> domain.Router@2 -> domain.Router@3
>> domain.Client@1 -> domain.Router@2 -> domain.Router@3 ->
>> domain.Router@5
>> domain.Client@1 -> domain.Router@2 -> domain.Router@3 ->
>> domain.Router@5 -> domain.Server@6
>> domain.Client@1 -> domain.Router@2 -> domain.Router@3 ->
>> domain.Router@5 -> domain.Router@4
>>
>> Let us know if this is what you looked for. If you want to only find paths
>> that end with a server, you'd use this query instead:
>>
>> Iterable> paths =
>> c.findAllPathsByTraversal(Traversal.description().evaluator(new Evaluator()
>> {
>> @Override
>> public Evaluation evaluate(Path path) {
>> if (new ConvertingEntityPath(graphDatabaseContext,
>> path).endEntity() instanceof Server) {
>> return Evaluation.INCLUDE_AND_PRUNE;
>> }
>> return Evaluation.EXCLUDE_AND_CONTINUE;
>> }
>> }));
>>
>> In the above code example, graphDatabaseContext is a bean of type
>> GraphDatabaseContext created by Spring Data Graph. T

Re: [Neo4j] Question from Webinar - traversing a path with nodes of different types

2011-04-20 Thread Vipul Gupta
David/Michael,

Let me modify the example a bit.
What if my graph structure is like this

domain.Client@1 -> domain.Router@2 -> domain.Router@3 -> domain.Router@5 ->
domain.Server@6
  -> domain.Router@7 -> domain.Router@8 ->


Imagine a manufacturing line.
6 depends on both 3 and 8 and acts as a blocking point till 3 and 8
finishes.

Is there a way to get a cleaner traversal for such kind of relationship. I
want to get a complete intermediate traversal from Client to Server.

Thank a lot for helping out on this.

Best Regards,
Vipul




On Thu, Apr 21, 2011 at 12:09 AM, David Montag <
david.mon...@neotechnology.com> wrote:

> Hi Vipul,
>
> Thanks for listening!
>
> It's a very good question, and the short answer is: yes! I'm cc'ing our
> mailing list so that everyone can take part in the answer.
>
> Here's the long answer, illustrated by an example:
>
> Let's assume you're modeling a network. You'll have some domain classes
> that are all networked entities with peers:
>
> @NodeEntity
> public class NetworkEntity {
> @RelatedTo(type = "PEER", direction = Direction.BOTH, elementClass =
> NetworkEntity.class)
> private Set peers;
>
> public void addPeer(NetworkEntity peer) {
> peers.add(peer);
> }
> }
>
> public class Server extends NetworkEntity {}
> public class Router extends NetworkEntity {}
> public class Client extends NetworkEntity {}
>
> Then we can build a small network:
>
> Client c = new Client().persist();
> Router r1 = new Router().persist();
> Router r21 = new Router().persist();
> Router r22 = new Router().persist();
> Router r3 = new Router().persist();
> Server s = new Server().persist();
>
> c.addPeer(r1);
> r1.addPeer(r21);
> r1.addPeer(r22);
> r21.addPeer(r3);
> r22.addPeer(r3);
> r3.addPeer(s);
>
> c.persist();
>
> Note that after linking the entities, I only call persist() on the client.
> You can read more about this in the reference documentation, but essentially
> it will cascade in the direction of the relationships created, and will in
> this case cascade all the way to the server entity.
>
> You can now query this:
>
> Iterable> paths =
> c.findAllPathsByTraversal(Traversal.description());
>
> The above code will get you an EntityPath per node visited during the
> traversal from c. The example does however not use a very interesting
> traversal description, but you can still print the results:
>
> for (EntityPath path : paths) {
> StringBuilder sb = new StringBuilder();
> Iterator iter =
> path.nodeEntities().iterator();
> while (iter.hasNext()) {
> sb.append(iter.next());
> if (iter.hasNext()) sb.append(" -> ");
> }
> System.out.println(sb);
> }
>
> This will print each path, with all entities in the path. This is what it
> looks like:
>
> domain.Client@1
> domain.Client@1 -> domain.Router@2
> domain.Client@1 -> domain.Router@2 -> domain.Router@3
> domain.Client@1 -> domain.Router@2 -> domain.Router@3 ->
> domain.Router@5
> domain.Client@1 -> domain.Router@2 -> domain.Router@3 ->
> domain.Router@5 -> domain.Server@6
> domain.Client@1 -> domain.Router@2 -> domain.Router@3 ->
> domain.Router@5 -> domain.Router@4
>
> Let us know if this is what you looked for. If you want to only find paths
> that end with a server, you'd use this query instead:
>
> Iterable> paths =
> c.findAllPathsByTraversal(Traversal.description().evaluator(new Evaluator()
> {
> @Override
> public Evaluation evaluate(Path path) {
> if (new ConvertingEntityPath(graphDatabaseContext,
> path).endEntity() instanceof Server) {
> return Evaluation.INCLUDE_AND_PRUNE;
> }
> return Evaluation.EXCLUDE_AND_CONTINUE;
> }
> }));
>
> In the above code example, graphDatabaseContext is a bean of type
> GraphDatabaseContext created by Spring Data Graph. This syntax will
> dramatically improve in future releases. It will print:
>
> domain.Client@1 -> domain.Router@2 -> domain.Router@3 ->
> domain.Router@5 -> domain.Server@6
>
> Regarding your second question about types: If you want to convert a node
> into an entity, you would use the TypeRepresentationStrategy configured
> internally in Spring Data Graph. See the reference documentation for more
> information on this. If you want to convert Neo4j paths to entity paths, you
> can use the ConvertingEntityPath class as seen above. As an implementation
> detail, the class name is stored on the node as a property.
>
> Hope this helped!
>

Re: [Neo4j] Question from Webinar - traversing a path with nodes of different types

2011-04-20 Thread Vipul Gupta
Perfect.  Thanks David. I have an exactly similar model with a slightly more
complicated structure :).
 I will keep you updated with my project (totally based on neo4j and SDG)
 as I plan to open source it eventually.

I have one more question for you :
I see the latest release changes NodeGraphRepository from interfaces to
classes( RC1 to RELEASE)
What necessitated this change and are there any release notes with detailed
explanations about changes which I can refer to ?
I am finding it hard to map out the changes



On Thu, Apr 21, 2011 at 12:09 AM, David Montag <
david.mon...@neotechnology.com> wrote:

> Hi Vipul,
>
> Thanks for listening!
>
> It's a very good question, and the short answer is: yes! I'm cc'ing our
> mailing list so that everyone can take part in the answer.
>
> Here's the long answer, illustrated by an example:
>
> Let's assume you're modeling a network. You'll have some domain classes
> that are all networked entities with peers:
>
> @NodeEntity
> public class NetworkEntity {
> @RelatedTo(type = "PEER", direction = Direction.BOTH, elementClass =
> NetworkEntity.class)
> private Set peers;
>
> public void addPeer(NetworkEntity peer) {
> peers.add(peer);
> }
> }
>
> public class Server extends NetworkEntity {}
> public class Router extends NetworkEntity {}
> public class Client extends NetworkEntity {}
>
> Then we can build a small network:
>
> Client c = new Client().persist();
> Router r1 = new Router().persist();
> Router r21 = new Router().persist();
> Router r22 = new Router().persist();
> Router r3 = new Router().persist();
> Server s = new Server().persist();
>
> c.addPeer(r1);
> r1.addPeer(r21);
> r1.addPeer(r22);
> r21.addPeer(r3);
> r22.addPeer(r3);
> r3.addPeer(s);
>
> c.persist();
>
> Note that after linking the entities, I only call persist() on the client.
> You can read more about this in the reference documentation, but essentially
> it will cascade in the direction of the relationships created, and will in
> this case cascade all the way to the server entity.
>
> You can now query this:
>
> Iterable> paths =
> c.findAllPathsByTraversal(Traversal.description());
>
> The above code will get you an EntityPath per node visited during the
> traversal from c. The example does however not use a very interesting
> traversal description, but you can still print the results:
>
> for (EntityPath path : paths) {
> StringBuilder sb = new StringBuilder();
> Iterator iter =
> path.nodeEntities().iterator();
> while (iter.hasNext()) {
> sb.append(iter.next());
> if (iter.hasNext()) sb.append(" -> ");
> }
> System.out.println(sb);
> }
>
> This will print each path, with all entities in the path. This is what it
> looks like:
>
> domain.Client@1
> domain.Client@1 -> domain.Router@2
> domain.Client@1 -> domain.Router@2 -> domain.Router@3
> domain.Client@1 -> domain.Router@2 -> domain.Router@3 ->
> domain.Router@5
> domain.Client@1 -> domain.Router@2 -> domain.Router@3 ->
> domain.Router@5 -> domain.Server@6
> domain.Client@1 -> domain.Router@2 -> domain.Router@3 ->
> domain.Router@5 -> domain.Router@4
>
> Let us know if this is what you looked for. If you want to only find paths
> that end with a server, you'd use this query instead:
>
> Iterable> paths =
> c.findAllPathsByTraversal(Traversal.description().evaluator(new Evaluator()
> {
> @Override
> public Evaluation evaluate(Path path) {
> if (new ConvertingEntityPath(graphDatabaseContext,
> path).endEntity() instanceof Server) {
> return Evaluation.INCLUDE_AND_PRUNE;
> }
> return Evaluation.EXCLUDE_AND_CONTINUE;
> }
> }));
>
> In the above code example, graphDatabaseContext is a bean of type
> GraphDatabaseContext created by Spring Data Graph. This syntax will
> dramatically improve in future releases. It will print:
>
> domain.Client@1 -> domain.Router@2 -> domain.Router@3 ->
> domain.Router@5 -> domain.Server@6
>
> Regarding your second question about types: If you want to convert a node
> into an entity, you would use the TypeRepresentationStrategy configured
> internally in Spring Data Graph. See the reference documentation for more
> information on this. If you want to convert Neo4j paths to entity paths, you
> can use the ConvertingEntityPath class as seen above. As an implementation
> detail, the class name is stored on the node as a property.
>
> Hope this helped!
>
> David
>
> On Wed, Apr 20, 2011 at 9:20 AM, Emil Eifr