SlideShare a Scribd company logo
1 of 38
Download to read offline
Declarative Services
Dependency Injection OSGi Style
Felix Meschberger | Day Management AG
2
About Felix Meschberger
• Senior Developer at Day Management AG
• fmeschbe@day.com
• http://blog.meschberger.ch
• OSGi Implementations @ Apache Felix
– Declarative Services
– Configuration Admin
– Metatype Service
3
Contents
• Dependency Injection
• Implementations for OSGi
• Declarative Services
• Issues
• Declarative Services 1.1
• Maven SCR Plugin
• Apache Felix Extensions
4
Dependency Injection
• Loose Coupling
– „Don't call use, we'll call you“
• Easier Testing
– Inject different implementations
• Popular in Spring Framework
• Traditionally Descriptor Based
• Current Trend: Java Annotations
5
Implementations for OSGi
• Dependency Manager
• Declarative Services
• iPOJO (Evolution of Declarative Services)
• Spring DM
• Blueprint Service (Evolution of Spring DM)
• Peaberry (based on Google Guice)
• … possibly more …
6
Declarative Services
• Version 1.0, Compendium R4
• Version 1.1, Comendium R4.2
• XML Descriptor Based
• Lifecycle Management
• Dependency Injection (Services)
• Configuration Support
7
Component Descriptor
• XML
• Descriptors may be embedded
• Namespace for Component
– http://www.osgi.org/xmlns/scr/v1.0.0
– http://www.osgi.org/xmlns/scr/v1.1.0
• Descriptors listed in Bundle Manifest Header
– Service-Component
• Multiple Components per Document
8
Component Descriptor
<scr:component
name=“sample.component“
xmlns:scr=“http://www.osgi.org/xmlns/scr/v1.1.0“>
<implementation
class=“org.sample.Component“ />
<reference
interface=“org.osgi.service.log.LogService“
bind=“bindLog unbind=“unbindLoad“ />
<property name=“p1“ value=“sample“ />
<property name=“p2“ type=“Integer“>
1
2
</property>
</component>
9
Lifecycle Management
• Load Descriptors on Bundle Start
• Instantiation
• Configuration
• Activation
• Dependency Injection
• Deactivation
• Unload on Bundle Stop
10
Component Descriptor
<scr:component
name=“sample.component“
xmlns:scr=“http://www.osgi.org/xmlns/scr/v1.1.0“>
<implementation
class=“org.sample.Component“ />
<reference
interface=“org.osgi.service.log.LogService“
bind=“bindLog unbind=“unbindLoad“ />
<property name=“p1“ value=“sample“ />
<property name=“p2“ type=“Integer“>
1
2
</property>
</component>
11
Lifecycle: Activation
package org.sample;
public class Component {
protected void activate(
ComponentContext c) {
System.out.println(„Activating“);
}
protected void deactivate(
ComponentContext c) {
System.out.println(„Deactivating“);
}
}
12
Lifecycle: Binding
package org.sample;
public class Component {
protected void bindLog(
LogService ls) {
this.logService = ls
}
protected void unbindLog(
LogService ls) {
this.logService = null;
}
}
13
Lifecycle: Configuration
package org.sample;
public class Component {
protected void activate(
ComponentContext c) {
Dictionary props = c.getProperties();
String p1 = (String) props.get(„p1“);
int[] p2 = (int[]) props.get(„p2“);
}
}
14
Component Types
• Regular Component (non-service)
• Service
• Service Factory
• Component Factory
15
Dependency Injection
• Event-based using bind/unbind methods
• Lookup oriented using ComponentContext
• Optionality
• Multiplicity
• Binding Policy
16
Configuration
• Configuration from Configuration Admin
• Properties from Descriptor
• Provided through
ComponentContext.getProperties()
17
Instantiation
• If Enabled and Satisfied
• Single Instance
– No Configuration (unless required)
– Singleton Configuration (service.pid)
• Multiple Instances
– Factory Configuration (service.factoryPid)
18
Component Factory
• ComponentFactory.newInstance()
• ComponentInstance.dispose()
• Controlled by Application only
• Global Singleton Configuration only
19
Descriptor Unvealed
<scr:component
name=
enabled=
immediate=
factory=
configuration-policy=
activate=
deactivate=
modified=
>
… Component Description …
• </scr:component>
20
Descriptor Unvealed
<implementation
class=
/>
21
Descriptor Unvealed
<property
name=
value=
type=
/>
<property
name=
type=
>
… values …
</property>
22
Descriptor Unvealed
<properties
entry=
/>
23
Descriptor Unvealed
<service
servicefactory=
>
<provide
interface=
/>
… More Provide Elements …
</service>
24
Descriptor Unvealed
<reference
name=
interface=
cardinality=
policy=
target=
bind=
unbind=
/>
25
Issues
• Configuration Data Types
• Components not really POJO (DS 1.0)
• XML Descriptor
26
Configuration Data
• Wrapper of primitive types
– Byte, Short, Integer, Long, etc.
• String
• Array or Vector
– Primitive types
– Wrappers of primitive types
– String
• Aligned with...
– Metatype Service Specification
– Configuration Admin Specification
27
DS 1.0 not really POJO
• Requires OSGi API for full functionality
• Activate and Deactivate method names
fixed and public or protected
• Configuration through ComponentContext
• Reference Service Properties through
ServiceReference
• Fixed in Declarative Services 1.1
28
DS 1.1
• Configurable names for (de)activator
methods
• More (de)activator method arguments
– ComponentContext
– BundleContext
– Map
– int/Integer (deactivator only)
– Any combination
29
DS 1.1 (cont.)
• More (un)bind method arguments
– ServiceReference
– Service instance
– Service instance and Map
• Configuration Dependency
– Optional
– Ignore
– Require
• Support for private properties
30
DS 1.1 (cont.)
• Activator and bind methods may be
– public (discouraged)
– protected
– private (if in the component class)
– default (if in the same package)
• New features require DS 1.1 Namespace
• Service-Component supports Wildcards
– E.g. OSGi-INF/ds*.xml
31
XML Descriptor
• Good to re-use legacy POJO
• Problematic to keep in-sync with DS Classes
• YAXF – Yet another XML File
32
Maven SCR Plugin
• Generates Descriptors from Java Source
– JavaDoc tags
• @scr.component, @scr.property, ...
– Java Annotations
• @Component, @Property, ...
– High Level Annotations
• @SlingServlet
• Alternative: Peter Kriens' BND library
33
Component Descriptor
<scr:component
name=“sample.component“
xmlns:scr=“http://www.osgi.org/xmlns/scr/v1.1.0“>
<implementation
class=“org.sample.component“ />
<reference
interface=“org.osgi.service.log.LogService“
bind=“bindLog unbind=“unbindLoad“ />
<property name=“p1“ value=“sample“ />
<property name=“p2“ type=“Integer“>
1
2
</property>
</component>
34
SCR Annotations
package org.sample;
@Component
public class Component {
@Reference
private LogService log;
@Property(value=“sample“)
private String p1;
@Property(value=“1,2“)
private int[] p2;
protected void activate(
ComponentContext c) {
System.out.println(„Activating“);
}
protected void deactivate(
ComponentContext c) {
System.out.println(„Deactivating“);
}
}
35
SCR JavaDoc Tags
package org.sample;
/** @scr.component */
public class Component {
/** @scr.reference /
private LogService log;
/** @scr.property value=“sample“ */
private String p1;
/** @scr.property values.0=“1“ values.1=“2“ */
private int[] p2;
protected void activate(
ComponentContext c) {
System.out.println(„Activating“);
}
protected void deactivate(
ComponentContext c) {
System.out.println(„Deactivating“);
}
}
36
Apache Felix Extensions
• Management API
– Since Apache Felix SCR 1.0
– Now also in Equinox DS 1.2.0v20100125
• Service Reference: updated
– Since Apache Felix SCR 1.4.0
– OSGi Bug #63
37
Questions
38
Thank You!

More Related Content

What's hot

Apache Aries Overview
Apache Aries   OverviewApache Aries   Overview
Apache Aries Overview
Ian Robinson
 
Jersey framework
Jersey frameworkJersey framework
Jersey framework
knight1128
 
Spring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen HoellerSpring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen Hoeller
ZeroTurnaround
 
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter PilgrimJavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 

What's hot (20)

Apache Aries Overview
Apache Aries   OverviewApache Aries   Overview
Apache Aries Overview
 
Spring 4 final xtr_presentation
Spring 4 final xtr_presentationSpring 4 final xtr_presentation
Spring 4 final xtr_presentation
 
Spring 4 advanced final_xtr_presentation
Spring 4 advanced final_xtr_presentationSpring 4 advanced final_xtr_presentation
Spring 4 advanced final_xtr_presentation
 
Indic threads pune12-java ee 7 platformsimplification html5
Indic threads pune12-java ee 7 platformsimplification html5Indic threads pune12-java ee 7 platformsimplification html5
Indic threads pune12-java ee 7 platformsimplification html5
 
Akka Cluster in Java - JCConf 2015
Akka Cluster in Java - JCConf 2015Akka Cluster in Java - JCConf 2015
Akka Cluster in Java - JCConf 2015
 
Jersey framework
Jersey frameworkJersey framework
Jersey framework
 
GraphTour - Utilizing Powerful Extensions for Analytics & Operations
GraphTour - Utilizing Powerful Extensions for Analytics & OperationsGraphTour - Utilizing Powerful Extensions for Analytics & Operations
GraphTour - Utilizing Powerful Extensions for Analytics & Operations
 
Java9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidadJava9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidad
 
Apache Commons Pool and DBCP - Version 2 Update
Apache Commons Pool and DBCP - Version 2 UpdateApache Commons Pool and DBCP - Version 2 Update
Apache Commons Pool and DBCP - Version 2 Update
 
Struts2 - 101
Struts2 - 101Struts2 - 101
Struts2 - 101
 
Introduction tomcat7 servlet3
Introduction tomcat7 servlet3Introduction tomcat7 servlet3
Introduction tomcat7 servlet3
 
Java Play Restful JPA
Java Play Restful JPAJava Play Restful JPA
Java Play Restful JPA
 
Spring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen HoellerSpring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen Hoeller
 
OrientDB - The 2nd generation of (multi-model) NoSQL
OrientDB - The 2nd generation of  (multi-model) NoSQLOrientDB - The 2nd generation of  (multi-model) NoSQL
OrientDB - The 2nd generation of (multi-model) NoSQL
 
Automated testing web services - part 1
Automated testing web services - part 1Automated testing web services - part 1
Automated testing web services - part 1
 
the Spring 4 update
the Spring 4 updatethe Spring 4 update
the Spring 4 update
 
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphere
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphereAAI 2236-Using the New Java Concurrency Utilities with IBM WebSphere
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphere
 
Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!
 
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter PilgrimJavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
 
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor BuzatovićJavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
 

Similar to Declarative Services

The Future Of Service-Oriented Component Models for the OSGi Framework - Clém...
The Future Of Service-Oriented Component Models for the OSGi Framework - Clém...The Future Of Service-Oriented Component Models for the OSGi Framework - Clém...
The Future Of Service-Oriented Component Models for the OSGi Framework - Clém...
mfrancis
 
Building a server platform with os gi
Building a server platform with os giBuilding a server platform with os gi
Building a server platform with os gi
Dileepa Jayakody
 
Building a Modular Server Platform with OSGi - Harshana Eranga Martin, Dileep...
Building a Modular Server Platform with OSGi - Harshana Eranga Martin, Dileep...Building a Modular Server Platform with OSGi - Harshana Eranga Martin, Dileep...
Building a Modular Server Platform with OSGi - Harshana Eranga Martin, Dileep...
mfrancis
 
Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...
Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...
Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...
mfrancis
 

Similar to Declarative Services (20)

Dependencies, dependencies, dependencies
Dependencies, dependencies, dependenciesDependencies, dependencies, dependencies
Dependencies, dependencies, dependencies
 
OSGi Community Event 2010 - Dependencies, dependencies, dependencies
OSGi Community Event 2010 - Dependencies, dependencies, dependenciesOSGi Community Event 2010 - Dependencies, dependencies, dependencies
OSGi Community Event 2010 - Dependencies, dependencies, dependencies
 
The Future Of Service-Oriented Component Models for the OSGi Framework - Clém...
The Future Of Service-Oriented Component Models for the OSGi Framework - Clém...The Future Of Service-Oriented Component Models for the OSGi Framework - Clém...
The Future Of Service-Oriented Component Models for the OSGi Framework - Clém...
 
Declarative Services - Dependency Injection OSGi Style
Declarative Services - Dependency Injection OSGi StyleDeclarative Services - Dependency Injection OSGi Style
Declarative Services - Dependency Injection OSGi Style
 
AngularJS
AngularJSAngularJS
AngularJS
 
OSGi compendium
OSGi compendiumOSGi compendium
OSGi compendium
 
Building a server platform with os gi
Building a server platform with os giBuilding a server platform with os gi
Building a server platform with os gi
 
"Building, deploying and running production code at Dropbox" Васильев Леонид,...
"Building, deploying and running production code at Dropbox" Васильев Леонид,..."Building, deploying and running production code at Dropbox" Васильев Леонид,...
"Building, deploying and running production code at Dropbox" Васильев Леонид,...
 
What's New in Apache Solr 4.10
What's New in Apache Solr 4.10What's New in Apache Solr 4.10
What's New in Apache Solr 4.10
 
Building a Modular Server Platform with OSGi - Harshana Eranga Martin, Dileep...
Building a Modular Server Platform with OSGi - Harshana Eranga Martin, Dileep...Building a Modular Server Platform with OSGi - Harshana Eranga Martin, Dileep...
Building a Modular Server Platform with OSGi - Harshana Eranga Martin, Dileep...
 
Building a Modular Server Platform with OSGi
Building a Modular Server Platform with OSGiBuilding a Modular Server Platform with OSGi
Building a Modular Server Platform with OSGi
 
The AngularJS way
The AngularJS wayThe AngularJS way
The AngularJS way
 
Workflow All the Things with Azure Logic Apps
Workflow All the Things with Azure Logic AppsWorkflow All the Things with Azure Logic Apps
Workflow All the Things with Azure Logic Apps
 
DanNotes 2013: OpenNTF Domino API
DanNotes 2013: OpenNTF Domino APIDanNotes 2013: OpenNTF Domino API
DanNotes 2013: OpenNTF Domino API
 
Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...
Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...
Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...
 
S2GX 2012 - Introduction to Spring Integration and Spring Batch
S2GX 2012 - Introduction to Spring Integration and Spring BatchS2GX 2012 - Introduction to Spring Integration and Spring Batch
S2GX 2012 - Introduction to Spring Integration and Spring Batch
 
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)
 
What's new in the OSGi Enterprise Release 5.0
What's new in the OSGi Enterprise Release 5.0What's new in the OSGi Enterprise Release 5.0
What's new in the OSGi Enterprise Release 5.0
 
Kafka indexing service
Kafka indexing serviceKafka indexing service
Kafka indexing service
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator
 

More from Felix Meschberger

Server-side OSGi with Apache Sling
Server-side OSGi with Apache SlingServer-side OSGi with Apache Sling
Server-side OSGi with Apache Sling
Felix Meschberger
 

More from Felix Meschberger (7)

Apache Felix Web Console
Apache Felix Web ConsoleApache Felix Web Console
Apache Felix Web Console
 
Server-side OSGi with Apache Sling (OSGiDevCon 2011)
Server-side OSGi with Apache Sling (OSGiDevCon 2011)Server-side OSGi with Apache Sling (OSGiDevCon 2011)
Server-side OSGi with Apache Sling (OSGiDevCon 2011)
 
Server-side OSGi with Apache Sling
Server-side OSGi with Apache SlingServer-side OSGi with Apache Sling
Server-side OSGi with Apache Sling
 
Server-side OSGi with Apache Sling (Jazoon 2010)
Server-side OSGi with Apache Sling (Jazoon 2010)Server-side OSGi with Apache Sling (Jazoon 2010)
Server-side OSGi with Apache Sling (Jazoon 2010)
 
Managing an OSGi Framework with Apache Felix Web Console
Managing an OSGi Framework with  Apache Felix Web ConsoleManaging an OSGi Framework with  Apache Felix Web Console
Managing an OSGi Framework with Apache Felix Web Console
 
Apache Sling Server Seitiges OSGi
Apache Sling Server Seitiges OSGiApache Sling Server Seitiges OSGi
Apache Sling Server Seitiges OSGi
 
Rapid JCR Applications Development with Sling
Rapid JCR Applications Development with SlingRapid JCR Applications Development with Sling
Rapid JCR Applications Development with Sling
 

Recently uploaded

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 

Declarative Services