मैं निम्नलिखित चाल का उपयोग करता हूं। यदि आप सेवा संदर्भ पर "लक्ष्य" विशेषता निर्दिष्ट करते हैं लेकिन खाली स्ट्रिंग के रूप में अपना मान छोड़ दें, तो एक ही नाम वाली एक घटक संपत्ति लेकिन ".target" प्रत्यय रनटाइम पर उपयोग की जाएगी।
नीचे दिए गए उदाहरण में, मैं अपने करफ कंटेनर में एक .cfg फ़ाइल के माध्यम से गतिशील रूप से अपने जेडीबीसी स्रोत का चयन करता हूं। "Datasourcefactory.target" संपत्ति को स्वचालित रूप से "डेटासॉरफैक्टरी" संदर्भ के "लक्ष्य" विशेषता में इंजेक्शन दिया जाता है।
चेतावनी: मुझे वास्तव में पता नहीं है कि यह चाल आधिकारिक रूप से समर्थित है या सिर्फ फ़ेलिक्स एससीआर सुविधा है। मैं इसका उल्लेख यह देखने के लिए किया गया है कि क्या इसका उल्लेख किया गया है ... किसी भी टिप्पणी के लिए +1 जो इसकी वैधता को स्पष्ट करता है!
@Component(
name = "...",
specVersion = "1.1",
policy = ConfigurationPolicy.REQUIRE,
metatype = true
)
@Property(name = "dataSourceFactory.target",
value = "",
label = "dataSourceFactory target",
description = "An OSGi service filter to select the data source provider. "+
"For example: '(&(osgi.jdbc.driver.name=derby)(objectClass=org.osgi.service.jdbc.DataSourceFactory))' where 'derby' is the important bit and the rest is boilerplate. "+
"See DataSourceFactory.OSGI_JDBC_DRIVER_(NAME,CLASS,VERSION)."
)
@Reference(
name = "dataSourceFactory",
referenceInterface = org.osgi.service.jdbc.DataSourceFactory.class,
cardinality = ReferenceCardinality.MANDATORY_UNARY,
target = "", // must be overwritten by configuration property named "dataSourceFactory.target"
bind = "bindDataSourceFactory",
unbind = "unbindDataSourceFactory"
)
स्रोत
2012-04-30 02:58:30
मैंने आपके पहले सुझाव के साथ खेला और ऐसा लगता है कि यह हमारी आवश्यकताओं को ठीक से ठीक करेगा। धन्यवाद। – rancidfishbreath