1. Web programming

2. Final exam

1. Grails 

Ruby on Rails, MVC framework.

CakePHP, Django (Python), Groovy on Rails (Grails). 

We start by installing the software: grails-2.3.4 from c212/software

[crcazel@silo ~]$ cp /l/www/classes/c212/software/grails-2.3.4.zip .
[crcazel@silo ~]$ ls -ld grails-2.3.4.zip
-rw------- 1 crcazel students 142600028 Apr 21 08:23 grails-2.3.4.zip
[crcazel@silo ~]$

I unzip the archive and then move into the folder created. 

[crcazel@silo ~]$ ls
bin                  Homework11.java   Midterm.class       Player.java
c212                 Homework12.class  Midterm.java        Problem11.class
crcazel-submissions  Homework12.java   MilitaryTime.class  Problem11.java
Dice.class           Homework21.class  MilitaryTime.java   Problem12.class
Dice.java            Homework21.java   myFrame.class       Problem12.java
Game.java            Homework22.class  myFrame.java        Problem21.class
grails-2.3.4         Homework22.java   P412.class          Problem21.java
grails-2.3.4.zip     Homework23.class  P412.java           README
Homework11.class     Homework23.java   Player.class        TicTacToe.java
[crcazel@silo ~]$ cd grails-2.3.4
[crcazel@silo grails-2.3.4]$ pwd
/u/crcazel/grails-2.3.4
[crcazel@silo grails-2.3.4]$ ls
bin               conf  doc          INSTALL  LICENSE  plugins  scripts
build.properties  dist  dsl-support  lib      media    README   src
[crcazel@silo grails-2.3.4]$ pico -w .grails-setup
[crcazel@silo grails-2.3.4]$ ls
bin               conf  doc          INSTALL  LICENSE  plugins  scripts
build.properties  dist  dsl-support  lib      media    README   src
[crcazel@silo grails-2.3.4]$ ls .grails-setup
.grails-setup
[crcazel@silo grails-2.3.4]$ whoami
crcazel
[crcazel@silo grails-2.3.4]$ pico -w .grails-setup
[crcazel@silo grails-2.3.4]$ echo $JAVA_HOME

[crcazel@silo grails-2.3.4]$ cat .grails-setup
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk.x86_64
export GRAILS_HOME=/u/crcazel/grails-2.3.4
export PATH="$GRAILS_HOME/bin:$PATH"
[crcazel@silo grails-2.3.4]$ source .grails-setup
[crcazel@silo grails-2.3.4]$ echo $JAVA_HOME
/usr/lib/jvm/java-1.7.0-openjdk.x86_64
[crcazel@silo grails-2.3.4]$

Once these settings are active I don't need  to be here or anywhere in particular.

From the installation folder move to top level and create grails-projects. 

[crcazel@silo grails-2.3.4]$ pwd
/u/crcazel/grails-2.3.4
[crcazel@silo grails-2.3.4]$ which grails
~/grails-2.3.4/bin/grails
[crcazel@silo grails-2.3.4]$ cd
[crcazel@silo ~]$ ls
bin                  Homework11.java   Midterm.class       Player.java
c212                 Homework12.class  Midterm.java        Problem11.class
crcazel-submissions  Homework12.java   MilitaryTime.class  Problem11.java
Dice.class           Homework21.class  MilitaryTime.java   Problem12.class
Dice.java            Homework21.java   myFrame.class       Problem12.java
Game.java            Homework22.class  myFrame.java        Problem21.class
grails-2.3.4         Homework22.java   P412.class          Problem21.java
grails-2.3.4.zip     Homework23.class  P412.java           README
Homework11.class     Homework23.java   Player.class        TicTacToe.java
[crcazel@silo ~]$ mkdir grails-projects
[crcazel@silo ~]$ cd grails-projects/
[crcazel@silo grails-projects]$ ls
[crcazel@silo grails-projects]$ grails
| Downloading: spring-test-3.2.5.RELEASE.jar
Apr 21, 2014 8:33:34 AM java.util.prefs.FileSystemPreferences$1 run
| Enter a script name to run. Use TAB for completion:
grails> quit
| Goodbye
[crcazel@silo grails-projects]$

So you see grails is running at this point. 

We have two options if we want to explore this:

(a) follow the book and develop from scratch 

(b) check the code from the book 

Looking through the book is not bad but (b) is the way to go.

Get the code from the software folder:

[crcazel@silo grails-projects]$ pwd
/u/crcazel/grails-projects
[crcazel@silo grails-projects]$ ls -l
total 0
[crcazel@silo grails-projects]$ cp /l/www/classes/c212/software/graina2-master.zip .
[crcazel@silo grails-projects]$ ls
graina2-master.zip
[crcazel@silo grails-projects]$

Unzip and move into chapter 1.

[crcazel@silo grails-projects]$ ls
graina2-master  graina2-master.zip
[crcazel@silo grails-projects]$ cd graina2-master
[crcazel@silo graina2-master]$ ls
attic  ch02  ch04  ch05.old  ch07  ch09  ch11  ch13  ch15  ch17  ch19  README
ch01   ch03  ch05  ch06      ch08  ch10  ch12  ch14  ch16  ch18  ch20
[crcazel@silo graina2-master]$ cd ch01
[crcazel@silo ch01]$ ls
qotd
[crcazel@silo ch01]$ cd qotd
[crcazel@silo qotd]$ ls
application.properties  grails-app  grailsw  grailsw.bat  test  web-app  wrapper
[crcazel@silo qotd]$ cat application.properties
#Grails Metadata file
#Fri Jan 10 15:03:31 GMT 2014
app.grails.version=2.3.4
app.name=qotd
app.version=0.1
[crcazel@silo qotd]$

Now I know why he wanted 2.3.4

What else do I need? A port number.

Chris says: 4201 is a good port for me. 

So we copy then unzip the code from the book: 

 extracting: graina2-master/ch19/qotd-cloud/web-app/images/skin/database_table.png
 extracting: graina2-master/ch19/qotd-cloud/web-app/images/skin/exclamation.png
 extracting: graina2-master/ch19/qotd-cloud/web-app/images/skin/house.png
 extracting: graina2-master/ch19/qotd-cloud/web-app/images/skin/information.png
  inflating: graina2-master/ch19/qotd-cloud/web-app/images/skin/shadow.jpg
  inflating: graina2-master/ch19/qotd-cloud/web-app/images/skin/sorted_asc.gif
  inflating: graina2-master/ch19/qotd-cloud/web-app/images/skin/sorted_desc.gif
  inflating: graina2-master/ch19/qotd-cloud/web-app/images/spinner.gif
  inflating: graina2-master/ch19/qotd-cloud/web-app/images/springsource.png
   creating: graina2-master/ch19/qotd-cloud/web-app/js/
  inflating: graina2-master/ch19/qotd-cloud/web-app/js/application.js
   creating: graina2-master/ch19/qotd-cloud/wrapper/
  inflating: graina2-master/ch19/qotd-cloud/wrapper/grails-wrapper-runtime-2.3.4.jar
  inflating: graina2-master/ch19/qotd-cloud/wrapper/grails-wrapper.properties
  inflating: graina2-master/ch19/qotd-cloud/wrapper/springloaded-core-1.1.4.jar
   creating: graina2-master/ch20/
   creating: graina2-master/ch20/graina-security/
  inflating: graina2-master/ch20/graina-security/.classpath
  inflating: graina2-master/ch20/graina-security/.project
  inflating: graina2-master/ch20/graina-security/GrainaSecurityGrailsPlugin.groovy
  inflating: graina2-master/ch20/graina-security/application.properties
   creating: graina2-master/ch20/graina-security/grails-app/
   creating: graina2-master/ch20/graina-security/grails-app/conf/
  inflating: graina2-master/ch20/graina-security/grails-app/conf/BuildConfig.groovy
  inflating: graina2-master/ch20/graina-security/grails-app/conf/Config.groovy
  inflating: graina2-master/ch20/graina-security/grails-app/conf/DataSource.groovy
  inflating: graina2-master/ch20/graina-security/grails-app/conf/UrlMappings.groovy
   creating: graina2-master/ch20/graina-security/grails-app/conf/com/
   creating: graina2-master/ch20/graina-security/grails-app/conf/com/grailsinaction/
   creating: graina2-master/ch20/graina-security/grails-app/conf/com/grailsinaction/security/
  inflating: graina2-master/ch20/graina-security/grails-app/conf/com/grailsinaction/security/AccessControlFilters.groovy
   creating: graina2-master/ch20/graina-security/grails-app/controllers/
   creating: graina2-master/ch20/graina-security/grails-app/controllers/com/
   creating: graina2-master/ch20/graina-security/grails-app/controllers/com/grailsinaction/
   creating: graina2-master/ch20/graina-security/grails-app/controllers/com/grailsinaction/security/
  inflating: graina2-master/ch20/graina-security/grails-app/controllers/com/grailsinaction/security/LoginController.groovy
   creating: graina2-master/ch20/graina-security/grails-app/views/
  inflating: graina2-master/ch20/graina-security/grails-app/views/error.gsp
   creating: graina2-master/ch20/graina-security/grails-app/views/login/
  inflating: graina2-master/ch20/graina-security/grails-app/views/login/index.gsp
  inflating: graina2-master/ch20/graina-security/plugin.xml
   creating: graina2-master/ch20/graina-security/scripts/
  inflating: graina2-master/ch20/graina-security/scripts/_Install.groovy
  inflating: graina2-master/ch20/graina-security/scripts/_Uninstall.groovy
  inflating: graina2-master/ch20/graina-security/scripts/_Upgrade.groovy
   creating: graina2-master/ch20/graina-security/test/
   creating: graina2-master/ch20/graina-security/test/unit/
   creating: graina2-master/ch20/graina-security/test/unit/com/
   creating: graina2-master/ch20/graina-security/test/unit/com/grailsinaction/
   creating: graina2-master/ch20/graina-security/test/unit/com/grailsinaction/security/
  inflating: graina2-master/ch20/graina-security/test/unit/com/grailsinaction/security/AccessControlFiltersSpec.groovy
  inflating: graina2-master/ch20/graina-security/test/unit/com/grailsinaction/security/LoginControllerSpec.groovy
   creating: graina2-master/ch20/graina-security/web-app/
   creating: graina2-master/ch20/graina-security/web-app/WEB-INF/
  inflating: graina2-master/ch20/graina-security/web-app/WEB-INF/applicationContext.xml
  inflating: graina2-master/ch20/graina-security/web-app/WEB-INF/sitemesh.xml
   creating: graina2-master/ch20/graina-security/web-app/WEB-INF/tld/
  inflating: graina2-master/ch20/graina-security/web-app/WEB-INF/tld/c.tld
  inflating: graina2-master/ch20/graina-security/web-app/WEB-INF/tld/fmt.tld
  inflating: graina2-master/ch20/graina-security/web-app/WEB-INF/tld/grails.tld
  inflating: graina2-master/ch20/graina-security/web-app/WEB-INF/tld/spring-form.tld
  inflating: graina2-master/ch20/graina-security/web-app/WEB-INF/tld/spring.tld
   creating: graina2-master/ch20/graina-security/web-app/js/
  inflating: graina2-master/ch20/graina-security/web-app/js/security.js
[crcazel@silo grails-projects]$ clear
[crcazel@silo grails-projects]$ ls
graina2-master  graina2-master.zip
[crcazel@silo grails-projects]$ cd graina2-master
[crcazel@silo graina2-master]$ ls
attic  ch02  ch04  ch05.old  ch07  ch09  ch11  ch13  ch15  ch17  ch19  README
ch01   ch03  ch05  ch06      ch08  ch10  ch12  ch14  ch16  ch18  ch20
[crcazel@silo graina2-master]$ cd ch01
[crcazel@silo ch01]$ ls
qotd
[crcazel@silo ch01]$ cd qotd
[crcazel@silo qotd]$ ls
application.properties  grails-app  grailsw  grailsw.bat  test  web-app  wrapper
[crcazel@silo qotd]$ cat application.properties
#Grails Metadata file
#Fri Jan 10 15:03:31 GMT 2014
app.grails.version=2.3.4
app.name=qotd
app.version=0.1
[crcazel@silo qotd]$ clear
[crcazel@silo qotd]$ netstat -a | grep 4201
tcp        0      0 *:24201                     *:*                         LISTEN     
^C
[crcazel@silo qotd]$ netstat -a | grep 8346
tcp        0      0 *:8346                      *:*                         LISTEN     
tcp        0      0 silo.soic.indiana.edu:8346  149-160-212-163.dhcp-:51440 FIN_WAIT2  
[crcazel@silo qotd]$ pwd
/u/crcazel/grails-projects/graina2-master/ch01/qotd
[crcazel@silo qotd]$ ls
application.properties  grails-app  grailsw  grailsw.bat  test  web-app  wrapper
[crcazel@silo qotd]$ grails -Dserver.port=4210 run-app
| Downloading: org/spockframework/spock-core/0.7-groovy-2.0/spock-core-0.7-groovy-2.0.p| Downloading: org/apache/tomcat/tomcat-catalina-ant/7.0.47/tomcat-catalina-ant-7.0.47.| Downloading: org/apache/tomcat/embed/tomcat-embed-jasper/7.0.47/tomcat-embed-jasper-7| Downloading: org/apache/tomcat/embed/tomcat-embed-logging-log4j/7.0.47/tomcat-embed-l| Downloading: org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar
| Downloading: org/xhtmlrenderer/core-renderer/R8/core-renderer-R8.jar
| Downloading: org/apache/tomcat/tomcat-catalina-ant/7.0.47/tomcat-catalina-ant-7.0.47.| Downloading: org/apache/tomcat/embed/tomcat-embed-jasper/7.0.47/tomcat-embed-jasper-7| Downloading: org/apache/tomcat/embed/tomcat-embed-logging-log4j/7.0.47/tomcat-embed-l| Downloading: org/apache/tomcat/embed/tomcat-embed-core/7.0.47/tomcat-embed-core-7.0.4| Downloading: commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.| Downloading: org/springframework/spring-webmvc/3.2.5.RELEASE/spring-webmvc-3.2.5.RELE| Downloading: org/springframework/spring-beans/3.2.5.RELEASE/spring-beans-3.2.5.RELEAS| Downloading: org/springframework/spring-core/3.2.5.RELEASE/spring-core-3.2.5.RELEASE.| Downloading: org/springframework/spring-context/3.2.5.RELEASE/spring-context-3.2.5.RE| Downloading: org/springframework/spring-aop/3.2.5.RELEASE/spring-aop-3.2.5.RELEASE.po| Downloading: org/springframework/spring-expression/3.2.5.RELEASE/spring-expression-3.| Downloading: org/springframework/spring-web/3.2.5.RELEASE/spring-web-3.2.5.RELEASE.po| Downloading: com/googlecode/concurrentlinkedhashmap/concurrentlinkedhashmap-lru/1.3.1| Downloading: org/springframework/spring-aspects/3.2.5.RELEASE/spring-aspects-3.2.5.RE| Downloading: org/springframework/spring-context-support/3.2.5.RELEASE/spring-context-| Downloading: org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.1.Final/hibern| Downloading: org/grails/grails-plugin-datasource/2.3.4/grails-plugin-datasource-2.3.4| Downloading: org/springframework/spring-jdbc/3.2.5.RELEASE/spring-jdbc-3.2.5.RELEASE.| Downloading: org/grails/grails-plugin-controllers/2.3.4/grails-plugin-controllers-2.3| Downloading: org/grails/grails-plugin-mimetypes/2.3.4/grails-plugin-mimetypes-2.3.4.p| Downloading: org/grails/grails-plugin-converters/2.3.4/grails-plugin-converters-2.3.4| Downloading: org/grails/grails-plugin-domain-class/2.3.4/grails-plugin-domain-class-2| Downloading: org/grails/grails-datastore-simple/2.0.6.RELEASE/grails-datastore-simple| Downloading: org/grails/grails-datastore-gorm/2.0.6.RELEASE/grails-datastore-gorm-2.0| Downloading: org/grails/grails-datastore-core/2.0.6.RELEASE/grails-datastore-core-2.0| Downloading: org/grails/grails-plugin-validation/2.3.4/grails-plugin-validation-2.3.4| Downloading: org/grails/grails-plugin-databinding/2.3.4/grails-plugin-databinding-2.3| Downloading: org/grails/grails-plugin-url-mappings/2.3.4/grails-plugin-url-mappings-2| Downloading: org/springframework/spring-test/3.2.5.RELEASE/spring-test-3.2.5.RELEASE.| Downloading: org/grails/grails-datastore-gorm-hibernate/2.0.6.RELEASE/grails-datastor| Downloading: org/hibernate/hibernate-core/3.6.10.Final/hibernate-core-3.6.10.Final.po| Downloading: org/hibernate/hibernate-parent/3.6.10.Final/hibernate-parent-3.6.10.Fina| Downloading: org/hibernate/hibernate-commons-annotations/3.2.0.Final/hibernate-common| Downloading: org/hibernate/hibernate-validator/4.1.0.Final/hibernate-validator-4.1.0.| Downloading: org/hibernate/hibernate-validator-parent/4.1.0.Final/hibernate-validator| Downloading: org/grails/grails-datastore-gorm-plugin-support/2.0.6.RELEASE/grails-dat| Downloading: org/grails/grails-datastore-web/2.0.6.RELEASE/grails-datastore-web-2.0.6| Downloading: org/grails/grails-datastore-gorm-hibernate-core/2.0.6.RELEASE/grails-dat| Downloading: org/hibernate/hibernate-entitymanager/3.6.10.Final/hibernate-entitymanag| Downloading: org/hibernate/hibernate-ehcache/3.6.10.Final/hibernate-ehcache-3.6.10.Fi| Downloading: org/springframework/spring-orm/3.2.5.RELEASE/spring-orm-3.2.5.RELEASE.po| Downloading: commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.| Downloading: org/springframework/spring-webmvc/3.2.5.RELEASE/spring-webmvc-3.2.5.RELE| Downloading: org/grails/grails-plugin-datasource/2.3.4/grails-plugin-datasource-2.3.4| Downloading: org/grails/grails-plugin-controllers/2.3.4/grails-plugin-controllers-2.3| Downloading: org/springframework/spring-jdbc/3.2.5.RELEASE/spring-jdbc-3.2.5.RELEASE.| Downloading: org/grails/grails-plugin-validation/2.3.4/grails-plugin-validation-2.3.4| Downloading: org/grails/grails-plugin-databinding/2.3.4/grails-plugin-databinding-2.3| Downloading: org/springframework/spring-context/3.2.5.RELEASE/spring-context-3.2.5.RE| Downloading: org/springframework/spring-beans/3.2.5.RELEASE/spring-beans-3.2.5.RELEAS| Downloading: org/springframework/spring-aspects/3.2.5.RELEASE/spring-aspects-3.2.5.RE| Downloading: org/springframework/spring-expression/3.2.5.RELEASE/spring-expression-3.| Downloading: org/springframework/spring-web/3.2.5.RELEASE/spring-web-3.2.5.RELEASE.ja| Downloading: org/springframework/spring-core/3.2.5.RELEASE/spring-core-3.2.5.RELEASE.| Downloading: org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.1.Final/hibern| Downloading: org/springframework/spring-context-support/3.2.5.RELEASE/spring-context-| Downloading: org/springframework/spring-aop/3.2.5.RELEASE/spring-aop-3.2.5.RELEASE.ja| Downloading: org/grails/grails-plugin-url-mappings/2.3.4/grails-plugin-url-mappings-2| Downloading: com/googlecode/concurrentlinkedhashmap/concurrentlinkedhashmap-lru/1.3.1| Downloading: org/grails/grails-plugin-mimetypes/2.3.4/grails-plugin-mimetypes-2.3.4.j| Downloading: org/springframework/spring-test/3.2.5.RELEASE/spring-test-3.2.5.RELEASE.| Downloading: org/grails/grails-datastore-simple/2.0.6.RELEASE/grails-datastore-simple| Downloading: org/grails/grails-datastore-core/2.0.6.RELEASE/grails-datastore-core-2.0| Downloading: org/grails/grails-datastore-gorm/2.0.6.RELEASE/grails-datastore-gorm-2.0| Downloading: org/grails/grails-plugin-converters/2.3.4/grails-plugin-converters-2.3.4| Downloading: org/grails/grails-plugin-domain-class/2.3.4/grails-plugin-domain-class-2| Downloading: org/grails/grails-datastore-gorm-hibernate/2.0.6.RELEASE/grails-datastor| Downloading: org/hibernate/hibernate-core/3.6.10.Final/hibernate-core-3.6.10.Final.ja| Downloading: org/hibernate/hibernate-validator/4.1.0.Final/hibernate-validator-4.1.0.| Downloading: org/grails/grails-datastore-gorm-plugin-support/2.0.6.RELEASE/grails-dat| Downloading: org/grails/grails-datastore-web/2.0.6.RELEASE/grails-datastore-web-2.0.6| Downloading: org/grails/grails-datastore-gorm-hibernate-core/2.0.6.RELEASE/grails-dat| Downloading: org/hibernate/hibernate-ehcache/3.6.10.Final/hibernate-ehcache-3.6.10.Fi| Downloading: org/hibernate/hibernate-entitymanager/3.6.10.Final/hibernate-entitymanag| Downloading: org/springframework/spring-orm/3.2.5.RELEASE/spring-orm-3.2.5.RELEASE.ja| Downloading: org/hibernate/hibernate-commons-annotations/3.2.0.Final/hibernate-common| Compiling 10 source files

| Compiling 142 source files

| Running Grails application
Picked up _JAVA_OPTIONS: -Xms512m -Xmx512m
| Server running. Browse to http://localhost:4210/qotd
[crcazel@silo qotd]$ grails -Dserver.port=14201 run-app
| Running Grails application
| Error Server failed to start for port 14201: Address already in use (Use --stacktrace to see the full trace)
[crcazel@silo qotd]$ grails -Dserver.port=34201 run-app
| Running Grails application
Picked up _JAVA_OPTIONS: -Xms512m -Xmx512m
| Server running. Browse to http://localhost:34201/qotd
[crcazel@silo qotd]$


--