summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Ørbekk <orbekk@pvv.ntnu.no>2010-09-02 00:34:33 -0400
committerKjetil Ørbekk <orbekk@pvv.ntnu.no>2010-09-02 00:34:33 -0400
commit699b451675830da041d09a6e32045772788ad66e (patch)
treecc3e46670503599dd546dbc1652189dd2b4fc02e
Framework for Lino Quotes
-rw-r--r--build.xml130
-rw-r--r--src/META-INF/jdoconfig.xml14
-rw-r--r--src/WEB-INF/appengine-web.xml4
-rw-r--r--src/WEB-INF/web.xml32
-rw-r--r--src/log4j.properties24
-rw-r--r--src/logging.properties27
-rw-r--r--src/lq/Redirect.java23
-rw-r--r--src/lq/ViewQuotes.java14
-rw-r--r--src/org/example/HelloAppEngineServlet.java12
9 files changed, 280 insertions, 0 deletions
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..c526843
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,130 @@
+<!-- This is a template Ant file for a very basic Google AppEngine project -->
+
+<project name="myproject" default="war">
+
+ <property file="build.properties"/>
+ <property name="appengine.sdk" location="../.."/>
+
+ <!-- Check that the SDK value is set and seems sane, so we can give a nicer
+ error if not. -->
+ <fail message="Please define the appengine.sdk property to point to your SDK directory">
+ <condition>
+ <not> <and>
+ <isset property="appengine.sdk"/>
+ <available file="${appengine.sdk}/config/user/ant-macros.xml"/>
+ </and> </not>
+ </condition>
+ </fail>
+
+ <!-- Pick up the Ant macros and taskdefs for App Engine -->
+ <import file="${appengine.sdk}/config/user/ant-macros.xml"/>
+
+
+ <!-- Remote debug port for dev_appserver -->
+ <property name="debug.port" value="5005"/>
+
+ <!-- HTTP port for dev_appserver -->
+ <property name="http.port" value="8080"/>
+
+ <!-- Name of log file to write logs to -->
+ <property name="log.file" value="app.log"/>
+
+ <!-- Number of days worth of logs to retrieve -->
+ <property name="log.days" value="2"/>
+
+
+ <!-- Change if you like e.g. "war" better than "www" for the output -->
+ <property name="war.dir" location="www"/>
+
+ <target name="war" depends="enhance"
+ description="Assemble the application directory">
+ <mkdir dir="${war.dir}/WEB-INF"/>
+ <copy todir="${war.dir}">
+ <fileset dir="html">
+ <exclude name="**/.git/**"/>
+ <exclude name="**/.svn/**"/>
+ <exclude name="**/*~"/>
+ </fileset>
+ </copy>
+ <copy todir="${war.dir}/WEB-INF">
+ <fileset dir="src/WEB-INF">
+ <include name="*.xml"/>
+ </fileset>
+ </copy>
+ <enhance_war war="${war.dir}"/>
+ </target>
+
+ <target name="enhance" depends="compile"
+ description="Enhance the classes after compilation">
+ <enhance_war war="${war.dir}"/>
+ </target>
+
+ <target name="compile"
+ description="Compile the application servlet code">
+ <mkdir dir="${war.dir}/WEB-INF/classes"/>
+ <mkdir dir="${war.dir}/WEB-INF/lib"/>
+ <javac srcdir="src" destdir="${war.dir}/WEB-INF/classes">
+ <classpath>
+ <fileset dir="${appengine.sdk}/lib/user">
+ <include name="*.jar"/>
+ </fileset>
+ <fileset dir="${appengine.sdk}/lib/shared">
+ <include name="*.jar"/>
+ </fileset>
+ </classpath>
+ </javac>
+ </target>
+
+ <target name="clean"
+ description="Force a clean slate to rebuild">
+ <delete dir="${war.dir}"/>
+ </target>
+
+ <target name="runserver" depends="war"
+ description="Run the dev_appserver">
+ <dev_appserver war="${war.dir}" port="${http.port}"/>
+ </target>
+
+ <target name="dev_appserver" depends="runserver"/>
+
+ <target name="debug" depends="war"
+ description="Launches dev_appserver with remote debugging enabled">
+ <echo message="Launching dev_appserver on Web port ${http.port}, Java remote debug port ${debug.port}"/>
+ <dev_appserver war="${war.dir}" port="${http.port}">
+ <options>
+ <arg value="--jvm_flag=-Xdebug"/>
+ <arg value="--jvm_flag=-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=${debug.port}"/>
+ </options>
+ </dev_appserver>
+ </target>
+
+
+
+ <target name="update" depends="war"
+ description="Uploads the application, including indexes">
+ <appcfg action="update" war="${war.dir}"/>
+ </target>
+
+ <target name="update_indexes" depends="war"
+ description="Uploads only the application's indexes">
+ <appcfg action="update_indexes" war="${war.dir}"/>
+ </target>
+
+ <target name="rollback" depends="war"
+ description="Rolls back any in-progress application update">
+ <appcfg action="rollback" war="${war.dir}"/>
+ </target>
+
+ <target name="request_logs"
+ description="Downloads the application's logs">
+ <appcfg action="request_logs" war="${war.dir}">
+ <options>
+ <arg value="--num_days=${log.days}"/>
+ </options>
+ <args>
+ <arg value="${log.file}"/>
+ </args>
+ </appcfg>
+ </target>
+
+</project>
diff --git a/src/META-INF/jdoconfig.xml b/src/META-INF/jdoconfig.xml
new file mode 100644
index 0000000..ae76ee7
--- /dev/null
+++ b/src/META-INF/jdoconfig.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">
+
+ <persistence-manager-factory name="transactions-optional">
+ <property name="javax.jdo.PersistenceManagerFactoryClass" value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
+ <property name="javax.jdo.option.ConnectionURL" value="appengine"/>
+ <property name="javax.jdo.option.NontransactionalRead" value="true"/>
+ <property name="javax.jdo.option.NontransactionalWrite" value="true"/>
+ <property name="javax.jdo.option.RetainValues" value="true"/>
+ <property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
+ </persistence-manager-factory>
+</jdoconfig>
diff --git a/src/WEB-INF/appengine-web.xml b/src/WEB-INF/appengine-web.xml
new file mode 100644
index 0000000..d61873a
--- /dev/null
+++ b/src/WEB-INF/appengine-web.xml
@@ -0,0 +1,4 @@
+<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
+ <application>linoquotes</application>
+ <version>1</version>
+</appengine-web-app>
diff --git a/src/WEB-INF/web.xml b/src/WEB-INF/web.xml
new file mode 100644
index 0000000..067332b
--- /dev/null
+++ b/src/WEB-INF/web.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<web-app
+ xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ version="2.5">
+ <display-name>Quotes fra #linux.no på freenode</display-name>
+
+ <servlet>
+ <servlet-name>linoquotes</servlet-name>
+ <servlet-class>lq.ViewQuotes</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>linoquotes</servlet-name>
+ <url-pattern>/quotes</url-pattern>
+ </servlet-mapping>
+
+ <servlet>
+ <servlet-name>redirect-to-quotes</servlet-name>
+ <servlet-class>lq.Redirect</servlet-class>
+ <init-param>
+ <param-name>destination</param-name>
+ <param-value>/quotes</param-value>
+ </init-param>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>redirect-to-quotes</servlet-name>
+ <url-pattern>/</url-pattern>
+ </servlet-mapping>
+</web-app>
diff --git a/src/log4j.properties b/src/log4j.properties
new file mode 100644
index 0000000..2768524
--- /dev/null
+++ b/src/log4j.properties
@@ -0,0 +1,24 @@
+# This was copied from the SDK's config/user/log4j.properties file.
+#
+# To use this configuration, deploy it into your application's WEB-INF/classes
+# directory. You are also encouraged to edit it as you like.
+
+# Configure the console as our one appender
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] - %m%n
+
+# tighten logging on the DataNucleus Categories
+log4j.category.DataNucleus.JDO=WARN, A1
+log4j.category.DataNucleus.Persistence=WARN, A1
+log4j.category.DataNucleus.Cache=WARN, A1
+log4j.category.DataNucleus.MetaData=WARN, A1
+log4j.category.DataNucleus.General=WARN, A1
+log4j.category.DataNucleus.Utility=WARN, A1
+log4j.category.DataNucleus.Transaction=WARN, A1
+log4j.category.DataNucleus.Datastore=WARN, A1
+log4j.category.DataNucleus.ClassLoading=WARN, A1
+log4j.category.DataNucleus.Plugin=WARN, A1
+log4j.category.DataNucleus.ValueGeneration=WARN, A1
+log4j.category.DataNucleus.Enhancer=WARN, A1
+log4j.category.DataNucleus.SchemaTool=WARN, A1
diff --git a/src/logging.properties b/src/logging.properties
new file mode 100644
index 0000000..5cf1d10
--- /dev/null
+++ b/src/logging.properties
@@ -0,0 +1,27 @@
+# This was copied from the SDK's config/user/logging.properties file.
+#
+# To use this configuration, copy it into your application's WEB-INF
+# folder and add the following to your appengine-web.xml:
+#
+# <system-properties>
+# <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
+# </system-properties>
+#
+
+# Set the default logging level for all loggers to WARNING
+.level = WARNING
+
+# Set the default logging level for ORM, specifically, to WARNING
+DataNucleus.JDO.level=WARNING
+DataNucleus.Persistence.level=WARNING
+DataNucleus.Cache.level=WARNING
+DataNucleus.MetaData.level=WARNING
+DataNucleus.General.level=WARNING
+DataNucleus.Utility.level=WARNING
+DataNucleus.Transaction.level=WARNING
+DataNucleus.Datastore.level=WARNING
+DataNucleus.ClassLoading.level=WARNING
+DataNucleus.Plugin.level=WARNING
+DataNucleus.ValueGeneration.level=WARNING
+DataNucleus.Enhancer.level=WARNING
+DataNucleus.SchemaTool.level=WARNING
diff --git a/src/lq/Redirect.java b/src/lq/Redirect.java
new file mode 100644
index 0000000..b3414bb
--- /dev/null
+++ b/src/lq/Redirect.java
@@ -0,0 +1,23 @@
+package lq;
+
+import java.io.IOException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+
+public class Redirect extends HttpServlet {
+ private String destination;
+
+ @Override
+ public void init(ServletConfig config) throws ServletException {
+ destination = config.getInitParameter("destination");
+ }
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+ throws IOException {
+ resp.sendRedirect(destination);
+ }
+}
diff --git a/src/lq/ViewQuotes.java b/src/lq/ViewQuotes.java
new file mode 100644
index 0000000..cc03f51
--- /dev/null
+++ b/src/lq/ViewQuotes.java
@@ -0,0 +1,14 @@
+package lq;
+
+import java.io.IOException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class ViewQuotes extends HttpServlet {
+ public void doGet(HttpServletRequest req, HttpServletResponse resp)
+ throws IOException {
+ resp.setContentType("text/plain");
+ resp.getWriter().println("Hello, World!");
+ }
+}
diff --git a/src/org/example/HelloAppEngineServlet.java b/src/org/example/HelloAppEngineServlet.java
new file mode 100644
index 0000000..9b179fd
--- /dev/null
+++ b/src/org/example/HelloAppEngineServlet.java
@@ -0,0 +1,12 @@
+package org.example;
+
+import java.io.IOException;
+import javax.servlet.http.*;
+
+public class HelloAppEngineServlet extends HttpServlet {
+ public void doGet(HttpServletRequest req, HttpServletResponse resp)
+ throws IOException {
+ resp.setContentType("text/plain");
+ resp.getWriter().println("Hello, world");
+ }
+} \ No newline at end of file