Hi Azeez, We've been using this pattern in the kernel. e.g. launch.ini. Shall we use property file names like following.
*carbon-context.properties *(at moment this file contains only one property) *axis2-configuration-context.properties* (This file will be added in the future and it will contain properties which will get copied from super-tenant to tenant configuration context etc.) ------------------- launch.ini ------------------------- # Eclipse Runtime Configuration Overrides # These properties are loaded prior to starting the framework and can also be used to override System Properties # @null is a special value used to override and clear the framework's copy of a System Property prior to starting the framework # "*" can be used together with @null to clear System Properties that match a prefix name. osgi.*=@null org.osgi.*=@null eclipse.*=@null osgi.parentClassloader=app osgi.contextClassLoaderParent=app # When osgi.clean is set to "true", any cached data used by the OSGi framework # will be wiped clean. This will clean the caches used to store bundle # dependency resolution and eclipse extension registry data. Using this # option will force OSGi framework to reinitialize these caches. # The following setting is put in place to get rid of the problems # faced when re-starting the system. Please note that, when this setting is # true, if you manually start a bundle, it would not be available when # you re-start the system. To avid this, copy the bundle jar to the plugins # folder, before you re-start the system. osgi.clean=true # Uncomment the following line to turn on Eclipse Equinox debugging. # You may also edit the osgi-debug.options file and fine tune the debugging # options to suite your needs. #osgi.debug=./repository/conf/osgi-debug.options # Following system property allows us to control the public JDK packages exported through the system bundle. org.osgi.framework.system.packages=javax.accessibility,\ javax.activity,\ javax.crypto,\ javax.crypto.interfaces,\ javax.crypto.spec,\ javax.imageio,\ javax.imageio.event,\ javax.imageio.metadata,\ javax.imageio.plugins.bmp,\ On Wed, Oct 29, 2014 at 1:55 PM, Afkham Azeez <[email protected]> wrote: > A property file with a single property? Why have a property file in the > first place? > > On Wed, Oct 29, 2014 at 1:16 AM, Nipuni Perera <[email protected]> wrote: > >> Hi, >> >> @Azeez >> I have updated the getOSGiService(Class clazz) method to >> getOSGiService(Class clazz, Hashtable<String, String> props) so that we can >> pass properties when access to osgi services registered under a specific >> interface and matching a given filter. I have updated the name of the file >> to carboncontext-osgi-services.properties. >> I have used following syntax for the >> carboncontext-osgi-services.properties file, >> >> allowed.osgi.services=\ >> org.wso2.carbon.user.core.service.RealmService.class,\ >> org.wso2.carbon.utils.ConfigurationContextService,\ >> ... >> >> Thus I have used >> allowedOSGiServices = >> Arrays.asList(properties.get(CarbonConstants.OSGI_SERVICE_LIST).toString().split(",")); >> >> I will keep the 2 methods in PCC and add above methods to CC. We wanted >> to improve above methods to use filters to access osgi services. I will >> update the fix with your suggestions. >> >> Thanks, >> Nipuni >> >> On Wed, Oct 29, 2014 at 1:20 PM, Afkham Azeez <[email protected]> wrote: >> >>> >>> On Wed, Oct 29, 2014 at 12:41 AM, Afkham Azeez <[email protected]> wrote: >>> >>>> Here you go. This is the implementation we require. I have not tested >>>> this but the logic flow should be correct. >>>> >>>> >>>> /** >>>> * Obtain the first OSGi service found for interface or class >>>> <code>clazz</code> >>>> * @param clazz The type of the OSGi service >>>> * @return The OSGi service >>>> */ >>>> public Object getOSGiService(Class clazz) { >>>> if(!allowedOSGiServices.contains(clazz.getName())) { >>>> throw new SecurityException("OSGi service " + clazz + " >>>> cannot be accessed via CarbonContext"); >>>> } >>>> BundleContext bundleContext = dataHolder.getBundleContext(); >>>> ServiceTracker serviceTracker = new >>>> ServiceTracker(bundleContext, clazz, null); >>>> try { >>>> serviceTracker.open(); >>>> return serviceTracker.getServices()[0]; >>>> } finally { >>>> serviceTracker.close(); >>>> } >>>> } >>>> >>>> private static List<String> allowedOSGiServices = new >>>> ArrayList<String>(); >>>> >>>> static { >>>> FileInputStream fileInputStream = null; >>>> String osgiServicesFilename = >>>> CarbonUtils.getEtcCarbonConfigDirPath() + File.separator + >>>> "carboncontext-osgi-services.properties"; >>>> try { >>>> Properties osgiServices = new Properties(); >>>> if(new File(osgiServicesFilename).exists()) { // this file >>>> is an optional file >>>> fileInputStream = new >>>> FileInputStream(osgiServicesFilename); >>>> osgiServices.load(fileInputStream); >>>> Set<String> propNames = >>>> osgiServices.stringPropertyNames(); >>>> for (String propName : propNames) { >>>> allowedOSGiServices.add(propName); >>>> >>> >>> Oops... bug here... here is the correct code: >>> >>> allowedOSGiServices.add(osgiServices.getProperty(propName)); >>> >>> >>>> } >>>> } >>>> } catch (IOException e) { >>>> log.fatal("Cannot load " + osgiServicesFilename, e); >>>> } finally { >>>> if(fileInputStream != null){ >>>> try { >>>> fileInputStream.close(); >>>> } catch (IOException e) { >>>> log.warn("Could not close FileInputStream of file " >>>> + osgiServicesFilename, e); >>>> } >>>> } >>>> } >>>> } >>>> >>>> /** >>>> * Obtain the OSGi services found for interface or class >>>> <code>clazz</code> >>>> * @param clazz The type of the OSGi service >>>> * @return The List of OSGi services >>>> */ >>>> public List<Object> getOSGiServices(Class clazz) { >>>> if(!allowedOSGiServices.contains(clazz.getName())) { >>>> throw new SecurityException("OSGi service " + clazz + " >>>> cannot be accessed via CarbonContext"); >>>> } >>>> BundleContext bundleContext = dataHolder.getBundleContext(); >>>> ServiceTracker serviceTracker = new >>>> ServiceTracker(bundleContext, clazz, null); >>>> List<Object> services = new ArrayList<Object>(); >>>> try { >>>> serviceTracker.open(); >>>> Collections.addAll(services, serviceTracker.getServices()); >>>> } finally { >>>> serviceTracker.close(); >>>> } >>>> return services; >>>> } >>>> >>>> >>> >>> >>> -- >>> *Afkham Azeez* >>> Director of Architecture; WSO2, Inc.; http://wso2.com >>> Member; Apache Software Foundation; http://www.apache.org/ >>> * <http://www.apache.org/>* >>> *email: **[email protected]* <[email protected]> >>> * cell: +94 77 3320919 <%2B94%2077%203320919>blog: * >>> *http://blog.afkham.org* <http://blog.afkham.org> >>> *twitter: **http://twitter.com/afkham_azeez* >>> <http://twitter.com/afkham_azeez> >>> *linked-in: **http://lk.linkedin.com/in/afkhamazeez >>> <http://lk.linkedin.com/in/afkhamazeez>* >>> >>> *Lean . Enterprise . Middleware* >>> >> >> >> >> -- >> Nipuni Perera >> Software Engineer; WSO2 Inc.; http://wso2.com >> Email: [email protected] >> Git hub profile: https://github.com/nipuni >> Mobile: +94 (71) 5626680 >> <http://wso2.com> >> >> > > > -- > *Afkham Azeez* > Director of Architecture; WSO2, Inc.; http://wso2.com > Member; Apache Software Foundation; http://www.apache.org/ > * <http://www.apache.org/>* > *email: **[email protected]* <[email protected]> > * cell: +94 77 3320919 <%2B94%2077%203320919>blog: * > *http://blog.afkham.org* <http://blog.afkham.org> > *twitter: **http://twitter.com/afkham_azeez* > <http://twitter.com/afkham_azeez> > *linked-in: **http://lk.linkedin.com/in/afkhamazeez > <http://lk.linkedin.com/in/afkhamazeez>* > > *Lean . Enterprise . Middleware* > -- Sameera Jayasoma, Software Architect, WSO2, Inc. (http://wso2.com) email: [email protected] blog: http://sameera.adahas.org twitter: https://twitter.com/sameerajayasoma flickr: http://www.flickr.com/photos/sameera-jayasoma/collections Mobile: 0094776364456 Lean . Enterprise . Middleware
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
