Experimenting trying to get Lift views to work. (And they don't)

This commit is contained in:
Viktor Klang 2009-07-25 21:35:47 +02:00
parent 33b030361c
commit 13bc65142e
13 changed files with 41 additions and 9 deletions

View file

@ -50,11 +50,14 @@ CLASSPATH=$CLASSPATH:$BASE_DIR/lib/jersey-core-1.0.3.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/jersey-json-1.0.3.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/jersey-server-1.0.3.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/jersey-scala-1.1.2-ea-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/jersey-lift-1.1.2-ea-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/JSAP-2.1.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/jsr250-api-1.0.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/jsr311-api-1.0.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/libfb303.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/libthrift.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/lift-webkit-1.1-M3.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/lift-util-1.1-M3.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/log4j-1.2.15.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/lucene-core-2.2.0.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/netty-3.1.0.CR1.jar

View file

@ -6,5 +6,5 @@
<servlet-mapping>
<servlet-name>Akka Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping-->
</servlet-mapping>
</web-app>

Binary file not shown.

Binary file not shown.

View file

@ -130,6 +130,11 @@
<artifactId>jersey-scala</artifactId>
<version>1.1.2-ea-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-lift</artifactId>
<version>1.1.2-ea-SNAPSHOT</version>
</dependency>
<!-- For third-party logging -->
<dependency>

View file

@ -125,9 +125,17 @@ object Kernel extends Logging {
val uri = UriBuilder.fromUri(REST_URL).port(REST_PORT).build()
val adapter = new ServletAdapter
val servlet = new AkkaServlet
adapter.addInitParameter("bootloader", config.getString("akka.lift.bootloader").getOrElse(null))
adapter.addInitParameter("com.sun.jersey.config.feature.Redirect", "true")
adapter.addInitParameter("com.sun.jersey.config.feature.ImplicitViewables", "true")
adapter.setServletInstance(servlet)
adapter.setContextPath(uri.getPath)
//TODO add initialization of Lift (LiftFilter needs initialization)
log.debug("REST service context path: [" + uri.getPath + "]")
val scheme = uri.getScheme
if (!scheme.equalsIgnoreCase("http")) throw new IllegalArgumentException("The URI scheme, of the URI " + REST_URL + ", must be equal (ignoring case) to 'http'")
@ -136,6 +144,7 @@ object Kernel extends Logging {
jerseySelectorThread.setPort(REST_PORT)
jerseySelectorThread.setAdapter(adapter)
jerseySelectorThread.listen
log.info("REST service started successfully. Listening to port [" + REST_PORT + "]")
}

View file

@ -10,12 +10,13 @@ import config.ConfiguratorRepository
import com.sun.jersey.api.core.{DefaultResourceConfig, ResourceConfig}
import com.sun.jersey.spi.container.servlet.ServletContainer
import com.sun.jersey.spi.container.WebApplication
import java.util.HashSet
class AkkaServlet extends ServletContainer {
class AkkaServlet extends ServletContainer{
override def initiate(rc: ResourceConfig, wa: WebApplication) = {
// super.initiate(rc, wa)
Kernel.boot // will boot if not already booted by 'main'
val configurators = ConfiguratorRepository.getConfiguratorsFor(getServletContext);
val set = new HashSet[Class[_]]
@ -26,6 +27,6 @@ class AkkaServlet extends ServletContainer {
wa.initiate(
new DefaultResourceConfig(set),
new ActorComponentProviderFactory(configurators));
new ActorComponentProviderFactory(configurators))
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
lib/lift-util-1.1-M3.jar Normal file

Binary file not shown.

BIN
lib/lift-webkit-1.1-M3.jar Normal file

Binary file not shown.

View file

@ -1,10 +1,13 @@
package sample.scala
import javax.ws.rs.{Path, GET, Produces}
import javax.ws.rs.{Path, GET, Produces,QueryParam,DefaultValue}
import se.scalablesolutions.akka.kernel.state.{TransactionalState, TransactionalMap, CassandraStorageConfig}
import se.scalablesolutions.akka.kernel.actor.{Supervisor, SupervisorFactory, Actor, StartSupervisor}
import se.scalablesolutions.akka.kernel.config.ScalaConfig._
import _root_.scala.xml.{NodeSeq}
import se.scalablesolutions.akka.kernel.util.{Logging}
class Boot {
object factory extends SupervisorFactory {
override def getSupervisorConfig: SupervisorConfig = {
@ -38,22 +41,33 @@ class SimpleService extends Actor {
private val storage = TransactionalState.newPersistentMap(CassandraStorageConfig())
@GET
@Produces(Array("application/xml"))
def count = (this !! Tick).getOrElse(<error>Error in counter</error>)
@Produces(Array("text/html"))
def count(@DefaultValue("unknown") @QueryParam("who") who : String) = {
log.info(who)
(this !! Tick).getOrElse(view(<error>Error in counter</error>))
}
override def receive: PartialFunction[Any, Unit] = {
case Tick => if (hasStartedTicking) {
val counter = storage.get(KEY).get.asInstanceOf[Integer].intValue
storage.put(KEY, new Integer(counter + 1))
reply(<success>Tick: {counter + 1}</success>)
reply(view(<success>Tick: {counter + 1}</success>))
} else {
storage.put(KEY, new Integer(0))
hasStartedTicking = true
reply(<success>Tick: 0</success>)
reply(view(<lift:success>Tick: 0</lift:success>))
}
}
override protected def postRestart(reason: AnyRef, config: Option[AnyRef]) = {
println("Restarting due to: " + reason.asInstanceOf[Exception].getMessage)
}
def view(data : NodeSeq) : NodeSeq = <lift:surround with="default" at="content"> { data } <lift:Howdy.greet/></lift:surround>
}
class Howdy
{
def greet = <h2>Hello mommy</h2>
}