For one, major effort was in porting the Persistence layer that (used Hibernate 3) on MySQL to Data Nucleus based Data Store using JPA. Well that was expected. Other changes included removing Quartz threads and File I/O – but here's the unexpected!
- Presentation (JSP/Struts/Velocity Templates) tier needed re-design as GAE does not support more than 100 URL’s in application
- Every JSP needed to compile on its own – well our JSP include directive did not assume that
- Static/Resource Files – we hit 1000 # limit. Had to come up with clever way to circumvent that
- 30 second hard time limit on response processing – we used Web Services from external service provider and that did take up more than 30 secs – needed a redesign
- Size limits on Total App and single file size
- Initial Data Seeding of the application
- Migrating our Build and Deployment process
Following errors should not deter you. Solutions are available in App Engine Discussion forum that is responsive
- Found a file too large to upload: … Must be under 10000000 bytes.
- Class xxx has property yyy declared in MetaData, but its getter method doesnt exist in the class!
- Found more than 100 URLMap entries in application configuration.
- com.google.apphosting.runtime.HardDeadlineExceededError: This request (8c8ca701dccad394) started at 2009/06/05 07:30:05.088 UTC and was still executing at 2009/06/05 07:30:33.944 UTC.
Summary and Recommendation:
- App Engine is good and great – but I suggest you have alternate traditional options (EC2 et.al.), till this is proven to be good for business apps - and YOU FEEL comfortable. And since all this is pay as you go – you can turn it on when YOU think it is time
- You must have a plan for Data Migration and initial data seeding if needed.
Hi
ReplyDeleteI'm playing with GAE too and encounter the "Class xxx has property yyy declared in MetaData, but its getter method doesnt exist in the class!" error...
After browsing forum for a while I didn't found any solution, where did you find one ?
The offender here is likely a utility method called getYYY() that's being processed by the enhancer as if it was a property. Since adding @Transient wouldn’t fix it, the solution is to rename the utility method not to start with get/set (or move it in a utility class).
ReplyDelete