-
Website
http://www.brodwall.com/johannes/blog/ -
Original page
http://www.brodwall.com/johannes/blog/2007/01/20/article-ready-for-edit-embedded-web-integration-testing-with-jetty/ -
Subscribe
All Comments -
Community
-
Top Commenters
-
eirikma
2 comments · 1 points
-
Affordable SEO Services
1 comment · 1 points
-
andreb
1 comment · 1 points
-
thommyb
1 comment · 1 points
-
Andy Palmer
1 comment · 1 points
-
-
Popular Threads
I am however having problems with getting JNID working within Jetty. Can you confirm the quoted code is correct?
I am pretty sure it is correct. But make sure that you use the latest version of this article: http://www.brodwall.com/johannes/blog/2007/02/0...
The code for this particular bit is here: http://svn.brodwall.com/demo/insanejava/trunk/w...
If you still don't have any success, feel free to post the problem here, or send me an email.
The code which retrieves Springs WebApplicatonContext using the jetty server's servlet context was failing. Specifically, the following code was throwing a ClassCastException:
ApplicationContext appctx = WebApplicationContextUtils
.getRequiredWebApplicationContext(servletContext);
The reason being that the Spring's application context was loaded by Jetty's own classloader, hence cannot be used here.
The work around was to set the parentLoaderPriority to true while creating the Jetty server as described here: http://docs.codehaus.org/display/JETTY/Classloa...
eg:
WebAppContext context = new WebAppContext();
context.setParentLoaderPriority(true);
context.setContextPath("/");
context.setWar("path/to/war/or/exploded/war");
jettyServer.setHandler(context);
The errors happens didnt happen on a Windows XP box. But while running our CI builds on a Redhat EL4 box, the classcast exception was thrown.
Redhat EL4
JDK 1.5_07-b3
Jetty-6.1.1
Spring-Framework-2.0.2
Hope this might help someone who runs into the same problem.
-- suresh --
I was not aware of this issue. Thanks for the heads-up and the good feedback. I will have to work on how to integrate it into the text, but I have updated the source code in SVN.
~Johannes
i am new to jetty. may be thats why i could not make the datasource work :(. well, i tried everything i clould. please help me.
here is my detail:
OS: windows vista ultimate
jetty : 7.0.0.pre5
web application base location: $jetty.home/webapps-plus/LSRTest1
database: mysql
command line: java -DOPTIONS=plus,jsp,ext,default -jar start.jar etc/jetty.xml etc/jetty-plus.xml
my jetty-plus.xml:
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure id="Server" class="org.mortbay.jetty.Server">
<Array id="plusConfig" type="java.lang.String">
<Item>org.mortbay.jetty.webapp.WebInfConfiguration</Item>
<Item>org.mortbay.jetty.plus.webapp.EnvConfiguration</Item>
<Item>org.mortbay.jetty.plus.webapp.Configuration</Item>
<Item>org.mortbay.jetty.webapp.JettyWebXmlConfiguration</Item>
<Item>org.mortbay.jetty.webapp.TagLibConfiguration</Item>
</Array>
<Call name="addLifeCycle">
<Arg>
<New class="org.mortbay.jetty.deployer.WebAppDeployer">
<Set name="contexts"><Ref id="Contexts"/></Set>
<Set name="webAppDir"><SystemProperty name="jetty.home" default="."/>/webapps-plus</Set>
<Set name="parentLoaderPriority">false</Set>
<Set name="extract">true</Set>
<Set name="allowDuplicates">false</Set>
<Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set>
<Set name="configurationClasses"><Ref id="plusConfig"/></Set>
</New>
</Arg>
</Call>
</Configure>
my context file ($jetty.home/context/LSRTest1.xml):
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure id='wac' class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="contextPath">/LSRTest1</Set>
<Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps-plus/LSRTest1</Set>
<Set name="descriptor"><SystemProperty name="jetty.home" default="."/>/webapps-plus/LSRTest1/WEB-INF/web.xml</Set>
<Set name="extractWAR">false</Set>
<Set name="copyWebDir">false</Set>
<New id="lsrdb" class="org.mortbay.jetty.plus.naming.Resource">
<Arg><Ref id='wac'/></Arg>
<Arg>java:/comp/env/jdbc/LSRDB</Arg>
<Arg>
<New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
<Set name="Url">jdbc:mysql://localhost:3306/lsrdb?autoReconnect=true</Set>
<Set name="User">root</Set>
<Set name="Password">zp123</Set>
</New>
</Arg>
</New>
</Configure>
my web.xml file ($jetty.home/webapps-plus/LSRTest1/WEB-INF/web.xml):
<?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>LSR Test1 WebApp</display-name>
<context-param>
<param-name>org.mortbay.jetty.servlet.ManagedAttributes</param-name>
<param-value>org.cometd.bayeux,dojox.cometd.bayeux</param-value>
</context-param>
<listener>
<listener-class>lsr.cometd.listener.BayeuxServicesListener</listener-class>
</listener>
<servlet>
<servlet-name>prechat</servlet-name>
<servlet-class>lsr.prechat.PreChatServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>initchat</servlet-name>
<servlet-class>lsr.initchat.InitChatServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>chat</servlet-name>
<servlet-class>org.mortbay.cometd.SuspendingCometdServlet</servlet-class>
<init-param>
<param-name>timeout</param-name>
<param-value>120000</param-value>
</init-param>
<init-param>
<param-name>interval</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>maxInterval</param-name>
<param-value>10000</param-value>
</init-param>
<init-param>
<param-name>multiFrameInterval</param-name>
<param-value>2000</param-value>
</init-param>
<init-param>
<param-name>logLevel</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>directDeliver</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>refsThreshold</param-name>
<param-value>10</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>prechat</servlet-name>
<url-pattern>/prechat/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>initchat</servlet-name>
<url-pattern>/init/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>chat</servlet-name>
<url-pattern>/chat/*</url-pattern>
</servlet-mapping>
<resource-ref>
<res-ref-name>jdbc/LSRDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
i did not modify any other file like etc/jetty.xml. also, i dont have any jetty-web.xml or jetty-env.xml file in $jetty.home/webapps-plus/LSRTest1/WEB-INF directory.
when i use java code like:
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/LSRDB");
i get the following exception:
javax.naming.NameNotFoundException; remaining name 'env/jdbc/LSRDB'
at org.mortbay.naming.NamingContext.lookup(NamingContext.java:634)
at org.mortbay.naming.NamingContext.lookup(NamingContext.java:665)
at org.mortbay.naming.NamingContext.lookup(NamingContext.java:680)
at org.mortbay.naming.java.javaRootURLContext.lookup(javaRootURLContext.java:112)
at javax.naming.InitialContext.lookup(Unknown Source)
at lsr.util.DBConnection.<init>(DBConnection.java:26)
at lsr.initchat.InitChatServlet.getDomainInfo(InitChatServlet.java:126)
at lsr.initchat.InitChatServlet.doGet(InitChatServlet.java:43)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:822)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:229)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:550)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:876)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:535)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:407)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:421)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520)
according to any documentation i find on internet, the above setup is correct. but, i dont know what is wrong here. i am stuck here for 3 days... trying different methods. but, failed in all. please help.
regards,
zp bappi.
My experience is that JNDI is something that is a little tricky to get
right, and I've never used this approach with pre-released versions of
Jetty. I recommend that you try out using Jetty 6.1 or that you post a
question to the Jetty mailing lists, which you can find on
http://docs.codehaus.org/display/JETTY/Jetty+Wiki. I would also
recommend using Java rather than XML to set up Jetty. This will not
necessarily solve you problem, but your cycle time can be quicker.
Good luck.
~Johannes
My experience is that JNDI is something that is a little tricky to get right, and I've never used this approach with pre-released versions of Jetty. I recommend that you try out using Jetty 6.1 or that you post a question to the Jetty mailing lists, which you can find on http://docs.codehaus.org/display/JETTY/Jetty+Wiki. I would also recommend using Java rather than XML to set up Jetty. This will not necessarily solve you problem, but your cycle time can be quicker.