Cleaned up Atmosphere integration but JAXB classloader problem persists...

This commit is contained in:
Viktor Klang 2009-07-27 20:28:44 +02:00
parent 3e4d6f3b59
commit 6fcf2a2375
67 changed files with 144 additions and 83 deletions

View file

@ -15,64 +15,73 @@ mkdir $BASE_DIR/storage/commitlog
mkdir $BASE_DIR/storage/data
mkdir $BASE_DIR/storage/system
CLASSPATH=$BASE_DIR/config:$BASE_DIR/deploy/root:$BASE_DIR/deploy/root/META-INF:$BASE_DIR/deploy/root/WEB-INF/classes
CLASSPATH=$CLASSPATH:$BASE_DIR/config
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/akka-kernel-0.5.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/akka-util-java-0.5.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/akka-util-java.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/antlr-3.1.3.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/aopalliance-1.0.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/asm-3.1.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/aspectwerkz-nodeps-jdk5-2.1.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/camel-core-2.0-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/cassandra-0.4.0-dev.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/cglib-2.2.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/commons-cli-1.1.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/commons-collections-3.2.1.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/commons-io-1.3.2.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/commons-javaflow-1.0-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/commons-lang-2.4.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/commons-logging-1.0.4.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/commons-math-1.1.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/configgy-1.3.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/google-collect-snapshot-20090211.jar
#CLASSPATH=$CLASSPATH:$BASE_DIR/lib/grizzly-framework-1.8.6.3.jar
#CLASSPATH=$CLASSPATH:$BASE_DIR/lib/grizzly-http-1.8.6.3.jar
#CLASSPATH=$CLASSPATH:$BASE_DIR/lib/grizzly-http-servlet-1.8.6.3.jar
#CLASSPATH=$CLASSPATH:$BASE_DIR/lib/grizzly-http-utils-1.8.6.3.jar
#CLASSPATH=$CLASSPATH:$BASE_DIR/lib/grizzly-servlet-webserver-1.8.6.3.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/grizzly-comet-webserver-1.9.15b.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/guice-core-2.0-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/guice-jsr250-2.0-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/high-scale-lib.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/jackson-core-asl-1.1.0.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/jackson-mapper-asl-1.1.0.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/jersey-client-1.1.0-ea.jar
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/atmosphere-core-0.3-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/atmosphere-portable-runtime-0.3-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/atmosphere-compat-0.3-SNAPSHOT.jar
#CLASSPATH=$CLASSPATH:$BASE_DIR/lib/atmosphere-grizzly-adapter-0.3-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
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/protobuf-java-2.0.3.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/scala-library-2.7.5.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/servlet-api-2.5.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/slf4j-api-1.4.3.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/slf4j-log4j12-1.4.3.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/stringtemplate-3.0.jar
CLASSPATH=$CLASSPATH:$BASE_DIR/lib/zookeeper-3.1.0.jar
LIB_DIR=$BASE_DIR/lib
CLASSPATH=$BASE_DIR/config
CLASSPATH=$CLASSPATH:$LIB_DIR/akka-kernel-0.5.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/akka-util-java-0.5.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/akka-util-java.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/antlr-3.1.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/aopalliance-1.0.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/asm-3.1.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/aspectwerkz-nodeps-jdk5-2.1.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/camel-core-2.0-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/cassandra-0.4.0-dev.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/cglib-2.2.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/commons-cli-1.1.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/commons-collections-3.2.1.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/commons-io-1.3.2.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/commons-javaflow-1.0-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/commons-lang-2.4.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/commons-logging-1.0.4.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/commons-math-1.1.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/configgy-1.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/google-collect-snapshot-20090211.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-framework-1.8.6.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-http-1.8.6.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-http-servlet-1.8.6.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-http-utils-1.8.6.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-servlet-webserver-1.8.6.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-comet-1.8.6.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-comet-webserver-1.8.6.3.jar
#CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-framework-1.9.9.jar
#CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-http-1.9.9.jar
#CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-http-servlet-1.9.9.jar
#CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-http-utils-1.9.2.jar
#CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-servlet-webserver-1.9.9.jar
#CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-comet-webserver-1.9.9.jar
#CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-webserver-1.9.9.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/guice-core-2.0-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/guice-jsr250-2.0-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/high-scale-lib.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/jackson-core-asl-1.1.0.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/jackson-mapper-asl-1.1.0.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/jersey-client-1.1.0-ea.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/jersey-core-1.0.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/jersey-json-1.0.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/jersey-server-1.0.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/jersey-scala-1.1.2-ea-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/atmosphere-core-0.3-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/atmosphere-portable-runtime-0.3-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/atmosphere-compat-0.3-SNAPSHOT.jar
#CLASSPATH=$CLASSPATH:$LIB_DIR/atmosphere-grizzly-adapter-0.3-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/JSAP-2.1.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/jsr250-api-1.0.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/jsr311-api-1.0.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/libfb303.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/libthrift.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/lift-webkit-1.1-M3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/lift-util-1.1-M3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/log4j-1.2.15.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/lucene-core-2.2.0.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/netty-3.1.0.CR1.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/protobuf-java-2.0.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/scala-library-2.7.5.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/servlet-api-2.5.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/slf4j-api-1.4.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/slf4j-log4j12-1.4.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/stringtemplate-3.0.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/zookeeper-3.1.0.jar
# Add for debugging: -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 \
# To have Akka dump the generated classes, add the '-Daspectwerkz.transform.dump=*' option and it will dump classes to $BASE_DIR/_dump
@ -92,5 +101,7 @@ JVM_OPTS=" \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false"
# -Djava.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory
#$JAVA_HOME/bin/java $JVM_OPTS -cp $CLASSPATH se.scalablesolutions.akka.Boot se.scalablesolutions.akka.kernel.Kernel ${1}
$JAVA_HOME/bin/java $JVM_OPTS -cp $CLASSPATH se.scalablesolutions.akka.kernel.Kernel ${1}

Binary file not shown.

Binary file not shown.

View file

@ -1,5 +0,0 @@
<atmosphere-handlers>
<atmosphere-handler context-root="" class-name="org.atmosphere.handler.ReflectorServletProcessor">
<property name="servletClass" value="se.scalablesolutions.akka.kernel.jersey.AkkaServlet"/>
</atmosphere-handler>
</atmosphere-handlers>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!-- <Loader className="org.atmosphere.util.AtmosphereClassloader"/> -->
<Loader delegate="true"/>
</Context>

View file

@ -113,7 +113,8 @@
<dependency>
<groupId>com.sun.grizzly</groupId>
<artifactId>grizzly-comet-webserver</artifactId>
<version>1.9.15b</version>
<!--<version>1.9.15b</version>-->
<version>1.8.6.3</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
@ -221,7 +222,7 @@
<execution>
<goals>
<goal>compile</goal>
<!--<goal>testCompile</goal>-->
<goal>testCompile</goal>
</goals>
</execution>
</executions>

View file

@ -36,7 +36,6 @@ object Kernel extends Logging {
val REST_HOSTNAME = kernel.Kernel.config.getString("akka.rest.hostname", "localhost")
val REST_URL = "http://" + REST_HOSTNAME
val REST_PORT = kernel.Kernel.config.getInt("akka.rest.port", 9998)
val REST_ROOT = System.getenv("AKKA_HOME") + "/deploy/root/"
// FIXME add API to shut server down gracefully
private var remoteServer: RemoteServer = _
@ -129,16 +128,13 @@ object Kernel extends Logging {
val adapter = new ServletAdapter()
//val servlet = org.atmosphere.cpr.AtmosphereServlet
//val servlet = new AkkaServlet()
//adapter.addInitParameter("bootloader", config.getString("akka.lift.bootloader").getOrElse(null))
adapter.addInitParameter("com.sun.jersey.spi.container.ResourceFilters","org.atmosphere.core.AtmosphereFilter")
adapter.addInitParameter("com.sun.jersey.config.feature.Redirect", "true")
adapter.addInitParameter("com.sun.jersey.config.feature.ImplicitViewables", "true")
adapter.setServletInstance(new AkkaCometServlet)
adapter.setContextPath(uri.getPath)
adapter.setRootFolder(REST_ROOT)
adapter.setRootFolder(System.getenv("AKKA_HOME") + "/deploy/root")
log.info("REST service root path: [" + adapter.getRootFolder + "] and context path [" + adapter.getContextPath + "] ")

View file

@ -13,17 +13,28 @@ import com.sun.jersey.spi.container.servlet.ServletContainer
import com.sun.jersey.spi.container.WebApplication
import javax.servlet.{ServletConfig}
import javax.servlet.http.{HttpServletRequest,HttpServletResponse}
import org.atmosphere.cpr.{AtmosphereServlet,AtmosphereServletProcessor,AtmosphereEvent}
import org.atmosphere.cpr.AtmosphereServlet.{AtmosphereHandlerWrapper}
import org.atmosphere.container.GrizzlyCometSupport
import org.atmosphere.handler.ReflectorServletProcessor
import org.atmosphere.core.{JerseyBroadcaster}
import java.util.{HashSet, HashMap}
import java.net.{URL,URLClassLoader}
import java.util.HashSet
import java.io.{InputStream}
import scala.collection.jcl.Conversions._
class AkkaServlet extends ServletContainer{
class AkkaServlet extends ServletContainer with AtmosphereServletProcessor with Logging {
override def initiate(rc: ResourceConfig, wa: WebApplication) = {
// super.initiate(rc, wa)
log.info("Initializing akka servlet")
Kernel.boot // will boot if not already booted by 'main'
val configurators = ConfiguratorRepository.getConfiguratorsFor(getServletContext);
val configurators = ConfiguratorRepository.getConfiguratorsFor(getServletContext)
val set = new HashSet[Class[_]]
for {
conf <- configurators
@ -34,17 +45,69 @@ class AkkaServlet extends ServletContainer{
new DefaultResourceConfig(set),
new ActorComponentProviderFactory(configurators))
}
override def onMessage(event : AtmosphereEvent[HttpServletRequest,HttpServletResponse]) : AtmosphereEvent[_,_] =
{
log.info("AkkaServlet:onMessage")
var isUsingStream = false
try {
event.getResponse.getWriter
} catch {
case e: IllegalStateException => isUsingStream = true
}
if (isUsingStream){
event.getResponse.getOutputStream.write(event.getMessage.toString.getBytes);
event.getResponse.getOutputStream.flush
} else {
event.getResponse.getWriter.write(event.getMessage.toString)
event.getResponse.getWriter.flush
}
event
}
override def onEvent(event : AtmosphereEvent[HttpServletRequest,HttpServletResponse]) : AtmosphereEvent[_,_] =
{
event.getRequest.setAttribute(classOf[org.atmosphere.cpr.AtmosphereEvent[_,_]].getName, event)
event.getRequest.setAttribute(classOf[AkkaServlet].getName, this)
log.info("AkkaServlet:onEvent:beforeService")
service(event.getRequest, event.getResponse)
log.info("AkkaServlet:onEvent:afterService")
event
}
}
class AkkaCometServlet extends org.atmosphere.cpr.AtmosphereServlet with Logging
{
override def init(sconf : ServletConfig) = {
val url = sconf.getServletContext().getResource("/WEB-INF/classes/")
val urlC = new URLClassLoader(Array(url),Thread.currentThread().getContextClassLoader())
log.info("initializing Akka comet servlet")
val cfg = new AtmosphereConfig
loadAtmosphereDotXml(sconf.getServletContext.getResourceAsStream("META-INF/atmosphere.xml"), urlC);
atmosphereHandlers = new java.util.HashMap[String, AtmosphereHandlerWrapper] {
override def get(s : Object) : AtmosphereHandlerWrapper = {
log.info("get handler for: " + s)
super.get("")
}
}
super.init(sconf)
atmosphereHandlers.put("", new AtmosphereHandlerWrapper(new AkkaServlet,new JerseyBroadcaster()))
super.setCometSupport(new GrizzlyCometSupport(cfg))
getCometSupport.init(sconf)
for(e <- atmosphereHandlers.entrySet){
val h = e.getValue.atmosphereHandler
if(h.isInstanceOf[AtmosphereServletProcessor])
(h.asInstanceOf[AtmosphereServletProcessor]).init(sconf)
}
}
override def loadAtmosphereDotXml(is : InputStream, urlc :URLClassLoader)
{
log.info("hiding Atmosphere.xml")
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
libs/JSAP-2.1.jar Normal file

Binary file not shown.

BIN
libs/akka-kernel-0.5.jar Normal file

Binary file not shown.

BIN
libs/akka-util-java-0.5.jar Normal file

Binary file not shown.

BIN
libs/antlr-3.1.3.jar Normal file

Binary file not shown.

BIN
libs/aopalliance-1.0.jar Normal file

Binary file not shown.

BIN
libs/asm-3.1.jar Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
libs/cglib-2.2.jar Normal file

Binary file not shown.

BIN
libs/commons-cli-1.1.jar Normal file

Binary file not shown.

Binary file not shown.

BIN
libs/commons-io-1.3.2.jar Normal file

Binary file not shown.

Binary file not shown.

BIN
libs/commons-lang-2.4.jar Normal file

Binary file not shown.

Binary file not shown.

BIN
libs/commons-math-1.1.jar Normal file

Binary file not shown.

BIN
libs/configgy-1.3.jar Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
libs/high-scale-lib.jar Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
libs/jersey-core-1.0.3.jar Normal file

Binary file not shown.

BIN
libs/jersey-json-1.0.3.jar Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
libs/jsr250-api-1.0.jar Normal file

Binary file not shown.

BIN
libs/jsr311-api-1.0.jar Normal file

Binary file not shown.

BIN
libs/junit-4.5.jar Normal file

Binary file not shown.

BIN
libs/junit4runner-1.0.jar Normal file

Binary file not shown.

BIN
libs/libfb303.jar Normal file

Binary file not shown.

BIN
libs/libthrift.jar Normal file

Binary file not shown.

BIN
libs/log4j-1.2.15.jar Normal file

Binary file not shown.

BIN
libs/lucene-core-2.2.0.jar Normal file

Binary file not shown.

BIN
libs/netty-3.1.0.CR1.jar Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
libs/scalatest-0.9.5.jar Normal file

Binary file not shown.

BIN
libs/servlet-api-2.5.jar Normal file

Binary file not shown.

BIN
libs/slf4j-api-1.4.3.jar Normal file

Binary file not shown.

Binary file not shown.

BIN
libs/stringtemplate-3.0.jar Normal file

Binary file not shown.

BIN
libs/zookeeper-3.1.0.jar Normal file

Binary file not shown.