Two points here: 1. What tools you used to genereate this eba? if using eclipse, sugguest you use Rational development tools for OSGi application[1] 2. Your sample's web module sample-web_xxx.jar file structure is not correct, you should put your servlet class into WEB-INF/classes folder
[1] http://www.ibm.com/developerworks/rational/downloads/10/rationaldevtoolsforosgiapplications.html Attached an updated sample for your reference. On Thu, Apr 19, 2012 at 12:42 PM, Michael Chau <[email protected]> wrote: > Sorry, I misunderstood you. Here it is: > > > > On Apr 19, 2012, at 12:41 AM, Forrest Xia wrote: > > Finding the potential error via "SEE" through the text is hard work for me > :) > > Can you just attach your eba here? so that I can quickly have a local try > with your eba. > > On Thu, Apr 19, 2012 at 1:07 PM, Michael Chau <[email protected]> wrote: > >> Thanks for helping me. I'm new to OSGi. Here are my configs and code. >> >> SampleApp >> APPLICATION.MF >> >> Application-Name: sample-app >> Application-SymbolicName: sample-app >> Application-ManifestVersion: 1.0 >> Application-Version: 1.0.0.qualifier >> Application-Content: sample-api;version="1.0.0", >> sample-server;version="1.0.0", >> sample-web;version="1.0.0" >> Manifest-Version: 1.0 >> >> SampleApi >> >> Manifest-Version: 1.0 >> Bundle-ManifestVersion: 2 >> Bundle-Name: sample-api >> Bundle-SymbolicName: sample-api >> Bundle-Version: 1.0.0.qualifier >> Bundle-RequiredExecutionEnvironment: JavaSE-1.6 >> Export-Package: com.sample.api >> >> >> package com.sample.api; >> >> public interface SampleService { >> public String sayHello(String name); >> } >> >> >> SampleServer >> >> Manifest-Version: 1.0 >> Bundle-Blueprint: OSGI-INF/blueprint/*.xml >> Bundle-Version: 1.0.0.qualifier >> Bundle-Name: sample-server >> Bundle-ManifestVersion: 2 >> Import-Package: com.sample.api >> Bundle-SymbolicName: sample-server >> Bundle-RequiredExecutionEnvironment: JavaSE-1.6 >> Export-Package: com.sample.server >> >> Source: >> package com.sample.server; >> >> import com.sample.api.SampleService; >> >> public class SampleServiceImpl implements SampleService { >> >> public String sayHello(String name) { >> // TODO Auto-generated method stub >> return "Hello "+name; >> } >> >> } >> >> **** Blueprint.xml >> >> <?xml version="1.0" encoding="UTF-8"?> >> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> >> <bean id="serviceBean" class="com.sample.server.SampleServiceImpl"/> >> >> <service ref="serviceBean" interface="com.sample.api.SampleService"/> >> >> </blueprint> >> >> SampleWeb >> >> Manifest-Version: 1.0 >> Bundle-ManifestVersion: 2 >> Bundle-Name: sample-web >> Bundle-SymbolicName: sample-web >> Bundle-Version: 1.0.0.qualifier >> Bundle-ClassPath: WEB-INF/classes >> Web-ContextPath: /sample-web >> Import-Package: com.sample.api, >> javax.naming, >> javax.servlet;version="2.5", >> javax.servlet.http;version="2.5" >> Bundle-RequiredExecutionEnvironment: JavaSE-1.6 >> Export-Package: com.sample.client.web >> >> >> package com.sample.client.web; >> >> import java.io.IOException; >> >> import javax.naming.InitialContext; >> import javax.naming.NamingException; >> import javax.servlet.ServletException; >> import javax.servlet.http.HttpServlet; >> import javax.servlet.http.HttpServletRequest; >> import javax.servlet.http.HttpServletResponse; >> >> import com.sample.api.SampleService; >> >> /** >> * Servlet implementation class SampleServlet >> */ >> public class SampleServlet extends HttpServlet { >> private static final long serialVersionUID = 1L; >> >> /** >> * @see HttpServlet#HttpServlet() >> */ >> public SampleServlet() { >> super(); >> // TODO Auto-generated constructor stub >> } >> >> /** >> * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse >> response) >> */ >> protected void doGet(HttpServletRequest request, HttpServletResponse >> response) throws ServletException, IOException { >> // TODO Auto-generated method stub >> SampleService sample = null; >> try { >> InitialContext ic = new InitialContext(); >> sample = (SampleService) ic.lookup("osgi:service/" + >> SampleService.class.getName()); >> response.getOutputStream().println("**** " + sample.sayHello("Sample >> Service")); >> } >> catch (NamingException e) { >> e.printStackTrace(System.out); >> } >> } >> >> /** >> * @see HttpServlet#doPost(HttpServletRequest request, >> HttpServletResponse response) >> */ >> protected void doPost(HttpServletRequest request, HttpServletResponse >> response) throws ServletException, IOException { >> // TODO Auto-generated method stub >> } >> >> } >> >> **** web.xml >> >> <?xml version="1.0" encoding="UTF-8"?> >> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns=" >> http://java.sun.com/xml/ns/javaee" xmlns:web=" >> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation=" >> http://java.sun.com/xml/ns/javaee >> http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version >> ="3.0"> >> <display-name>sample-web</display-name> >> <servlet> >> <display-name>SampleServlet</display-name> >> <servlet-name>SampleServlet</servlet-name> >> <servlet-class>com.sample.client.web.SampleServlet</servlet-class> >> </servlet> >> <servlet-mapping> >> <servlet-name>SampleServlet</servlet-name> >> <url-pattern>/sample</url-pattern> >> </servlet-mapping> >> <welcome-file-list> >> <welcome-file>index.html</welcome-file> >> <welcome-file>index.htm</welcome-file> >> <welcome-file>index.jsp</welcome-file> >> <welcome-file>default.html</welcome-file> >> <welcome-file>default.htm</welcome-file> >> <welcome-file>default.jsp</welcome-file> >> </welcome-file-list> >> </web-app> >> >> >> >> On Apr 18, 2012, at 8:44 PM, Forrest Xia wrote: >> >> Can you attach your sample here for a check? >> >> On Thu, Apr 19, 2012 at 12:43 AM, Michael Chau <[email protected]>wrote: >> >>> I have my SampleApi (interface) exported it. I don't believe I'm >>> suppose to export the implementation (SampleServer) and web bundle(Sample >>> Web). But, i just tried exporting them both just to see if it will work >>> and I'm still getting the same error. I'm somewhat following the >>> CounterApp example. My web bundle is pretty much the same as the >>> CounterWebBundle (same required import packages and no exports). >>> >>> >>> On Apr 18, 2012, at 12:55 AM, Forrest Xia wrote: >>> >>> Have you exported your application classes in Export-Package of >>> MANIFEST.MF? >>> >>> On Wed, Apr 18, 2012 at 3:42 AM, Michael Chau <[email protected]>wrote: >>> >>>> Thanks, Ivan. >>>> >>>> I added the javax.naming to the import and now getting this error: >>>> >>>> 2012-04-18 00:40:53,484 ERROR [WebApplication] Unable to start web >>>> application for bundle sample-web >>>> org.apache.geronimo.common.DeploymentException: Fail to load servlet >>>> class >>>> at >>>> org.apache.geronimo.web25.deployment.merge.annotation.ServletSecurityAnnotationMergeHandler.postProcessWebXmlElement( >>>> ServletSecurityAnnotationMergeHandler.java:79) >>>> at >>>> org.apache.geronimo.web25.deployment.merge.MergeHelper.processWebFragmentsAndAnnotations( >>>> MergeHelper.java:418) >>>> at >>>> org.apache.geronimo.web25.deployment.AbstractWebModuleBuilder.basicInitContext( >>>> AbstractWebModuleBuilder.java:493) >>>> at >>>> org.apache.geronimo.web25.deployment.AbstractWebModuleBuilder.initContext( >>>> AbstractWebModuleBuilder.java:436) >>>> at org.apache.geronimo.osgi.web.extender.WebApplication.doRun( >>>> WebApplication.java:213) >>>> at org.apache.geronimo.osgi.web.extender.WebApplication.run( >>>> WebApplication.java:125) >>>> at java.util.concurrent.Executors$RunnableAdapter.call( >>>> Executors.java:441) >>>> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) >>>> at java.util.concurrent.FutureTask.run(FutureTask.java:138) >>>> at java.util.concurrent.ThreadPoolExecutor$Worker.runTask( >>>> ThreadPoolExecutor.java:886) >>>> at java.util.concurrent.ThreadPoolExecutor$Worker.run( >>>> ThreadPoolExecutor.java:908) >>>> at java.lang.Thread.run(Thread.java:680) >>>> Caused by: java.lang.ClassNotFoundException: >>>> com.sample.client.web.SampleServlet >>>> at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal( >>>> BundleLoader.java:513) >>>> at org.eclipse.osgi.internal.loader.BundleLoader.findClass( >>>> BundleLoader.java:429) >>>> at org.eclipse.osgi.internal.loader.BundleLoader.findClass( >>>> BundleLoader.java:417) >>>> at org.apache.geronimo.hook.equinox.GeronimoClassLoader.loadClass( >>>> GeronimoClassLoader.java:85) >>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:247) >>>> at org.eclipse.osgi.internal.loader.BundleLoader.loadClass( >>>> BundleLoader.java:345) >>>> at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass( >>>> BundleHost.java:229) >>>> at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass( >>>> AbstractBundle.java:1207) >>>> at >>>> org.apache.geronimo.web25.deployment.merge.annotation.ServletSecurityAnnotationMergeHandler.postProcessWebXmlElement( >>>> ServletSecurityAnnotationMergeHandler.java:52) >>>> ... 11 more >>>> >>>> >>>> On Apr 17, 2012, at 11:09 PM, Ivan wrote: >>>> >>>> From the log files, it seems that javax.naming should be added in the >>>> import-package list for the wab ? >>>> >>>> 2012/4/18 Michael Chau <[email protected]> >>>> >>>>> I've created a SampleApi(interface), SampleServer(implementation) and >>>>> SampleWeb(servlet) bundles. It's using Blueprint. I ran it in the Apache >>>>> Aries container and it was fine. I tried to run it in Geronimo and got >>>>> >>>>> 2012-04-17 14:44:52,759 ERROR [WebApplication] Unable to start web >>>>> application for bundle sample-web >>>>> java.lang.NoClassDefFoundError: Could not fully load class: >>>>> com.sample.client.web.SampleServlet >>>>> due to:javax/naming/NamingException >>>>> in classLoader: >>>>> org.apache.geronimo.hook.equinox.GeronimoClassLoader@10993991 >>>>> at org.apache.xbean.finder.ClassFinder.<init>(ClassFinder.java:136) >>>>> at >>>>> org.apache.geronimo.web25.deployment.AbstractWebModuleBuilder.createWebAppClassFinder( >>>>> AbstractWebModuleBuilder.java:663) >>>>> at >>>>> org.apache.geronimo.web25.deployment.AbstractWebModuleBuilder.configureBasicWebModuleAttributes( >>>>> AbstractWebModuleBuilder.java:698) >>>>> at >>>>> org.apache.geronimo.tomcat.deployment.TomcatModuleBuilder.addGBeans( >>>>> TomcatModuleBuilder.java:483) >>>>> at org.apache.geronimo.osgi.web.extender.WebApplication.doRun( >>>>> WebApplication.java:218) >>>>> at org.apache.geronimo.osgi.web.extender.WebApplication.run( >>>>> WebApplication.java:125) >>>>> at java.util.concurrent.Executors$RunnableAdapter.call( >>>>> Executors.java:441) >>>>> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) >>>>> at java.util.concurrent.FutureTask.run(FutureTask.java:138) >>>>> at java.util.concurrent.ThreadPoolExecutor$Worker.runTask( >>>>> ThreadPoolExecutor.java:886) >>>>> at java.util.concurrent.ThreadPoolExecutor$Worker.run( >>>>> ThreadPoolExecutor.java:908) >>>>> at java.lang.Thread.run(Thread.java:680) >>>>> >>>>> Any help is appreciated. >>>>> >>>>> Michael >>>>> >>>> >>>> >>>> >>>> -- >>>> Ivan >>>> >>>> >>>> >>> >>> >>> -- >>> Thanks! >>> >>> Regards, Forrest >>> >>> >>> >> >> >> -- >> Thanks! >> >> Regards, Forrest >> >> >> > > > -- > Thanks! > > Regards, Forrest > > > > -- Thanks! Regards, Forrest
sample-app2.eba
Description: Binary data
