We are using Google App Engine for back-end development. We're considering the scalability, change of server and data movement to another cloud platform in future, as well the robustness in application. Please suggest the frameworks that can be used in Google App Engine (Java based).
End point exposure/Rest web services
ORM/database connection
Service and db layer integration
Logging
Unit testing
etc
Please add any points that I may have missed.
Update: The reason behind asking this question is that when we start development we will get a hell lot of samples, for example:
Rest web services - we have Spring Boot/Spring rest web services
DB - we have JDO, Google Datastore, etc.
For easy access we can use Spring Core.
If we browse through information on Google App Engine Java development, we're unable to find a list of advantages/disadvantages. It's correct that we have many options. While answering please also consider the bolded words. The question definitely looks simple from an angle, but it's a serious issue for the fresh development.
There are several products and services within Google App Engine that will help you out building scalable backends in Java using App Engine. Here are some examples based on what you may be looking for:
Endpoints Frameworks on App Engine in Java - helps with developing, deploying and managing APIs on any Google Cloud backend.
Objectify - a Java data access API, specifically designed for the GAE datastore.
Stackdriver logging - provides facilities for importing, viewing, storing and retrieving timestamped logs from apps running in GCP.
Unit Testing in Java - which allows you to test the quality of your code after you’ve written it, as well as to improve your development process as you go along.
UPDATE: This article on Designing for Scale is a good place to start for best practices on scalability in App Engine. Regarding robustness, that’s a given using App Engine, as it is designed as a robust development environment for written applications. If you’re considering moving to another cloud platform in future, take a look at the GCP documentation on exporting data for each specific product you wish to export from.
You may find these articles on Spring Framework useful, which focus on the benefits and best practices.
Announcing Spring Cloud GCP—integrating your favorite Java framework with Google Cloud
Optimizing Spring Framework for App Engine Applications
Related
I am looking to develop a java REST web service to work with my android app that I am also developing and I have been trying to look for the best option to host the service and everything I find seems to lead me in a different direction.
Can anyone give me advice on what the best way to host a java REST web service would be? I can do linux or windows and am relatively familiar with the lamp stack and IIS.
Thank you
I would suggest looking at the Google App Engine for hosting, and writing the service in Java. I just set up a few services that way for an app I'm working on and it was fast and easy, and currently it's free of charge for a very generous limited usage.
Exposing REST type access to resources persisted as JPA entities is very straightforward with Play! framework:
http://www.playframework.org
RESTful on Play! framework
Hosting: Heroku ( http://www.heroku.com ) supports Java as a language (as well as Ruby, Node.js, Clojure, Python, and Scala), and Play! as a framework, making it a good candidate in case you are going the Play! route;-) ... though obviously not the only use case.
Development life-cycle: This overview and this tutorial should give you a pretty good feel of the development life-cycle with git and Heroku+Play; if coming from "regular" Java tooling type of environments, you may find this approach refreshing.
IDE integration: Play! has plugins for NetBeans, IntelliJ IDEA and Eclipse ( http://www.playframework.org/documentation/1.2/ide )
So if you are familiar with the lamp stack why not using php for the REST service? Check out zend's REST implementation.
Friends,
Your technology stack is the rope that will save you or hang you. For a one man webservice startup - what kind of rope is this list?
Plattform: Google App Engine, Backend: Google App Engine Datastore, Servicelayer: Java,
Frontend: Adobe Flex
Client/Service integration framework: GraniteDS, Client Application Framework: Tide (Part of the GraniteDS stack), Service Application Framework: Spring
Ok, let me give you my context.
Flextras is right! Technology is mostly chosen because of knowledge/infrastructure ... This is how I ended up with the list given above:
First of all: FLEX appeals to me. It’s easy to build rich UIs and Adobe is pushing it in the direction Desktop, web and devices. Adobe marketing gives us the promise: ”Integrate with the other tools in the creative suite” and ”Deploy everywhere”. (Of course it’s too good to be true, but they seem to be on the right track.) So lets choose FLEX as our UI framework.
FLEX often must integrate with serverside technology. So what technology to choose for the service layer? I know PHP of old, but the dynamic, untyped feel of the language, just doesn’t feel right working side by side with flex.
Flex draws much of it’s inspiration from Java. And thinking in ActionScript and thinking in Java just feels right. (I’ve explored Scala but the tooling and best practices are not there yet for someone like me to adopt this great new language). I’ve chosen to learn java, hoping that it will make patterns and knowledge reusable between the server-side-programming and the client-side-programming.
The problem with java is it’s complexity and that it’s harder to deploy (for PHP you could easily deploy on a cheep webhotel). My idea is a test and I don’t want costs and servers (who does?). I want to focus on exploring my ideas. So I’m looking at Google App Engine who offers a free amount of Java quota for a startup web applications.
The problem with Google App engine is that it’s restrictive Sandbox model, and many frameworks doesn’t deploy as is.
I want a technology line that will work together with a minimum amount of hacking. And this is where I’m asking for your expertise, helping me choose the right frameworks for integrating FLEX with Java on the Google App engine.
I want to use strongly typed objects from server to client so I’m looking for an AMF solution. From what I can tell looking at forums BlazeDS needs hacking, Pimento/Cinnamon doesn’t work, Weborb or Adobe Livecykle aren’t free. GraniteDS however seams to be working on the Google app store without patching.
GraniteDS comes with a client framework called Tide that integrates with serverside technologies. But once again Google App Engine is a restrictive environment. Seam (which seams to integrate the best with Tide) seams to be a hack job on Google app engine. EJB3 or CDI is Java EE 6 technologies and not supported by Jetty (the servlet container powering Google App Engine). Spring seams like a viable candidate however.
The Google app engine dosen’t have a relational database, but has interfaced It’s new datastore behind the JPA interface that both Spring and Tide (GraniteDS) supports.
I’m not sure all this rambling makes any of us any the wiser.
What I’m asking is this: From FLEX to the Google App Store, what line of technologies gives me the least rope to hang myself with? Im suggesting Tide/GraniteDS/Java/Spring/JPA. But what do I know until I’ve tried it.
Given the vagueness of the question:
I'm using Flex/Cairgorme/Blazeds/JBossAS/Oracle Java EE together for a mission critical, high performance, scalable application. I would highly recommend this combo.
I'm creating an android application. Most of the functionality will be done offline, however I need to build some dependency between users of the application, such as being able to see peoples "high scores" and to communicate between users, and sending each other in-app messages.
Therefore, I'll need a webserver which the app can connect to in order to store such information. I imagine the app will make REST calls to get high scores.
I'm trying to avoid the overhead of having to create a fully functional web application (SpringMVC for example). Is there any application that makes this simpler?
What is a good, simple web stack I could use for this?
We use the Java RESTlet framework for creating RESTful interfaces for our mobile apps, and deploy via Google AppEngine. I shared a series of screencasts on YouTube demonstrating this approach that you might find useful. The RESTlet framework used in the screencasts is a few versions old, but this should help you get up to speed fairly quickly. We like this particular approach because it's straightforward for Android developers (who are already proficient in Java), scales well, and its free until you hit Google's quotas.
What other "nosql" databases are compatible (more or less) with the Google Appe Engine datastore.
Alternatively, what is a good abstraction layer/solution (free of charge) that abstracts between multiple database implementations including google app engine and my application for db access.
I'd like to develop an app for GAE but later deploy it on my own server, but I do not want to have to rewrite the db code.
Important Update: The app is developed in Java so ideally the Data Abstraction Layer or any alternatives must be "Java friendly".
The AppScale project has decoupled the database backend so that you can potentially run GAE on a variety of databases. They currently provide support for HBase and Hypertable (ref). AppScale is open source and lets you run your GAE app on EC2 or your own cluster.
Strange as this sounds, but there is a great deal of similarity between AppEngine Datastore and the Lotus Domino: you may need to write an abstraction layer to handle the two APIs, but the capabilities are quite similar. However, you need to be very familar with both models to see the parallels.
I am new to both JAVA and Google App Engine. My Interest in Java stems from its compiled nature, speed and widespread enterprise use, whereas my interest in app engine is mainly because of it's initial free nature along with scalalbility.
I have been through Google's Getting Started and FAQ, I have modified the guestbook app and generally played around with the datastore, creating a simple entry system for use at work, using database schemas similar to the guestbook app. I come from a hackish PHP background, and most of my app consists of JSP pages with HTML and scriptlets mixed, with classes for the datastore stuff.
I have read about JSP, JSTL & JSF(not much) and also the basics of appengine, it's limitations,strengths and quotas. I also understand that my current approach is flawed. I have searched for JAVA frameworks and found one too many. I have been through the Will it play in App Engine list, but I do no half of the stuff mentioned there. I understand that webapp(used in the overview) is a framework and so is GWT. I understand I have to learn core java first.
What framework should I begin with which is easy to use and also robust/secure enough to handle a financial app? The framework should also have value, if I were to host it in a pure J2EE environment independent of App Engine.
I would appreciate a word on study resources too. Currently I see this book on amazon as a resource but are there cheaper alternatives like a library with a monthly subscription from where I can peruse similar books.(and I know that Google is a real good resource.)
Are there any developers here who have apps hosted on appengine java and would like to share their personal experience of appengine java with a beginner?
I use Eclipse with the Google App Engine plugin to develop and upload my apps.
Regardless of what you want to do in Java you absolutely need to learn your way around the core language and the basic part of the runtime library.
The Java Tutorial covers this and is pretty straightforward.
Then you need to learn the Servlet API which underlies almost all Java-based web solutions today. Sun puts this in the full Java EE tutorial (which is a bit heavy) so have a look at this quick overview.
When you have gotten so far, you have a much better idea of what your basic toolbox is, and can give information allowing to give better advice on what technologies you should choose.
Sorry for the steep learning curve, but the view on top is fantastic.
If you aren't doing Java development currently, and/or haven't done much web development. I definitely wouldn't complicate things with adding frameworks.
What are you trying to accomplish that you need a framework for outside of the Google App Engine stack?
I've been developing with Java for years and only started using Spring with my Google App Engine app because I need a good security and authentication option. I wish I didn't have to use it since it's a rather steep learning curve.
You should be able to do most everything you need to for a simple app with JSP. If done correctly you can even do it in MVC if you wish.
On top of everything else people have recommended, I suggest you take a look at Objectify, a much simpler datastore API than the JDO/JPA ones included in the App Engine SDK.
This is, of course, after you've gotten familiar with the core of Java first.