Posts tagged as "scala":
Some Thoughts About Scala on Google’s Java AppEngine
I’ve spent some more time over the last two weeks working on putting an idea of mine into action. My plan was to use Google AppEngine to serve the application and store it’s data in BigTable. After I spent some time with JDO annotations and making sure I got them correct I sent the application to the AppEngine dev server using Ant on my local machine and received an odd runtime exception. I received a similar error when I pushed the application up to Google’s servers. After spending quite a bit of time trying to debug an unfamiliar error I asked on the Java AppEngine Mailing List if there was a problem with JDO annotations and Scala. The response I got was that it was a known issue with the 1.1.0 version of the DataNucleus enhancement process.
I did as the thread suggested and replaced the datanucleus-1.1.0 jars in the AppEngine SDK with downloaded 1.1.2 jars. This eliminated the runtime exception when deployed to both the dev server and Google’s servers when attempting to save data. Sadly when I attempted to take the next logical step with the application code and retrieve data for display as well as save it I ran into a new exception. As far as I can tell the error is due to the internals of Google’s datanucleus-appengine (1.1.0) jar being incompatible with the newer datanucleus jar files.
Despite how much I would have liked for persistence to be handled easily on the AppEngine, mostly because I wanted to use the Google’s servers rather than having to host it myself, I am not really upset about being unable to use the JDO annotations. I could attempt to use JPA annotations rather than JDO and see if they work better but to be perfectly honest using the annotations forced the me to use mutable model classes which felt pretty un-Scala like to me. So for now I’m back to the proverbial drawing board on persistence and I’m even considering not using a persistence framework and interacting with the database through plain old SQL statements. I recognize this will force me to maintain the schema myself but at least I would feel like I was using the Scala language properly.
I did look for some Scala persistence frameworks but most everything I found is using Java based persistence in Scala classes and I’m just hoping to find a solution which feels more, I don’t know… correct.
My Experience Learning Scala
Sometime in the last week I read an article about Scala, actually I think it was the interview with Twitter engineers about Scala vs. Ruby, and it really sparked an interest in the language for me. I’m sure at least part of the reason is because I’ve been writing mostly JavaScript lately and reading a description of Scala it seemed like a number of the functional programming practices I’ve picked up writing JavaScript would carry over well. At the same time though Scala is built on top of Java, a language I’ve become intimately familiar with even if it has fallen somewhat into disuse. Last week after reading the article and feeling this resonance with what I read further about Scala I decided to jump into it and see how much I could pick up.
The Scala website is well documented and has a number of good tutorials but something just wasn’t clicking in my head about the syntax or the language in general. I think feeling like I could get a handle on this language quickly is what has really driven me to obsess about it this past week. I ordered Programming in Scala from Amazon (before Amazonfail as it’s being called on Twitter [From AmazonFail to SorryAmazon]) which I’ve read about 200 pages of and continued to read over (and over) the pdf tutorials available to me. This weekend I started putting together an application written in Scala to be deployed on Google’s AppEngine since they released Java support and Scala compiles to Java. Additionally, my tentative plan for the application is to make use of a number of ‘Social APIs’ which are coming up more and more at work but I still know quite little about. The first API I decided to work with was Twitter’s and in just a couple of days (maybe 16 hours) of work I have the basic model classes written along with BDD specs for them using Scala Specs, and I’m also able to pull the data I want from Twitter and deploy to the AppEngine service. All in all I’d say not bad for a weekend’s work. There is of course quite a bit left to do before the application is finished but I’m proud of the first steps I’ve made. If inclined, the source for this experiment is publicly viewable as twitter-favorites on github.