* POM cleanup

* Made sure OSGi logger looks up the LogService dynamically
This commit is contained in:
Trustin Lee 2009-01-13 07:18:38 +00:00
parent 93cec1c6d5
commit 6bd8933532
4 changed files with 112 additions and 70 deletions

View File

@ -530,12 +530,10 @@
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
<updatePolicy>never</updatePolicy> <updatePolicy>never</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</snapshots> </snapshots>
<releases> <releases>
<enabled>true</enabled> <enabled>true</enabled>
<updatePolicy>interval:10080</updatePolicy> <updatePolicy>interval:10080</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</releases> </releases>
<id>jboss.release</id> <id>jboss.release</id>
<name>JBoss releases</name> <name>JBoss releases</name>
@ -548,12 +546,10 @@
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
<updatePolicy>never</updatePolicy> <updatePolicy>never</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</snapshots> </snapshots>
<releases> <releases>
<enabled>true</enabled> <enabled>true</enabled>
<updatePolicy>interval:10080</updatePolicy> <updatePolicy>interval:10080</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</releases> </releases>
<id>jboss.release</id> <id>jboss.release</id>
<name>JBoss releases</name> <name>JBoss releases</name>

View File

@ -35,15 +35,12 @@ import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory; import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
import org.jboss.netty.channel.socket.oio.OioClientSocketChannelFactory; import org.jboss.netty.channel.socket.oio.OioClientSocketChannelFactory;
import org.jboss.netty.channel.socket.oio.OioServerSocketChannelFactory; import org.jboss.netty.channel.socket.oio.OioServerSocketChannelFactory;
import org.jboss.netty.logging.InternalLogger;
import org.jboss.netty.logging.InternalLoggerFactory; import org.jboss.netty.logging.InternalLoggerFactory;
import org.jboss.netty.logging.OsgiLoggerFactory; import org.jboss.netty.logging.OsgiLoggerFactory;
import org.jboss.netty.util.ExecutorShutdownUtil; import org.jboss.netty.util.ExecutorShutdownUtil;
import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext; import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration; import org.osgi.framework.ServiceRegistration;
import org.osgi.service.log.LogService;
/** /**
* @author The Netty Project (netty-dev@lists.jboss.org) * @author The Netty Project (netty-dev@lists.jboss.org)
@ -56,10 +53,14 @@ public class NettyBundleActivator implements BundleActivator {
new ArrayList<ServiceRegistration>(); new ArrayList<ServiceRegistration>();
private Executor executor; private Executor executor;
private OsgiLoggerFactory loggerFactory;
public void start(BundleContext ctx) throws Exception { public void start(BundleContext ctx) throws Exception {
initLoggerFactory(ctx); // Switch the internal logger to the OSGi LogService.
loggerFactory = new OsgiLoggerFactory(ctx);
InternalLoggerFactory.setDefaultFactory(loggerFactory);
// Prepare the resources required for creating ChannelFactories.
Executor executor = this.executor = Executors.newCachedThreadPool(); Executor executor = this.executor = Executors.newCachedThreadPool();
// The default transport is NIO. // The default transport is NIO.
@ -80,33 +81,12 @@ public class NettyBundleActivator implements BundleActivator {
ExecutorShutdownUtil.shutdown(executor); ExecutorShutdownUtil.shutdown(executor);
executor = null; executor = null;
} }
}
private void initLoggerFactory(BundleContext ctx) { if (loggerFactory != null) {
ServiceReference logServiceRef = InternalLoggerFactory.setDefaultFactory(loggerFactory.getFallback());
ctx.getServiceReference("org.osgi.service.log.LogService"); loggerFactory.destroy();
if (logServiceRef == null) { loggerFactory = null;
// LogService is not available.
return;
} }
LogService logService;
try {
logService = (LogService) ctx.getService(logServiceRef);
} catch (Exception e) {
// Same name, different service
return;
}
Properties props = new Properties();
props.setProperty("category", "netty");
ServiceRegistration reg = ctx.registerService(
InternalLogger.class.getName(), new Object(), props);
registrations.add(reg);
InternalLoggerFactory.setDefaultFactory(
new OsgiLoggerFactory(logService, reg.getReference()));
} }
private void register(BundleContext ctx, ChannelFactory factory, Class<?>... factoryTypes) { private void register(BundleContext ctx, ChannelFactory factory, Class<?>... factoryTypes) {

View File

@ -22,7 +22,6 @@
*/ */
package org.jboss.netty.logging; package org.jboss.netty.logging;
import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogService; import org.osgi.service.log.LogService;
/** /**
@ -36,49 +35,70 @@ import org.osgi.service.log.LogService;
*/ */
class OsgiLogger implements InternalLogger { class OsgiLogger implements InternalLogger {
private final LogService logService; private final OsgiLoggerFactory parent;
private final ServiceReference serviceRef; private final InternalLogger fallback;
private final String name; private final String name;
private final String prefix; private final String prefix;
OsgiLogger(LogService logService, ServiceReference serviceRef, String name) { OsgiLogger(OsgiLoggerFactory parent, String name, InternalLogger fallback) {
if (logService == null) { this.parent = parent;
throw new NullPointerException("logService");
}
if (serviceRef == null) {
throw new NullPointerException("serviceRef");
}
if (name == null) {
throw new NullPointerException("name");
}
this.logService = logService;
this.serviceRef = serviceRef;
this.name = name; this.name = name;
this.fallback = fallback;
prefix = "[" + name + "] "; prefix = "[" + name + "] ";
} }
public void debug(String msg) { public void debug(String msg) {
logService.log(serviceRef, LogService.LOG_DEBUG, prefix + msg); LogService logService = parent.getLogService();
if (logService != null) {
logService.log(LogService.LOG_DEBUG, prefix + msg);
} else {
fallback.debug(msg);
}
} }
public void debug(String msg, Throwable cause) { public void debug(String msg, Throwable cause) {
logService.log(serviceRef, LogService.LOG_DEBUG, prefix + msg, cause); LogService logService = parent.getLogService();
if (logService != null) {
logService.log(LogService.LOG_DEBUG, prefix + msg, cause);
} else {
fallback.debug(msg, cause);
}
} }
public void error(String msg) { public void error(String msg) {
logService.log(serviceRef, LogService.LOG_ERROR, prefix + msg); LogService logService = parent.getLogService();
if (logService != null) {
logService.log(LogService.LOG_ERROR, prefix + msg);
} else {
fallback.error(msg);
}
} }
public void error(String msg, Throwable cause) { public void error(String msg, Throwable cause) {
logService.log(serviceRef, LogService.LOG_ERROR, prefix + msg, cause); LogService logService = parent.getLogService();
if (logService != null) {
logService.log(LogService.LOG_ERROR, prefix + msg, cause);
} else {
fallback.error(msg, cause);
}
} }
public void info(String msg) { public void info(String msg) {
logService.log(serviceRef, LogService.LOG_INFO, prefix + msg); LogService logService = parent.getLogService();
if (logService != null) {
logService.log(LogService.LOG_INFO, prefix + msg);
} else {
fallback.info(msg);
}
} }
public void info(String msg, Throwable cause) { public void info(String msg, Throwable cause) {
logService.log(serviceRef, LogService.LOG_INFO, prefix + msg, cause); LogService logService = parent.getLogService();
if (logService != null) {
logService.log(LogService.LOG_INFO, prefix + msg, cause);
} else {
fallback.info(msg, cause);
}
} }
public boolean isDebugEnabled() { public boolean isDebugEnabled() {
@ -98,11 +118,21 @@ class OsgiLogger implements InternalLogger {
} }
public void warn(String msg) { public void warn(String msg) {
logService.log(serviceRef, LogService.LOG_WARNING, prefix + msg); LogService logService = parent.getLogService();
if (logService != null) {
logService.log(LogService.LOG_WARNING, prefix + msg);
} else {
fallback.warn(msg);
}
} }
public void warn(String msg, Throwable cause) { public void warn(String msg, Throwable cause) {
logService.log(serviceRef, LogService.LOG_WARNING, prefix + msg, cause); LogService logService = parent.getLogService();
if (logService != null) {
logService.log(LogService.LOG_WARNING, prefix + msg, cause);
} else {
fallback.warn(msg, cause);
}
} }
@Override @Override

View File

@ -22,10 +22,10 @@
*/ */
package org.jboss.netty.logging; package org.jboss.netty.logging;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference; import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogService; import org.osgi.service.log.LogService;
import org.osgi.util.tracker.ServiceTracker;
/** /**
* Logger factory which creates an <a href="http://www.osgi.org/">OSGi</a> * Logger factory which creates an <a href="http://www.osgi.org/">OSGi</a>
@ -39,23 +39,59 @@ import org.osgi.service.log.LogService;
*/ */
public class OsgiLoggerFactory extends InternalLoggerFactory { public class OsgiLoggerFactory extends InternalLoggerFactory {
private final LogService logService; private final ServiceTracker logServiceTracker;
private final ServiceReference serviceRef; private final InternalLoggerFactory fallback;
volatile LogService logService;
public OsgiLoggerFactory(LogService logService, ServiceReference serviceRef) { public OsgiLoggerFactory(BundleContext ctx) {
if (logService == null) { this(ctx, null);
throw new NullPointerException("logService"); }
}
if (serviceRef == null) {
throw new NullPointerException("serviceRef");
}
this.logService = logService;
this.serviceRef = serviceRef;
public OsgiLoggerFactory(BundleContext ctx, InternalLoggerFactory fallback) {
if (ctx == null) {
throw new NullPointerException("ctx");
}
if (fallback == null) {
fallback = InternalLoggerFactory.getDefaultFactory();
if (fallback instanceof OsgiLoggerFactory) {
fallback = new JdkLoggerFactory();
}
}
this.fallback = fallback;
logServiceTracker = new ServiceTracker(
ctx, "org.osgi.service.log.LogService", null) {
@Override
public Object addingService(ServiceReference reference) {
LogService service = (LogService) super.addingService(reference);
logService = service;
return service;
}
@Override
public void removedService(ServiceReference reference,
Object service) {
logService = null;
}
};
logServiceTracker.open();
}
public InternalLoggerFactory getFallback() {
return fallback;
}
public LogService getLogService() {
return logService;
}
public void destroy() {
logService = null;
logServiceTracker.close();
} }
@Override @Override
public InternalLogger newInstance(String name) { public InternalLogger newInstance(String name) {
return new OsgiLogger(logService, serviceRef, name); return new OsgiLogger(this, name, fallback.newInstance(name));
} }
} }