Similar to my Cloud Foundry environment notes I was interested what Stackato puts on top of the Cloud Foundry framework. This was running in a local VM that I downloaded from their site.

Deploying the app

Still using the same test code

After spending quite some time on trying to set the JAVA_OPTS, I instead changed the source code to use the environment variable instead of server.port and server.address and then re-pushed

mkdir build
cd build
unzip ../target/simple-executable-jar-web-server-0.0.1.jar
cd ..
stackato push --path /xdata/local/dev/markus/git/simple-executable-jar-web-server/build

The app worked after my code changes and the test server was up and running, but I could not log into the web console, anymore, thought I had the password wrong, but then used

stackato passwd

and it accepted my old password. Besides Firefox remembered the same password.

A server restart helped. Since I usually only pause my VMs it might have gotten confused.,

Runtime Environment and Properties

Environment

'HOME' = '/home/stackato/app'
'JAVA_OPTS' = '-Dserver.port=$VCAP_APP_PORT -Dserver.address=$VCAP_APP_HOST'
'LANG' = 'en_US.UTF-8'
'LANGUAGE' = 'en_US.UTF-8'
'LC_ALL' = 'en_US.UTF-8'
'LOGNAME' = 'stackato'
'MAIL' = '/var/mail/stackato'
'MEMORY_LIMIT' = '256m'
'NLSPATH' = '/usr/dt/lib/nls/msg/%L/%N.cat'
'OLDPWD' = '/home/stackato/app'
'PACKAGES_COMMON' = 'git'
'PATH' = '/opt/ActivePython-2.7/bin:/opt/ActivePython-3.3/bin:/opt/ActivePerl-5.16/bin:/opt/rubies/current/bin:/opt/node-v0.10/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
'PORT' = '58761'
'PWD' = '/home/stackato/app'
'SHELL' = '/bin/bash'
'SHLVL' = '2'
'SSH_CLIENT' = '172.17.42.1 51755 22'
'SSH_CONNECTION' = '172.17.42.1 51755 172.17.0.86 22'
'STACKATO_APP_ENV' = 'JAVA_OPTS'
'STACKATO_APP_NAME' = 'simple-executable-jar-web-server'
'STACKATO_APP_NAME_UPCASE' = 'SIMPLE_EXECUTABLE_JAR_WEB_SERVER'
'STACKATO_APP_ROOT' = '/home/stackato'
'STACKATO_DOCKER' = 'True'
'STACKATO_LOG_FILES' = 'stdout=/home/stackato/logs/stdout.log:stderr=/home/stackato/logs/stderr.log'
'STACKATO_SERVICES' = '{}'
'TMPDIR' = '/home/stackato/tmp'
'USER' = 'stackato'
'VCAP_APPLICATION' = '{"instance_id":"e20054cb47ed479c843142b480e12f52","instance_index":0,"host":"0.0.0.0","port":58761,"started_at":"2014-06-02 06:33:19 -0700","started_at_timestamp":1401715999,"start":"2014-06-02 06:33:19 -0700","state_timestamp":1401715999,"limits":{"mem":256,"disk":2048,"fds":16384,"allow_sudo":false},"application_version":"8c5b4b0a-5e50-4d69-bf92-f4fe7c5ef0ec","application_name":"simple-executable-jar-web-server","application_uris":["simple-executable-jar-web-server.stackato-cr6q.local"],"sso_enabled":false,"version":"8c5b4b0a-5e50-4d69-bf92-f4fe7c5ef0ec","name":"simple-executable-jar-web-server","uris":["simple-executable-jar-web-server.stackato-cr6q.local"],"users":null}'
'VCAP_APP_HOST' = '0.0.0.0'
'VCAP_APP_PORT' = '58761'
'VCAP_SERVICES' = '{}'
'XFILESEARCHPATH' = '/usr/dt/app-defaults/%L/Dt'
'_' = '/home/stackato/app/.java-buildpack/open_jdk/bin/java'

System Properties

'awt.toolkit' = 'sun.awt.X11.XToolkit'
'file.encoding' = 'UTF-8'
'file.encoding.pkg' = 'sun.io'
'file.separator' = '/'
'java.awt.graphicsenv' = 'sun.awt.X11GraphicsEnvironment'
'java.awt.printerjob' = 'sun.print.PSPrinterJob'
'java.class.path' = '/home/stackato/app/.'
'java.class.version' = '51.0'
'java.endorsed.dirs' = '/home/stackato/app/.java-buildpack/open_jdk/lib/endorsed'
'java.ext.dirs' = '/home/stackato/app/.java-buildpack/open_jdk/lib/ext:/usr/java/packages/lib/ext'
'java.home' = '/home/stackato/app/.java-buildpack/open_jdk'
'java.io.tmpdir' = '/home/stackato/tmp'
'java.library.path' = '/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib'
'java.runtime.name' = 'OpenJDK Runtime Environment'
'java.runtime.version' = '1.7.0_60-b19'
'java.specification.name' = 'Java Platform API Specification'
'java.specification.vendor' = 'Oracle Corporation'
'java.specification.version' = '1.7'
'java.vendor' = 'Oracle Corporation'
'java.vendor.url' = 'http://java.oracle.com/'
'java.vendor.url.bug' = 'http://bugreport.sun.com/bugreport/'
'java.version' = '1.7.0_60'
'java.vm.info' = 'mixed mode'
'java.vm.name' = 'OpenJDK 64-Bit Server VM'
'java.vm.specification.name' = 'Java Virtual Machine Specification'
'java.vm.specification.vendor' = 'Oracle Corporation'
'java.vm.specification.version' = '1.7'
'java.vm.vendor' = 'Oracle Corporation'
'java.vm.version' = '24.80-b07'
'line.separator' = '    '
'os.arch' = 'amd64'
'os.name' = 'Linux'
'os.version' = '3.8.0-30-generic'
'path.separator' = ':'
'sun.arch.data.model' = '64'
'sun.boot.class.path' = '/home/stackato/app/.java-buildpack/open_jdk/lib/resources.jar:/home/stackato/app/.java-buildpack/open_jdk/lib/rt.jar:/home/stackato/app/.java-buildpack/open_jdk/lib/sunrsasign.jar:/home/stackato/app/.java-buildpack/open_jdk/lib/jsse.jar:/home/stackato/app/.java-buildpack/open_jdk/lib/jce.jar:/home/stackato/app/.java-buildpack/open_jdk/lib/charsets.jar:/home/stackato/app/.java-buildpack/open_jdk/lib/jfr.jar:/home/stackato/app/.java-buildpack/open_jdk/classes'
'sun.boot.library.path' = '/home/stackato/app/.java-buildpack/open_jdk/lib/amd64'
'sun.cpu.endian' = 'little'
'sun.cpu.isalist' = ''
'sun.io.unicode.encoding' = 'UnicodeLittle'
'sun.java.command' = 'at.mnm.util.SimpleTestWebServer'
'sun.java.launcher' = 'SUN_STANDARD'
'sun.jnu.encoding' = 'UTF-8'
'sun.management.compiler' = 'HotSpot 64-Bit Tiered Compilers'
'sun.os.patch.level' = 'unknown'
'user.country' = 'US'
'user.dir' = '/home/stackato/app'
'user.home' = '/home/stackato'
'user.language' = 'en'
'user.name' = 'stackato'

Adding services

Wanted to add the service via the web UI but did not immediately see how.

stackato create-service mysql testdb simple-executable-jar-web-server

Afterwards the following new environment properties were added :

> 'DATABASE_URL' = 'mysql://ucLE9lXtowAqf:pYSRyL7jO1vgi@172.16.127.133:3306/d415c91f5251b450d9a3c20c45b5d7777'
> 'JDBC_MYSQL_URL' = 'jdbc:mysql://ucLE9lXtowAqf:pYSRyL7jO1vgi@172.16.127.133:3306/d415c91f5251b450d9a3c20c45b5d7777'
> 'MYSQL_URL' = 'mysql://ucLE9lXtowAqf:pYSRyL7jO1vgi@172.16.127.133:3306/d415c91f5251b450d9a3c20c45b5d7777'

And these changed : < 'STACKATO_SERVICES' = '{}' ---

'STACKATO_SERVICES' = '{"testdb":{"name":"d415c91f5251b450d9a3c20c45b5d7777", "hostname":"172.16.127.133","host":"172.16.127.133","port":3306, "user":"ucLE9lXtowAqf","username":"ucLE9lXtowAqf","password":"pYSRyL7jO1vgi", "uri":"mysql://ucLE9lXtowAqf:pYSRyL7jO1vgi@172.16.127.133:3306/d415c91f5251b450d9a3c20c45b5d7777", "jdbcUrl":"jdbc:mysql://ucLE9lXtowAqf:pYSRyL7jO1vgi@172.16.127.133:3306/d415c91f5251b450d9a3c20c45b5d7777"}}'

< 'VCAP_SERVICES' = '{}'
---
> 'VCAP_SERVICES' = '{"mysql":[{"name":"testdb","label":"mysql-5.5","tags":[],
    "plan":"free","credentials":{"name":"d415c91f5251b450d9a3c20c45b5d7777",
    "hostname":"172.16.127.133","host":"172.16.127.133","port":3306,
    "user":"ucLE9lXtowAqf","username":"ucLE9lXtowAqf","password":"pYSRyL7jO1vgi",
    "uri":"mysql://ucLE9lXtowAqf:pYSRyL7jO1vgi@172.16.127.133:3306/d415c91f5251b450d9a3c20c45b5d7777",
    "jdbcUrl":"jdbc:mysql://ucLE9lXtowAqf:pYSRyL7jO1vgi@172.16.127.133:3306/d415c91f5251b450d9a3c20c45b5d7777"}}]}'

VCAP_APPLICATION seemed to change like for CloudFoundry - but unrelated to to service.

and this system proeprty changed, simialr to Cloud Foundry:

< 'java.class.path' = '/home/stackato/app/.'
---
> 'java.class.path' = '/home/stackato/app/.:/home/stackato/app/.java-buildpack/maria_db_jdbc/maria_db_jdbc-1.1.7.jar'

Appendix : How to Not Set Environment

Not sure how this should have worked, but it didn't for me...

I wanted to set Java System Properties to pass in the server.address and server.port. The same worked for Cloud Foundry

Tried to figure out the right amount of escaping ... this is what we want to see: 'JAVA_OPTS' = '-Dserver.port=$VCAP_APP_PORT -Dserver.address=$VCAP_APP_HOST'

stackato set-env simple-executable-jar-web-server JAVA_OPTS "-Dserver.port=\\\$VCAP_APP_PORT -Dserver.address=\\\$VCAP_APP_HOST"
Unknown option -Dserver.port

stackato set-env simple-executable-jar-web-server JAVA_OPTS '-Dserver.port=$VCAP_APP_PORT -Dserver.address=$VCAP_APP_HOST'
Unknown option -Dserver.port


stackato set-env simple-executable-jar-web-server JAVA_OPTS '\-Dserver.port=\$VCAP_APP_PORT \-Dserver.address=\$VCAP_APP_HOST'
Adding Environment Variable [JAVA_OPTS=\-Dserver.port=\$VCAP_APP_PORT \-Dserver.address=\$VCAP_APP_HOST] ... 
...
app[stdout.0]:    'JAVA_OPTS' = '\-Dserver.port=$VCAP_APP_PORT \-Dserver.address=$VCAP_APP_HOST'
...




stackato set-env simple-executable-jar-web-server JAVA_OPTS '\"-Dserver.port=\$VCAP_APP_PORT \-Dserver.address=\$VCAP_APP_HOST\"'
Adding Environment Variable [JAVA_OPTS=\"-Dserver.port=\$VCAP_APP_PORT \-Dserver.address=\$VCAP_APP_HOST\"] ... 
...
app[stdout.0]:    'JAVA_OPTS' = '\-Dserver.port=$VCAP_APP_PORT'
...


stackato set-env simple-executable-jar-web-server JAVA_OPTS "\"-Dserver.port=\$VCAP_APP_PORT \-Dserver.address=\$VCAP_APP_HOST\""
Adding Environment Variable [JAVA_OPTS="-Dserver.port=$VCAP_APP_PORT \-Dserver.address=$VCAP_APP_HOST"] ... 
...
app[stdout.0]:    'JAVA_OPTS' = '"-Dserver.port=45238 \-Dserver.address=0.0.0.0"'
...

stackato env-add simple-executable-jar-web-server JAVA_OPTS "\"-Dserver.port=\$VCAP_APP_PORT \-Dserver.address=\$VCAP_APP_HOST\""
Adding Environment Variable [JAVA_OPTS="-Dserver.port=$VCAP_APP_PORT \-Dserver.address=$VCAP_APP_HOST"] ... 
...
app[stdout.0]:    'JAVA_OPTS' = '"-Dserver.port=43998 \-Dserver.address=0.0.0.0"'
...


stackato set-env simple-executable-jar-web-server JAVA_OPTS "\-Dserver.port=\\\$VCAP_APP_PORT \-Dserver.address=\\\$VCAP_APP_HOST"
Adding Environment Variable [JAVA_OPTS=\-Dserver.port=\$VCAP_APP_PORT \-Dserver.address=\$VCAP_APP_HOST] ... 
...
app[stdout.0]:    'JAVA_OPTS' = '\-Dserver.port=$VCAP_APP_PORT \-Dserver.address=$VCAP_APP_HOST'
...


stackato env-add simple-executable-jar-web-server JAVA_OPTS "\"-Dserver.port=\$VCAP_APP_PORT -Dserver.address=\$VCAP_APP_HOST\""
Adding Environment Variable [JAVA_OPTS="-Dserver.port=$VCAP_APP_PORT -Dserver.address=$VCAP_APP_HOST"] ... 
...
app[stdout.0]:    'JAVA_OPTS' = '"-Dserver.port=48420 -Dserver.address=0.0.0.0"'
...

stackato env-add simple-executable-jar-web-server JAVA_OPTS "\"-Dserver.port=\\\$VCAP_APP_PORT -Dserver.address=\\\$VCAP_APP_HOST\""
Adding Environment Variable [JAVA_OPTS="-Dserver.port=\$VCAP_APP_PORT -Dserver.address=\$VCAP_APP_HOST"] ... 
...
app[stdout.0]:    'JAVA_OPTS' = '"-Dserver.port=$VCAP_APP_PORT -Dserver.address=$VCAP_APP_HOST"'
...


stackato env-add simple-executable-jar-web-server JAVA_OPTS "\-Dserver.port=\\\$VCAP_APP_PORT \-Dserver.address=\\\$VCAP_APP_HOST"
Adding Environment Variable [JAVA_OPTS=\-Dserver.port=\$VCAP_APP_PORT \-Dserver.address=\$VCAP_APP_HOST] ... 
...
app[stdout.0]:    'JAVA_OPTS' = '\-Dserver.port=$VCAP_APP_PORT \-Dserver.address=$VCAP_APP_HOST'
...

stackato env-add simple-executable-jar-web-server JAVA_OPTS '"-"Dserver.port=\$VCAP_APP_PORT "-"Dserver.address=\$VCAP_APP_HOST"'
Adding Environment Variable [JAVA_OPTS="-"Dserver.port=\$VCAP_APP_PORT "-"Dserver.address=\$VCAP_APP_HOST"] ... 
...
app[stdout.0]:    'JAVA_OPTS' = '"-"Dserver.port=$VCAP_APP_PORT "-"Dserver.address=$VCAP_APP_HOST"'
...

giving up. I use the way it works descibed at http://community.activestate.com/node/9487 (or I could use cf).

vi build/stackato.yml

app-dir: /xdata/local/dev/markus/git/simple-executable-jar-web-server/build
disk: 2048
memory: 256
name: simple-executable-jar-web-server
env:
JAVA_OPTS: "-Dserver.port=$VCAP_APP_PORT -Dserver.address=$VCAP_APP_HOST"


stackato push --path /xdata/local/dev/markus/git/simple-executable-jar-web-server/build
...
app[stdout.0]:    'JAVA_OPTS' = '"-"Dserver.port=$VCAP_APP_PORT "-"Dserver.address=$VCAP_APP_HOST"'
...


stackato env-del simple-executable-jar-web-server JAVA_OPTS
Deleting Environment Variable [JAVA_OPTS] ... 



stackato push --path /xdata/local/dev/markus/git/simple-executable-jar-web-server/build
Using manifest file "build/stackato.yml"
...
Enter JAVA_OPTS [-Dserver.port=$VCAP_APP_PORT -Dserver.address=$VCAP_APP_HOST]: 
  Adding Environment Variable [JAVA_OPTS=-Dserver.port=$VCAP_APP_PORT -Dserver.address=$VCAP_APP_HOST]
...

but no JAVA_OPTS and no system properties

stackato env-del simple-executable-jar-web-server JAVA_OPTS


cf login  --skip-ssl-validation -a https://api.stackato-cr6q.local
API endpoint: https://api.stackato-cr6q.local
...

cf set-env simple-executable-jar-web-server JAVA_OPTS "-Dserver.port=\\\$VCAP_APP_PORT -Dserver.address=\\\$VCAP_APP_HOST"
Setting env variable 'JAVA_OPTS' to '-Dserver.port=\$VCAP_APP_PORT -Dserver.address=\$VCAP_APP_HOST' for app simple-executable-jar-web-server in org mnm.at / space demos as admin...
OK
TIP: Use 'cf push' to ensure your env variable changes take effect

rm build/stackato.yml 
stackato push --path /xdata/local/dev/markus/git/simple-executable-jar-web-server/build

even though this time the JAVA_OPTS variable looks right:

app[stdout.0]:    'JAVA_OPTS' = '-Dserver.port=$VCAP_APP_PORT -Dserver.address=$VCAP_APP_HOST'

there is not server.port system property. so it seems that the build back is different (though it is the java build pack)