osgikarafpax

How to access cfg file in KARAF/etc using PAX-CDI


How to access cfg file in KARAF/etc using PAX-CDI

eg:

KARAF_HOME\etc\import.cfg

How to use it using @OsgiServiceProvider


Solution

  • An work around you can you DOSGI to load and place the property in a Util and you access in you Pax-CDI code

    DOSGI:

    @Component(immediate = true, configurationPolicy = ConfigurationPolicy.REQUIRE, configurationPid = "ca.esc.pbm.frontend.security")
    public class SecurityConfig{
    
    public static final String TOKEN_SIG_SECRET = "signatureSecret";
    
    @Activate
        private void activate(BundleContext bundleContext, Map<String, ?> properties) throws Exception {
    
            logger.info("Security Config Activated");
    
            Properties props = new Properties();
    
            if (properties.isEmpty()) {
                throw new ComponentException("Config Properties is Empty ");
            }
    
            logger.info("Property loaded " + properties.size());
    
            props.putAll(properties);
    
            PropertiesUtil.setProperty(props);
    
            System.out.println(properties);
    
        }
    }
    

    Property Util

    /**
     * Property Util to load the *.properties form class path
     * 
     * @version 1.0
     */
    public class PropertiesUtil {
    
    private static Map<String, String> propertiesMap;
    
    /**
     * Get the property value for the given key from the loaded property
     * 
     * @param name
     * @return String
     */
    public static String getProperty(String name) {
        return (String) propertiesMap.get(name);
    }
    
    /**
     * Set the property value for the given key from the loaded property
     * 
     * @param props
     */
    public static void setProperty(Properties props) {
        Map<String, String> propertiesMapLocal = new HashMap<String, String>();
    
        for (Object key : props.keySet()) {
            String keyStr = key.toString();
            propertiesMapLocal.put(keyStr, props.getProperty(keyStr));
        }
    
        propertiesMap = propertiesMapLocal;
    }
    

    }

    pax-cdi

    @ApplicationScoped
    @Named
    public class DefaultApiImpl implements DefaultApi {
    
    @Override
        public Response login(String userAgent, String username, String password, UriInfo uriInfo) {
    
    PropertiesUtil.getProperty(SecurityConfig.TOKEN_SIG_SECRET);
    
    }
    

    cfg file

    you can have karaf_home/etc/ca.esc.pbm.frontend.security.cfg holding a value signatureSecret=my-secret