Better OSGi integration - Netty will use OSGi LogService when it's running on top of an OSGi framework
This commit is contained in:
parent
d7256bc737
commit
5c02a13be0
7
pom.xml
7
pom.xml
@ -58,6 +58,13 @@
|
|||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>org.osgi.compendium</artifactId>
|
||||||
|
<version>1.2.0</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.code.guice</groupId>
|
<groupId>com.google.code.guice</groupId>
|
||||||
<artifactId>guice</artifactId>
|
<artifactId>guice</artifactId>
|
||||||
|
@ -35,10 +35,15 @@ 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.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)
|
||||||
@ -53,6 +58,7 @@ public class NettyBundleActivator implements BundleActivator {
|
|||||||
private Executor executor;
|
private Executor executor;
|
||||||
|
|
||||||
public void start(BundleContext ctx) throws Exception {
|
public void start(BundleContext ctx) throws Exception {
|
||||||
|
initLoggerFactory(ctx);
|
||||||
executor = Executors.newCachedThreadPool();
|
executor = Executors.newCachedThreadPool();
|
||||||
|
|
||||||
// The default transport is NIO.
|
// The default transport is NIO.
|
||||||
@ -73,6 +79,32 @@ public class NettyBundleActivator implements BundleActivator {
|
|||||||
executor = null;
|
executor = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initLoggerFactory(BundleContext ctx) {
|
||||||
|
ServiceReference logServiceRef = ctx.getServiceReference(LogService.class.getName());
|
||||||
|
if (logServiceRef == 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) {
|
||||||
Properties props = new Properties();
|
Properties props = new Properties();
|
||||||
props.setProperty("category", "netty");
|
props.setProperty("category", "netty");
|
||||||
|
112
src/main/java/org/jboss/netty/logging/OsgiLogger.java
Normal file
112
src/main/java/org/jboss/netty/logging/OsgiLogger.java
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
* JBoss, Home of Professional Open Source
|
||||||
|
*
|
||||||
|
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
|
||||||
|
* by the @author tags. See the COPYRIGHT.txt in the distribution for a
|
||||||
|
* full listing of individual contributors.
|
||||||
|
*
|
||||||
|
* This is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Lesser General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2.1 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this software; if not, write to the Free
|
||||||
|
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||||
|
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
||||||
|
*/
|
||||||
|
package org.jboss.netty.logging;
|
||||||
|
|
||||||
|
import org.osgi.framework.ServiceReference;
|
||||||
|
import org.osgi.service.log.LogService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <a href="http://www.osgi.org/">OSGi</a> {@link LogService} logger.
|
||||||
|
*
|
||||||
|
* @author The Netty Project (netty-dev@lists.jboss.org)
|
||||||
|
* @author Trustin Lee (tlee@redhat.com)
|
||||||
|
*
|
||||||
|
* @version $Rev$, $Date$
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class OsgiLogger implements InternalLogger {
|
||||||
|
|
||||||
|
private final LogService logService;
|
||||||
|
private final ServiceReference serviceRef;
|
||||||
|
private final String name;
|
||||||
|
private final String prefix;
|
||||||
|
|
||||||
|
OsgiLogger(LogService logService, ServiceReference serviceRef, String name) {
|
||||||
|
if (logService == null) {
|
||||||
|
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;
|
||||||
|
prefix = "[" + name + "] ";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void debug(String msg) {
|
||||||
|
logService.log(serviceRef, LogService.LOG_DEBUG, prefix + msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void debug(String msg, Throwable cause) {
|
||||||
|
logService.log(serviceRef, LogService.LOG_DEBUG, prefix + msg, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void error(String msg) {
|
||||||
|
logService.log(serviceRef, LogService.LOG_ERROR, prefix + msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void error(String msg, Throwable cause) {
|
||||||
|
logService.log(serviceRef, LogService.LOG_ERROR, prefix + msg, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void info(String msg) {
|
||||||
|
logService.log(serviceRef, LogService.LOG_INFO, prefix + msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void info(String msg, Throwable cause) {
|
||||||
|
logService.log(serviceRef, LogService.LOG_INFO, prefix + msg, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDebugEnabled() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isErrorEnabled() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isInfoEnabled() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isWarnEnabled() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void warn(String msg) {
|
||||||
|
logService.log(serviceRef, LogService.LOG_WARNING, prefix + msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void warn(String msg, Throwable cause) {
|
||||||
|
logService.log(serviceRef, LogService.LOG_WARNING, prefix + msg, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
61
src/main/java/org/jboss/netty/logging/OsgiLoggerFactory.java
Normal file
61
src/main/java/org/jboss/netty/logging/OsgiLoggerFactory.java
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* JBoss, Home of Professional Open Source
|
||||||
|
*
|
||||||
|
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
|
||||||
|
* by the @author tags. See the COPYRIGHT.txt in the distribution for a
|
||||||
|
* full listing of individual contributors.
|
||||||
|
*
|
||||||
|
* This is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Lesser General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2.1 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this software; if not, write to the Free
|
||||||
|
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||||
|
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
||||||
|
*/
|
||||||
|
package org.jboss.netty.logging;
|
||||||
|
|
||||||
|
import org.osgi.framework.ServiceReference;
|
||||||
|
import org.osgi.service.log.LogService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logger factory which creates an <a href="http://www.osgi.org/">OSGi</a>
|
||||||
|
* {@link LogService} logger.
|
||||||
|
*
|
||||||
|
* @author The Netty Project (netty-dev@lists.jboss.org)
|
||||||
|
* @author Trustin Lee (tlee@redhat.com)
|
||||||
|
*
|
||||||
|
* @version $Rev$, $Date$
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class OsgiLoggerFactory extends InternalLoggerFactory {
|
||||||
|
|
||||||
|
private final LogService logService;
|
||||||
|
private final ServiceReference serviceRef;
|
||||||
|
|
||||||
|
public OsgiLoggerFactory(LogService logService, ServiceReference serviceRef) {
|
||||||
|
if (logService == null) {
|
||||||
|
throw new NullPointerException("logService");
|
||||||
|
}
|
||||||
|
if (serviceRef == null) {
|
||||||
|
throw new NullPointerException("serviceRef");
|
||||||
|
}
|
||||||
|
this.logService = logService;
|
||||||
|
this.serviceRef = serviceRef;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InternalLogger newInstance(String name) {
|
||||||
|
return new OsgiLogger(logService, serviceRef, name);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user