开发者

How to run Jetty on IKVM?

开发者 https://www.devze.com 2023-03-12 07:56 出处:网络
I am new in jetty. I am trying to run Jetty with IKVM. However, it throws exception. I am not sure what should I do.

I am new in jetty. I am trying to run Jetty with IKVM. However, it throws exception. I am not sure what should I do.

alex@AlexUbuntu:/usr/share/jetty$ ikvm -jar start.jar
5 [main] INFO org.mortbay.log - Logging to org.slf4j.impl.SimpleLogger(org.mortbay.log) via org.mortbay.log.Slf4jLog
java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Method.java:
    at org.mortbay.start.Main.invokeMain(Main.java:179)
    at org.mortbay.start.Main.start(Main.java:508)
    at org.mortbay.start.Main.start(Main.java:439)
    at org.mortbay.start.Main.main(Main.java:99)
Caused by: cli.System.TypeLoadException: Could not load type 'org.apache.xerces.util.NamespaceSupport' from assembly 'ikvm_dynamic_assembly__40326550, Version=2011.611.1039.16726, Culture=neutral, PublicKeyToken=null'.
    at org.apache.xerces.parsers.XIncludeAwareParserConfiguration.<init>(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:517)
    at java.lang.Class.newInstance0(Class.java:333)
    at java.lang.Class.newInstance(Class.java:320)
    at org.apache.xerces.parsers.ObjectFactory.newInstance(Unknown Source)
    at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
    at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
    at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source)
    at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.<init>(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl.<init>(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParser(Unknown Source)
    at org.mortbay.xml.XmlParser.setValidating(XmlParser.java)
    at org.mortbay.xml.XmlParser.<init>(XmlParser.java:68)
    at org.mortbay.xml.XmlConfiguration.initParser(XmlConfiguration.java)
    at org.mortbay.xml.XmlConfiguration.<init>(XmlConfiguration.java:105)
    at org.mortbay.xml.XmlConfig开发者_运维知识库uration.main(XmlConfiguration.java:958)
    ... 5 more

It seems that I need to install some external libraries in order to make it works. But what should I need to install.

The environment is fresh and clean:

Ubuntu 11.04
IKVM 0.40.0.1
Java 1.6.0_22
Mono 2.6.7

Update on 28 June 2010

I think I make it works. But I haven't try loading .NET classes in jetty. By the way, I used a dirty method that I replaced /usr/bin/java and /usr/lib/jvm/default-jvm/java with ikvm.exe. So everytime when I type java that actually is IKVM.

I will try to load .NET classes in jetty. But I am not familiar with jetty so I may take sometime.

Update on 1 July 2010

I have tried to load a .NET class. However, finally I got an error message.

HTTP ERROR 500

Problem accessing /hello/servlet. Reason:

    ikvmstub generated stubs can only be used on IKVM.NET
Caused by:

java.lang.UnsatisfiedLinkError: ikvmstub generated stubs can only be used on IKVM.NET
    at cli.CSharpClass.<init>(Unknown Source)
    at HelloServlet.doPost(HelloServlet.java:28)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
    at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)


Can you run Jetty with 'java -jar start.jar'?

I suspect you need at least a few base JAR files for jetty even if it's classloader dynamically loads everything that is needed. It looks like it is failing in the log initialization.

Add the xerces JAR file to the classpath when running IKVM.

 ikvm -cp .:xerces.jar -jar startup.jar

Update

I just looked through jetty.sh and there are a few things the script file sets up. You'll need to go through that file and determine what you need out of it, or replace all the instances of java with ikvm and be aware that Jetty also uses tools.jar


The jar files that you generate with ikvmstub are only for the java compiler and not for the runtime. The java compiler can nor work with .NET dlls. For the runtime you need to use the dlls directly.

We use the jetty without problems with IKVM but we use a newer version 0.46. The simplest is you build all jar files in one step with a shared classloader. See the ikvm wiki for details.

0

精彩评论

暂无评论...
验证码 换一张
取 消