Hi, there have been some changes on Pax-Web for a JDBCSessionManager. Take a look at [1], though those fixes where done on the 3.0 line of Pax-Web which will be included in Karaf 3.0
regards, Achim [1] - http://team.ops4j.org/browse/PAXWEB-463 2013/1/3 Vincenzo Laudizio <[email protected]> > Hi Achim, > > thanks for replying me. > I explain in details why I need to configure Jetty in this way. > The goal of my test is to create a cluster of servicemix instances where > the Jetty servers can have shared sessions. > A possible solution for achieving this with a standalone Jetty is to > modify the jetty.xml by adding the following statements > > <Set name="sessionIdManager"> > <New id="jdbcidmgr" > class="org.eclipse.jetty.**server.session.**JDBCSessionIdManager"> > <Arg> > <Ref id="Server"/> > </Arg> > <Set name="workerName">jetty-node1<**/Set> > <Set name="DatasourceName">jdbc/**MyDatasource</Set> > <Set name="scavengeInterval">60</**Set> > </New> > </Set> > > > <New id="DSTest" class="org.eclipse.jetty.plus.**jndi.Resource"> > <Arg/> > <Arg>jdbc/MyDatasource</Arg> > > <Arg> > <New > class="com.mysql.jdbc.jdbc2.**optional.**MysqlConnectionPoolDataSource" > **> > <Set > name="Url">jdbc:mysql://**localhost:3306/sessions</Set> > <Set name="User">root</Set> > <Set name="Password">root</Set> > </New> > </Arg> > </New> > > defining a SessionManager, linked to a DataSource (registered as a JNDI > resource), that can be used by the web applications to retrieve the shared > sessions (stored on a DB). > As said in the previous mail, I got a Config error during the Jetty > startup when using the above configuration in the jetty.xml file. > > I tried to implement your proposal as well. I registered the DataSource as > a JNDI resource by creating and deploying the following blueprint xml file > > <blueprint > xmlns="http://www.osgi.org/**xmlns/blueprint/v1.0.0<http://www.osgi.org/xmlns/blueprint/v1.0.0> > "> > <bean class="com.mysql.jdbc.jdbc2.**optional.MysqlDataSource" > id="datasourceBean"> > <property name="serverName" value="localhost"></property> > <property name="databaseName" value="database"></property> > <property name="port" value="3306"></property> > <property name="user" value="********"></property> > <property name="password" value="********"></property> > </bean> > <service id="datasourceService" > interface="javax.sql.**DataSource" ref="datasourceBean"> > <service-properties> > <entry key="osgi.jndi.service.name" > value="MyDataSource"></entry> > </service-properties> > </service> > </blueprint> > > and then I added the following statement only inside the jetty.xml file > > <Set name="sessionIdManager"> > <New id="jdbcidmgr" > class="org.eclipse.jetty.**server.session.**JDBCSessionIdManager"> > <Arg> > <Ref id="Server"/> > </Arg> > <Set name="workerName">jetty-node1<**/Set> > <Set > name="DatasourceName">osgi:**services/javax.sql.DataSource/**( > osgi.jndi.service.name=**MyDataSource)</Set> > > <Set name="scavengeInterval">60</**Set> > </New> > </Set> > > In this case I got an exception when Jetty tries to create the > /SessionManager/. Following the Stacktrace: > > javax.naming.**NoInitialContextException: Cannot instantiate class: > org.eclipse.jetty.jndi.**InitialContextFactory [Root exception is > java.lang.**ClassNotFoundException: > org.eclipse.jetty.jndi.**InitialContextFactory] > at > javax.naming.spi.**NamingManager.**getInitialContext(** > NamingManager.java:657)[:1.6.**0_37] > > at > javax.naming.InitialContext.**getDefaultInitCtx(** > InitialContext.java:288)[:1.6.**0_37] > > at > javax.naming.InitialContext.**init(InitialContext.java:223)[** > :1.6.0_37] > at > javax.naming.InitialContext.<**init>(InitialContext.java:175)** > [:1.6.0_37] > at > org.eclipse.jetty.server.**session.JDBCSessionIdManager.** > initializeDatabase(**JDBCSessionIdManager.java:459)** > [107:org.eclipse.jetty.server:**7.4.5.v20110725] > > at > org.eclipse.jetty.server.**session.JDBCSessionIdManager.** > doStart(JDBCSessionIdManager.**java:407)[107:org.eclipse.** > jetty.server:7.4.5.v20110725] > > at > org.eclipse.jetty.util.**component.AbstractLifeCycle.** > start(AbstractLifeCycle.java:**58)[119:org.eclipse.jetty.** > util:7.4.5.v20110725] > > at > org.eclipse.jetty.util.**component.AggregateLifeCycle.** > doStart(AggregateLifeCycle.**java:41)[119:org.eclipse.** > jetty.util:7.4.5.v20110725] > > at > org.eclipse.jetty.server.**handler.AbstractHandler.** > doStart(AbstractHandler.java:**50)[107:org.eclipse.jetty.** > server:7.4.5.v20110725] > > at > org.eclipse.jetty.server.**handler.HandlerWrapper.** > doStart(HandlerWrapper.java:**90)[107:org.eclipse.jetty.** > server:7.4.5.v20110725] > > at > org.eclipse.jetty.server.**Server.doStart(Server.java:** > 258)[107:org.eclipse.jetty.**server:7.4.5.v20110725] > > at > org.eclipse.jetty.util.**component.AbstractLifeCycle.** > start(AbstractLifeCycle.java:**58)[119:org.eclipse.jetty.** > util:7.4.5.v20110725] > > at > org.ops4j.pax.web.service.**jetty.internal.**JettyServerImpl.start(** > JettyServerImpl.java:98)[122:**org.ops4j.pax.web.pax-web-**jetty:1.0.7] > > at > org.ops4j.pax.web.service.**jetty.internal.** > ServerControllerImpl$Stopped.**start(ServerControllerImpl.** > java:356)[122:org.ops4j.pax.**web.pax-web-jetty:1.0.7] > > at > org.ops4j.pax.web.service.**jetty.internal.** > ServerControllerImpl.start(**ServerControllerImpl.java:67)[** > 122:org.ops4j.pax.web.pax-web-**jetty:1.0.7] > > at > org.ops4j.pax.web.service.**jetty.internal.**ServerControllerImpl$** > Unconfigured.configure(**ServerControllerImpl.java:510)** > [122:org.ops4j.pax.web.pax-**web-jetty:1.0.7] > > at > org.ops4j.pax.web.service.**jetty.internal.**ServerControllerImpl.** > configure(**ServerControllerImpl.java:84)[**122:org.ops4j.pax.web.pax-web- > **jetty:1.0.7] > > at > org.ops4j.pax.web.service.**internal.Activator$2.updated(** > Activator.java:150)[124:org.**ops4j.pax.web.pax-web-runtime:**1.0.7] > > at > org.apache.felix.cm.impl.**ConfigurationManager$** > ManagedServiceUpdate.run(**ConfigurationManager.java:** > 1160)[5:org.apache.felix.**configadmin:1.2.8] > > at > org.apache.felix.cm.impl.**UpdateThread.run(UpdateThread.** > java:104)[5:org.apache.felix.**configadmin:1.2.8] > > at java.lang.Thread.run(Thread.**java:662)[:1.6.0_37] > Caused by: java.lang.**ClassNotFoundException: > org.eclipse.jetty.jndi.**InitialContextFactory > at > java.net.URLClassLoader$1.run(**URLClassLoader.java:202)[:1.6.**0_37] > at java.security.**AccessController.doPrivileged(**Native > Method)[:1.6.0_37] > at > java.net.URLClassLoader.**findClass(URLClassLoader.java:** > 190)[:1.6.0_37] > at > java.lang.ClassLoader.**loadClass(ClassLoader.java:**306)[:1.6.0_37] > at > sun.misc.Launcher$**AppClassLoader.loadClass(** > Launcher.java:301)[:1.6.0_37] > > at > java.lang.ClassLoader.**loadClass(ClassLoader.java:**247)[:1.6.0_37] > at java.lang.Class.forName0(**Native Method)[:1.6.0_37] > at java.lang.Class.forName(Class.**java:247)[:1.6.0_37] > at > com.sun.naming.internal.**VersionHelper12.loadClass(** > VersionHelper12.java:46)[:1.6.**0_37] > > at > javax.naming.spi.**NamingManager.**getInitialContext(** > NamingManager.java:654)[:1.6.**0_37] > > ... 20 more > > This is very odd since the missing class > (/org.eclipse.jetty.jndi.**InitialContextFactory/) > is owned by the Active "Jetty :: JNDI Naming (7.4.5.v20110725)" bundle that > properly exports the package /org.eclipse.jetty.jndi/ containing the > missing class. > I think that the Config error I face when using the first approach may be > related to the above issue. > Any ideas are welcome. > > Regards, > Vincenzo > > Il 02/01/2013 21:40, Achim Nierbeck ha scritto: > >> Well the jetty in ServiceMix/Karaf does work quite differently compared to >> a standalone. >> So this doesn't necessarily work. But since you are using a OSGi >> container, >> why don't you reference your Connection pool via services? >> If JNDI is required you still can use Aries to provide it as a JNDI >> service. >> >> Regards, Achim >> >> >> 2013/1/2 Vincenzo Laudizio <[email protected]> >> >> Hi, >>> >>> I'm trying to configure the servicemix 4.4.2 embedded Jetty in order to >>> register a Datasource as a JNDI Resource. >>> If I add the following statement: >>> >>> <New id="DSTest" class="org.eclipse.jetty.plus.** >>> **jndi.Resource"> >>> >>> <Arg/> >>> <Arg>jdbc/DSTest</Arg> >>> <Arg> >>> <New >>> class="com.mysql.jdbc.jdbc2.****optional.**** >>> MysqlConnectionPoolDataSource" >>> **> >>> <Set >>> name="Url">jdbc:mysql://****localhost:3306/sessions</Set> >>> >>> <Set name="User">root</Set> >>> <Set name="Password">root</Set> >>> </New> >>> </Arg> >>> </New> >>> >>> >>> in <ServiceMix_Home>/etc/jetty.****xml file and i run servicemix, i get >>> the >>> >>> following error: >>> >>> org.eclipse.jetty.util - 7.4.5.v20110725 | Config error at <New >>> id="DSTest" class="org.eclipse.jetty.plus.****jndi.Resource"> ... >>> >>> >>> This is very odd since the same configuration works well on a standalone >>> Jetty (version 7.4.5.v20110725). >>> >>> Where am I wrong? >>> >>> Vincenzo >>> >>> >>> >>> >>> >> > -- Apache Karaf <http://karaf.apache.org/> Committer & PMC OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer & Project Lead OPS4J Pax for Vaadin <http://team.ops4j.org/wiki/display/PAXVAADIN/Home> Commiter & Project Lead blog <http://notizblog.nierbeck.de/>
