Uncategorized

Is server-side Javascript for real?

The hype is on for lightweight “Javascript in the server” alternatives to the proven Java J2EE and LAMP stacks. Even last year’s cool Ruby/Rails-style web frameworks are being dissed by the Node.js crowd. Is this where web development is going or is it just a hype bubble? Presumably thousands of startups are already all-in on server-side Javascript and we’re looking forward to some real-world learnings and comparisons. Meanwhile we’re left guessing how this will all play out.

Is Node.js a toy for script kids who don’t understand server programming or a real web application server framework? The scalability debate rages across the web (An entertaining example: Node.js is cancer), but it seems clear that, even though hosted solutions might provide pieces such as monitoring, security and scalability the missing Node.js on its own can’t replace established web application infrastructure.

Fix Spidermonkey Build issues with Homebrew on Lion

The fix is documented here: https://github.com/mxcl/homebrew/issues/4782

It consists of adding a line in the readline formula file: /usr/local/Library/Formula/readline.rb right before the system command:

    inreplace 'support/shobj-conf', 'darwin[89]*|darwin10*)', 'darwin[89]*|darwin1[01]*)'

Running Google Appengine Java apps in Intellij Idea

After having created a standard maven project for the guestbook app as described in this previous post, running the application in Intellij Idea is pretty straight forward.

Create the project

Select File > New Project, and create a new project from External Model, Maven by pointing idea to your pom.xml, just as you would to import any other maven project.

Create a Runner

While we are waiting for someone to write a Intellij Idea server component for Google Appengine Java SDK, we have to create a runner for the server, with the following parameters:

Main Class

com.google.appengine.tools.KickStart

VM Parameters

We have to pass this parameter for Appengine to accept loading the tools jar from a non-standard location.

-Dappengine.sdk.root="/Users/<your user>/.m2/repository/com/google/appengine-tools/1.2.0/"

Program Parameters

com.google.appengine.tools.development.DevAppServerMain  target/guestbook

Working Directory

/Users/<your user>/dev/google-app-engine/guestbook

Environment Variables

 
SDK_LIB=/Users/<your user>/dev/google-app-engine/appengine-java-sdk/lib;
 
SDK_CONFIG=/Users/<your user>/dev/google-app-engine/appengine-java-sdk/config/sdk

Run the App

You should se the following in the runner console tab:

/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java -Dappengine.sdk.root=/Users/torstenek/.m2/repository/com/google/appengine-tools/1.2.0/ -Dfile.encoding=MacRoman -classpath /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib/deploy.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib/dt.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib/javaws.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib/jce.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib/management-agent.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib/plugin.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib/sa-jdi.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/../Classes/charsets.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/../Classes/classes.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/../Classes/dt.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/../Classes/jce.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/../Classes/jconsole.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/../Classes/jsse.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/../Classes/laf.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/../Classes/management-agent.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/../Classes/ui.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib/ext/apple_provider.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib/ext/dnsns.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib/ext/localedata.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib/ext/sunjce_provider.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/lib/ext/sunpkcs11.jar:/Users/torstenek/dev/google-app-engine/guestbook/target/classes:/Users/torstenek/dev/google-app-engine/appengine-java-sdk/lib/appengine-tools-api.jar:/Users/torstenek/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar:/Users/torstenek/.m2/repository/com/google/appengine-tools/1.2.0/appengine-tools-1.2.0.jar:/Users/torstenek/.m2/repository/com/google/appengine-local-runtime-shared/1.2.0/appengine-local-runtime-shared-1.2.0.jar:/Users/torstenek/.m2/repository/com/google/appengine-sdk-1.2.0-api/1.2.0/appengine-sdk-1.2.0-api-1.2.0.jar:/Users/torstenek/.m2/repository/taglibs/standard/1.1.2/standard-1.1.2.jar:/Users/torstenek/.m2/repository/javax/servlet/jstl/1.1.2/jstl-1.1.2.jar:/Users/torstenek/.m2/repository/org/apache/geronimo/specs/geronimo-el_1.0_spec/1.0.1/geronimo-el_1.0_spec-1.0.1.jar:/Users/torstenek/.m2/repository/org/apache/geronimo/specs/geronimo-jsp_2.1_spec/1.0.1/geronimo-jsp_2.1_spec-1.0.1.jar:/Users/torstenek/.m2/repository/org/apache/geronimo/specs/geronimo-servlet_2.5_spec/1.2/geronimo-servlet_2.5_spec-1.2.jar:/Users/torstenek/.m2/repository/org/apache/geronimo/specs/geronimo-jpa_3.0_spec/1.1.1/geronimo-jpa_3.0_spec-1.1.1.jar:/Users/torstenek/.m2/repository/org/apache/geronimo/specs/geronimo-jta_1.1_spec/1.1.1/geronimo-jta_1.1_spec-1.1.1.jar:/Users/torstenek/.m2/repository/org/datanucleus/datanucleus-appengine/1.0.0.final/datanucleus-appengine-1.0.0.final.jar:/Users/torstenek/.m2/repository/javax/jdo/jdo2-api/2.3-SNAPSHOT/jdo2-api-2.3-SNAPSHOT.jar:/Users/torstenek/.m2/repository/org/datanucleus/datanucleus-core/1.1.1/datanucleus-core-1.1.1.jar:/Users/torstenek/.m2/repository/javax/transaction/transaction-api/1.1/transaction-api-1.1.jar:/Users/torstenek/.m2/repository/org/datanucleus/datanucleus-jpa/1.1.1/datanucleus-jpa-1.1.1.jar:/Users/torstenek/.m2/repository/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar com.google.appengine.tools.KickStart com.google.appengine.tools.development.DevAppServerMain target/erpilot2
2009-04-11 12:44:09.504 java[38706:10b] [Java CocoaComponent compatibility mode]: Enabled
2009-04-11 12:44:09.505 java[38706:10b] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000
The server is running at http://localhost:8080/

Now you can point your browser to:
http://localhost:8080