Well, still can't get it to work :(
Here's my web structure:
web-inf/
-web.xml
-lib/
org.apache.felix.framework-1.4.1.jar
org.eclipse.osgi.services.jar
org.osgi.compendium.jar
org.osgi.core.jar
org.osgi.foundation.jar
org.eclipse.equinox.servlet-1.0.1.jar
-resources/
-bundles/
org.apache.felix.configadmin.jar
org.apache.felix.metatype.jar
org.apache.felix.webconsole.jar
org.eclipse.osgi.services.jar
-corebundles/
servlet-api.osg1-2.5.jar
Well, here's the serlvet that boots the system (got it from sling)
package org.openspotlight.core.loader;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.servlet.GenericServlet;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.apache.felix.framework.Logger;
import org.eclipse.equinox.http.servlet.HttpServiceServlet;
import org.osgi.framework.BundleException;
import org.osgi.framework.ServiceReference;
public class OSLServlet extends GenericServlet {
private OSL osl;
private Servlet delegatee;
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
Servlet delegatee = getDelegatee();
if (delegatee == null) {
((HttpServletResponse)
res).sendError(HttpServletResponse.SC_NOT_FOUND);
} else {
delegatee.service(req, res);
}
}
@Override
public void init() throws ServletException {
ServletContextResourceProvider rp = new
ServletContextResourceProvider(getServletContext());
Logger logger = new ServletContextLogger(getServletContext());
Map<String, String> props = new HashMap<String, String>();
this.osl = new OSL(rp,props,logger);
this.delegatee = new HttpServiceServlet();
this.delegatee.init(getServletConfig());
super.init();
}
@Override
public void destroy() {
if(this.delegatee != null){
this.delegatee.destroy();
this.delegatee = null;
}
if(this.osl != null){
osl.destroy();
this.osl = null;
}
super.destroy();
}
public Servlet getDelegatee(){
return this.delegatee;
}
}
Here's the bridge (OSL) also got from Sling:
package org.openspotlight.core.loader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import org.apache.felix.framework.Felix;
import org.apache.felix.framework.Logger;
import org.apache.felix.framework.util.FelixConstants;
import org.eclipse.equinox.http.servlet.internal.Activator;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
public class OSL implements BundleActivator {
private Felix felix;
private ReadWriteLock felixLock;
private ResourceProvider resourceProvider;
private Logger logger;
private BundleActivator httpServiceActivator;
public OSL(ResourceProvider rp, Map<String, String> props, Logger
logger){
this.resourceProvider = rp;
this.logger = logger;
List<BundleActivator> activators = new ArrayList<BundleActivator>();
activators.add(this);
activators.add(new BootstrapInstaller(logger,rp));
Map configMap = new HashMap();
configMap.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP,
activators);
felix = new Felix(configMap);
try {
felix.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void start(BundleContext context) throws Exception {
this.httpServiceActivator = new Activator();
this.httpServiceActivator.start(context);
}
public void stop(BundleContext context) throws Exception {
try {
this.httpServiceActivator.stop(context);
} catch (Exception e) {
e.printStackTrace();
}
this.httpServiceActivator = null;
}
public void destroy(){
if (felix != null) {
logger.log(Logger.LOG_INFO, "Shutting down OSL");
try {
felix.stop();
} catch (BundleException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
logger.log(Logger.LOG_INFO, "Sling stopped");
felix = null;
}
}
}
Well, I get this messages at console when starting up:
16:14:17,887 ERROR [STDERR] *DEBUG* Scheduling task ManagedService Update:
pid=org.apache.felix.webconsole.internal.servlet.OsgiManager
16:14:17,888 ERROR [STDERR] *DEBUG* Running task ManagedService Update:
pid=org.apache.felix.webconsole.internal.servlet.OsgiManager
But when I access: localhost:8080/osl/system/console It does not find the
service. Looking at the ServletProxy source I found that there was no
registrations in the class.
Also, the first time I start the framework (after cleaning the cache dir) I
only find the system bundle. If I redeploy the war, it finds all the bundles
on the second time.
Any ideas?
Regards
On Fri, Jan 16, 2009 at 11:33 AM, Carsten Ziegeler <[email protected]>wrote:
> Vinicius Carvalho wrote:
> > Thanks Felix that really helped, just a couple of more questions :)
> >
> > 1- Do I need to launch the container from a servlet (I was doing from a
> > Listener)
> > 2- So, this servlet must be mapped to /* url, just like the Sling does?
> >
> You can map the servlet to any path, like /myosgi - the web console is
> then by default reachable at /myosgi/system/console.
>
> HTH
> Carsten
> --
> Carsten Ziegeler
> [email protected]
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>