But because I see great potential here and hope to try it again in the future, I want to give some feedback. I'm also aware, that this is an OpenSource project and probably most of the work is done in free time. So please don't take this as a flaming against the project or the team behind it, but as constructive criticism.
For us the JavaFX/Android Data part was the main focus of interest. So I primary played around with the granite data tutorial. To show what I did and there I hit bumps I'll give a aggregated overview:
I started to play around with the “Hello World” Tutorial and everything worked fine. Than I looked into the data-tutorial and the problems started. First there were some dependencies wrong in the middle. I got suspicious for the first time about everything as I look into the (IMHO) slightly over engineered tutorial structure. At least the spring/tomcat part started to work, but no EJB Server variant. Found a dependency error of the Tomee Plugin (a outdated snapshot version was defined), but still got very confusing errors. (I focused on tomee cause this is the EJB Server I'm most familiar with). To be sure the errors are not due to the project structure, I rebuild it in a simplified form. After a long search and digging through the documentation more than once, to be sure I didn't overlook something, I got suspicious about the openjpa implementation.(Well, later William validated my findings https://github.com/graniteds-tutorials/graniteds-tutorial-data/issues/1) So I switched to hibernate on tomee. At least now the server seamed ok but the client started to throw NPEs. From here on I integrated the helloworld tutorial, made changes based good old tryNerror and at some point got it alive. At this point I was starting to hope that I could see GraniteDs in action. So I generated 1000 Entities and started to scroll in the UI. Scrolling got extremely slow and sluggish and at the console I cound see that the same messages were send between sever and client over and over again. Still thought, this could be overcome, I looked into the RemoteLazyLoading. So I enhanced the Model with a 1-n lazy association and got NPEs back. Now finally I was stuck and without an Idea, so I used the forum. https://groups.google.com/forum/#!topic/graniteds/6OjtkcYadLs. The Result: EntityManager only over jndi name supply-able, probaly only one EntityManager allowed. AFAIK Jboss is the last server which supplies an EnitiyManager per jndi name per default. In Tomee and Glassfish workarounds would be needed. So I used the force and read the source in the hope of creating a new solution for EM discovery. Well I tried. A build out of the box brook. Looking into the project structure I got a little bit shocked. One gradle config for all projects, IntelliJ IDEA and Eclipse configs in all subprojects. This got me scared enough to finally stop.
So here are some suggestions for the future:
Documentation:
Make sure all features are documented. Consider optimization of the documentation based on cases. If I'm into building a EJB/JavaFX stack, I have to read though most of the other parts. Switch form simple to detailed. e.g. The part about EJB3 integration starts with telling me all the configuration options and ends with, that for the default case I don't need anything. I also recommend a open roadmap and a feature/tested on matrix. So that some can see, Version X is tested on tomcat 7.023 and jboss 6.x on os e.t.c. An what is now working right now.(As described before, by looking into your homepage and the tutorial docs, I got the opinion, that everything works everywhere) Finally the source is also missing javadoc at all places.
More and smaller Tutorials/Examples:
Make the tutorials/examples in a way to show the most simplest implementation. So a newcomer sees, what is needed for that specific case. I personally like the examples in the tomee project tree, just to get the idea.
Clean up the Project Structure:
I've seen that this has been started, as the gradle config got split up in the last days. I recommend the to push beyond the IDE configuration files, these should be generated on demand after checkout. And even that I'm a maven fan, I would recommend to update the tutorials to use gradle if its your tool of choice. Moreover split the projects by type. So that development of a server part does not essentially need the others to build. (The upstream seams most of the time broken, this would help)
Make Errors more selfexplainig:
Errors in the Serialization/Deserialisation Process are not very conclusive. Especially if something is not yet implemented. Again see. https://github.com/graniteds-tutorials/graniteds-tutorial-data/issues/1. And running into NPE's is most of the time not helpful (Messages and Deserialisation on the Client side). Especially than the server just warns, that he didn't find the EntityManager how about an empty collection on the client side.
Higher Reaction in the Community Forum:
If you look into the Granite Data Service Forum you see questions unanswered. Or only answered after many days and a poke (Like: Anyone a Idea?). I don't expect that every question can be answered satisfying in under a day. But at least somethings like: “Much to do, might look into this next week or next month”. Or “Please supply a out oft the box example code” or “Mr.X do you have an idea”. As far as I can see, the developers are not so may, that this would boil up the communication.
Too sum up, I will still look into the project sometimes and like to see it continue successfully. And again, please don't take this as flaming or anything bad. Just some ideas what this project may need.
Regards and keep up the spirit,
Olli
First I want to say, what great project (idea) you people have. We were considering using it in a company internal application as a fist prototype and for future evaluation. So it saddens me to to say: Not happening right now.
But because I see great potential here and hope to try it again in the future, I want to give some feedback. I'm also aware, that this is an OpenSource project and probably most of the work is done in free time. So please don't take this as a flaming against the project or the team behind it, but as constructive criticism.
For us the JavaFX/Android Data part was the main focus of interest. So I primary played around with the granite data tutorial. To show what I did and there I hit bumps I'll give a aggregated overview:
I started to play around with the “Hello World” Tutorial and everything worked fine. Than I looked into the data-tutorial and the problems started. First there were some dependencies wrong in the middle. I got suspicious for the first time about everything as I look into the (IMHO) slightly over engineered tutorial structure. At least the spring/tomcat part started to work, but no EJB Server variant. Found a dependency error of the Tomee Plugin (a outdated snapshot version was defined), but still got very confusing errors. (I focused on tomee cause this is the EJB Server I'm most familiar with). To be sure the errors are not due to the project structure, I rebuild it in a simplified form. After a long search and digging through the documentation more than once, to be sure I didn't overlook something, I got suspicious about the openjpa implementation.(Well, later William validated my findings https://github.com/graniteds-tutorials/graniteds-tutorial-data/issues/1) So I switched to hibernate on tomee.
At least now the server seamed ok but the client started to throw NPEs. From here on I integrated the helloworld tutorial, made changes based good old tryNerror and at some point got it alive. At this point I was starting to hope that I could see GraniteDs in action. So I generated 1000 Entities and started to scroll in the UI. Scrolling got extremely slow and sluggish and at the console I cound see that the same messages were send between sever and client over and over again.
Still thought, this could be overcome, I looked into the RemoteLazyLoading. So I enhanced the Model with a 1-n lazy association and got NPEs back. Now finally I was stuck and without an Idea, so I used the forum. https://groups.google.com/forum/#!topic/graniteds/6OjtkcYadLs. The Result: EntityManager only over jndi name supply-able, probaly only one EntityManager allowed. AFAIK Jboss is the last server which supplies an EnitiyManager per jndi name per default. In Tomee and Glassfish workarounds would be needed. So I used the force and read the source in the hope of creating a new solution for EM discovery. Well I tried. A build out of the box brook. Looking into the project structure I got a little bit shocked. One gradle config for all projects, IntelliJ IDEA and Eclipse configs in all subprojects. This got me scared enough to finally stop.
So here are some suggestions for the future:
Documentation:
Make sure all features are documented. Consider optimization of the documentation based on cases. If I'm into building a EJB/JavaFX stack, I have to read though most of the other parts. Switch form simple to detailed. e.g. The part about EJB3 integration starts with telling me all the configuration options and ends with, that for the default case I don't need anything. I also recommend a open roadmap and a feature/tested on matrix. So that some can see, Version X is tested on tomcat 7.023 and jboss 6.x on os e.t.c. An what is now working right now.(As described before, by looking into your homepage and the tutorial docs, I got the opinion, that everything works everywhere) Finally the source is also missing javadoc at all places.
More and smaller Tutorials/Examples:
Make the tutorials/examples in a way to show the most simplest implementation. So a newcomer sees, what is needed for that specific case. I personally like the examples in the tomee project tree, just to get the idea.
Clean up the Project Structure:
I've seen that this has been started, as the gradle config got split up in the last days. I recommend the to push beyond the IDE configuration files, these should be generated on demand after checkout.
And even that I'm a maven fan, I would recommend to update the tutorials to use gradle if its your tool of choice.
Moreover split the projects by type. So that development of a server part does not essentially need the others to build. (The upstream seams most of the time broken, this would help)
Make Errors more selfexplainig:
Errors in the Serialization/Deserialisation Process are not very conclusive. Especially if something is not yet implemented. Again see. https://github.com/graniteds-tutorials/graniteds-tutorial-data/issues/1. And running into NPE's is most of the time not helpful (Messages and Deserialisation on the Client side). Especially than the server just warns, that he didn't find the EntityManager how about an empty collection on the client side.
Higher Reaction in the Community Forum:
If you look into the Granite Data Service Forum you see questions unanswered. Or only answered after many days and a poke (Like: Anyone a Idea?). I don't expect that every question can be answered satisfying in under a day. But at least somethings like: “Much to do, might look into this next week or next month”. Or “Please supply a out oft the box example code” or “Mr.X do you have an idea”. As far as I can see, the developers are not so may, that this would boil up the communication.
Too sum up, I will still look into the project sometimes and like to see it continue successfully. And again, please don't take this as flaming or anything bad. Just some ideas what this project may need.
Regards and keep up the spirit,
Olli