Merge "Declare a property for commons-lang version in poms and use it."
[controller.git] / opendaylight / clustering / services_implementation / src / main / java / org / opendaylight / controller / clustering / services_implementation / internal / ClassResolver.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.controller.clustering.services_implementation.internal;
10
11 import java.lang.ref.WeakReference;
12
13 import org.jboss.marshalling.ContextClassResolver;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16
17 public final class ClassResolver extends ContextClassResolver {
18     private WeakReference<ClassLoader> osgiClassLoader = null;
19     private static final Logger logger = LoggerFactory.getLogger(ClassResolver.class);
20
21     public ClassResolver() {
22         ClassLoader cl = this.getClass()
23                 .getClassLoader();
24         if (cl != null) {
25             this.osgiClassLoader = new WeakReference<ClassLoader>(cl);
26             logger.trace("Acquired weak reference to OSGi classLoader {}", cl);
27         }
28     }
29
30     @Override
31     protected ClassLoader getClassLoader() {
32         ClassLoader ret = null;
33         if (this.osgiClassLoader != null) {
34             ret = this.osgiClassLoader.get();
35             if (ret != null) {
36                 if (logger.isTraceEnabled()) {
37                     logger.trace("Returning OSGi class loader {}", ret);
38                 }
39                 return ret;
40             }
41         }
42
43         logger.warn("Could not resolve classloader!");
44         return ret;
45     }
46 }