SlideShare ist ein Scribd-Unternehmen logo
1 von 109
Downloaden Sie, um offline zu lesen
By Sander Mak
Java Modularity:
@Sander_Mak
The Year After
About Sander
Fellow, Software Architect
@ Luminis
Experience in modular
development stacks
Conference Speaker & Author
@Sander_Mak
Quick Java Module Refresher
@Sander_Mak
module main {
}
module-info.java
Module Descriptors
@Sander_Mak
module main {
}
module-info.java
Module Descriptors
main.web
main.persistence
main.integration
main
@Sander_Mak
module main {
requires helper;
}
module-info.java
module helper {
}
module-info.java
Explicit Dependencies
main.web
main.persistence
main.integration
main
@Sander_Mak
module main {
requires helper;
}
module-info.java
module helper {
}
module-info.java
helper
Explicit Dependencies
main.web
main.persistence
main.integration
main
@Sander_Mak
module main {
requires helper;
}
module helper {
exports helper.api;
}
module-info.java module-info.java
helper.api
helper
Well-defined Interfaces
main.web
main.persistence
main.integration
main
@Sander_Mak
module main {
requires helper;
}
module helper {
exports helper.api;
}
module-info.java module-info.java
helper.api
helper.impl
helper
Strong Encapsulation
main.web
main.persistence
main.integration
main
@Sander_Mak
Improvements Since Java 9
@Sander_Mak
Improvements Since Java 9
@Sander_Mak
Why?
@Sander_Mak
Why?
Modular JDK
@Sander_Mak
Why?
Modular JDK
Maintainability
Reliable composition
Flexibility
@Sander_Mak
Why?
Modular JDK
Maintainability
Reliable composition
jlink
main
lib1 lib2
java.base
java.logging
java.xml
Custom Run-time Image
Flexibility
@Sander_Mak
quick refresher
why/advantages
(JDK: modularized, your app: architecture from whiteboard to code, explicit dependencies in language, strong encapsulation, jlink
Why?
Decrease the model-code gap
@Sander_Mak
Let's Talk About Adoption
@Sander_Mak
Let's Talk About Adoption
@Sander_Mak
Let's Talk About Adoption
TEH
CODEZ
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
https://www.baeldung.com/java-in-2018
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
https://www.baeldung.com/java-in-2018
https://www.jetbrains.com/research/devecosystem-2018/java/
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
https://www.baeldung.com/java-in-2018
https://www.jetbrains.com/research/devecosystem-2018/java/
Java Magazine & Snyk
@Sander_Mak
https://jaxenter.com/java-8-still-strong-java-10-142642.html
https://www.baeldung.com/java-in-2018
https://www.jetbrains.com/research/devecosystem-2018/java/
Java Magazine & Snyk
@Sander_Mak
Java 11
@Sander_Mak
Java 11
Java 9
Java 10
Java 12
Java 13
6 months
Java 11
@Sander_Mak
Java 11
Java 9
Java 10
Java 12
Java 13
6 months
Java 11
@Sander_Mak
Java 11
Long
Term
Support
Java 9
Java 10
Java 12
Java 13
6 months
Java 11 Java 11 LTS
minimum 3 years
@Sander_Mak
What About the
Java Module System
?
@Sander_Mak
What About the
Java Module System
?
JCP Survey: https://www.surveymonkey.com/results/SM-YR7YQJJJL/
@Sander_Mak
Java 8 Lambdas &
Streams
@Sander_Mak
Java 8 Lambdas &
Streams
Java 9
Modularity
@Sander_Mak
Let's Talk About Libraries
@Sander_Mak
https://wiki.openjdk.java.net/display/quality/Quality+Outreach
OpenJDK Quality Outreach
@Sander_Mak
https://wiki.openjdk.java.net/display/quality/Quality+Outreach
OpenJDK Quality Outreach
Log4J, Jetty, Hibernate, Javassist, Mockito, RxJava, Spring, ...
@Sander_Mak
https://wiki.openjdk.java.net/display/quality/Quality+Outreach
OpenJDK Quality Outreach
Log4J, Jetty, Hibernate, Javassist, Mockito, RxJava, Spring, ...
60% Java 10 compatible
@Sander_Mak
Modular Libraries: Modularization Levels
@Sander_Mak
Modular Libraries: Modularization Levels
Level 0: ¯_(ツ)_/¯
@Sander_Mak
Modular Libraries: Modularization Levels
Level 0: ¯_(ツ)_/¯
Level 1: Automatic-Module-Name
@Sander_Mak
Modular Libraries: Modularization Levels
Level 0: ¯_(ツ)_/¯
Level 1: Automatic-Module-Name
Level 2: Publish modularized JAR
@Sander_Mak
Modular Libraries
@Sander_Mak
Modular Libraries
AdoptOpenJDK

ModuleScanner
+
@Sander_Mak
Modular Libraries
Level 2: Publish modularized JAR
Preliminary results
@Sander_Mak
Modular Libraries
Level 2: Publish modularized JAR
Preliminary results
1%
@Sander_Mak
Modular Libraries
Level 2: Publish modularized JAR
Preliminary results
1%
Level 1: Automatic-Module-Name
9%
@Sander_Mak
Modular Libraries
Level 2: Publish modularized JAR
Preliminary results
1%
Level 1: Automatic-Module-Name
9%
Level 0: ¯_(ツ)_/¯
90%
@Sander_Mak
Modular Libraries
Level 1: Spring, Hibernate, Jackson & other popular libs
@Sander_Mak
Modular Libraries
bit.ly/automaticmods
Urge library maintainers to
step up to at least Level 1
Level 1: Spring, Hibernate, Jackson & other popular libs
@Sander_Mak
Modular Libraries
AdoptOpenJDK

+
bit.ly/automaticmods
Urge library maintainers to
step up to at least Level 1
Level 1: Spring, Hibernate, Jackson & other popular libs
@Sander_Mak
Let's Talk About Java EE
@Sander_Mak
Let's Talk About Java EE
Jakarta EE
@Sander_Mak
bit.ly/jakartaee
Jakarta EE
@Sander_Mak
bit.ly/jakartaee
Jakarta EE
@Sander_Mak
bit.ly/jakartaee Embrace modules:
Modularized artifacts
Platform-wide structure
Optional modules
Jakarta EE
@Sander_Mak
Modules:
java.xml.bind
java.xml.ws
java.ws.rs
java.mail
java.json
...
Automatic modules:
java.persistence
java.transaction
java.activation
...
Jakarta EE
@Sander_Mak
Module-aware
WARs?
EARs?
@Sander_Mak
Module-aware
WARs?
EARs?
Enterprise
Edition
-
Call for pricing1
@Sander_Mak
Let's Talk About Tooling
@Sander_Mak
Let's Talk About Tooling
@Sander_Mak
@Sander_Mak
pom.xml
module1/
pom.xml
/src/main/java
/module-info.java
/com/m1/Mod1.java
module2/
pom.xml
/src/main/java
/module-info.java
/com/m2/Mod2.java
@Sander_Mak
pom.xml
module1/
pom.xml
/src/main/java
/module-info.java
/com/m1/Mod1.java
module2/
pom.xml
/src/main/java
/module-info.java
/com/m2/Mod2.java
@Sander_Mak
pom.xml
module1/
pom.xml
/src/main/java
/module-info.java
/com/m1/Mod1.java
module2/
pom.xml
/src/main/java
/module-info.java
/com/m2/Mod2.java
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
@Sander_Mak
Demo
@Sander_Mak
@Sander_Mak
@Sander_Mak
@Sander_Mak
guides.gradle.org/building-java-9-modules/
While Gradle version 4.10-rc-2
doesn’t have first-class support
for Java 9 modules yet, this guide
shows you how to experiment
with them before that support is
complete.
@Sander_Mak
guides.gradle.org/building-java-9-modules/
While Gradle version 4.10-rc-2
doesn’t have first-class support
for Java 9 modules yet, this guide
shows you how to experiment
with them before that support is
complete.
@Sander_Mak
guides.gradle.org/building-java-9-modules/
While Gradle version 4.10-rc-2
doesn’t have first-class support
for Java 9 modules yet, this guide
shows you how to experiment
with them before that support is
complete.
@Sander_Mak
guides.gradle.org/building-java-9-modules/
While Gradle version 4.10-rc-2
doesn’t have first-class support
for Java 9 modules yet, this guide
shows you how to experiment
with them before that support is
complete.
@Sander_Mak
22 June 2017
guides.gradle.org/building-java-9-modules/
While Gradle version 4.10-rc-2
doesn’t have first-class support
for Java 9 modules yet, this guide
shows you how to experiment
with them before that support is
complete.
@Sander_Mak
22 June 2017
@Sander_Mak
Fear No More!
@Sander_Mak
Fear No More!
@Sander_Mak
Fear No More!
github.com/java9-modularity/gradle-modules-plugin
@Sander_Mak
Let's Talk About Tooling
IDE
@Sander_Mak
@Sander_Mak
@Sander_Mak
@Sander_Mak
Let's Talk About Tooling
MISC
@Sander_Mak
Black Box Testing
@Sander_Mak
mylibrary.api
mylibrary.impl
mylibrary
Black Box Testing
@Sander_Mak
mylibrary.api
mylibrary.impl
mylibrary
JUnit5 + junit-platform-maven-plugin
Black Box Testing
@Sander_Mak
mylibrary.api
mylibrary.impl
mylibrary
JUnit5 + junit-platform-maven-plugin
Black Box Testing
mylibrary.itest.Test
mylibrary.itest
requires
@Sander_Mak
mylibrary.api
mylibrary.impl
mylibrary
JUnit5 + junit-platform-maven-plugin
Black Box Testing
mylibrary.itest.Test
mylibrary.itest
requires
@Sander_Mak
mylibrary.api
mylibrary.impl
mylibrary
JUnit5 + junit-platform-maven-plugin
White Box Testing
@Sander_Mak
mylibrary.api
mylibrary.impl
mylibrary
JUnit5 + junit-platform-maven-plugin
White Box Testing
mylibrary.impl.Test
mylibrary
@Sander_Mak
mylibrary.api
mylibrary.impl
mylibrary
JUnit5 + junit-platform-maven-plugin
White Box Testing
mylibrary.impl.Test
mylibrary
--patch-module
@Sander_Mak
mylibrary.api
mylibrary.impl
mylibrary.impl.Test
mylibrary
JUnit5 + junit-platform-maven-plugin
White Box Testing
mylibrary.impl.Test
mylibrary
--patch-module
@Sander_Mak
jlink
@Sander_Mak
jlink
+
main
lib1 lib2
jdk
~300mb
application
~2mb
@Sander_Mak
jlink
+
main
lib1 lib2
jdk
~300mb
application
~2mb JVM
main
lib1 lib2
java.base
java.logging
java.xml
Custom Run-time Image
~25mb
@Sander_Mak
jlink
+
main
lib1 lib2
jdk
~300mb
application
~2mb JVM
main
lib1 lib2
java.base
java.logging
java.xml
Custom Run-time Image
@Sander_Mak
IoT Device
jlink
+
main
lib1 lib2
jdk
~300mb
application
~2mb JVM
main
lib1 lib2
java.base
java.logging
java.xml
Custom Run-time Image
@Sander_Mak
ModiTect Manage module-info in Maven
@Sander_Mak
ModiTect
<groupId>org.moditect</groupId>
<artifactId>moditect-maven-plugin</artifactId>
...
<module>
<moduleInfo>
<name>easytext.gui</name>
<exports>javamodularity.easytext.api.*;</exports>
<opens>javamodularity.easytext.gui to javafx.graphics;</opens>
<addServiceUses>true</addServiceUses>
</moduleInfo>
<mainClass>javamodularity.easytext.gui.Main</mainClass>
</module>
Manage module-info in Maven
@Sander_Mak
ModiTect
<groupId>org.moditect</groupId>
<artifactId>moditect-maven-plugin</artifactId>
...
<module>
<moduleInfo>
<name>easytext.gui</name>
<exports>javamodularity.easytext.api.*;</exports>
<opens>javamodularity.easytext.gui to javafx.graphics;</opens>
<addServiceUses>true</addServiceUses>
</moduleInfo>
<mainClass>javamodularity.easytext.gui.Main</mainClass>
</module>
Manage module-info in Maven
@Sander_Mak
ModiTect
<groupId>org.moditect</groupId>
<artifactId>moditect-maven-plugin</artifactId>
...
<module>
<moduleInfo>
<name>easytext.gui</name>
<exports>javamodularity.easytext.api.*;</exports>
<opens>javamodularity.easytext.gui to javafx.graphics;</opens>
<addServiceUses>true</addServiceUses>
</moduleInfo>
<mainClass>javamodularity.easytext.gui.Main</mainClass>
</module>
Manage module-info in Maven
@Sander_Mak
ModiTect
<groupId>org.moditect</groupId>
<artifactId>moditect-maven-plugin</artifactId>
...
<module>
<moduleInfo>
<name>easytext.gui</name>
<exports>javamodularity.easytext.api.*;</exports>
<opens>javamodularity.easytext.gui to javafx.graphics;</opens>
<addServiceUses>true</addServiceUses>
</moduleInfo>
<mainClass>javamodularity.easytext.gui.Main</mainClass>
</module>
Manage module-info in Maven
@Sander_Mak
ModiTect
Add module descriptors to existing JARs
Use jlink with automatic modules too
Create Docker + custom-runtime image
You can keep your build on Java 8
@Sander_Mak
It's Time to Wrap Up
@Sander_Mak
@Sander_Mak
Java 9
Java 10
@Sander_Mak
Java
9
Java
10
@Sander_Mak
@Sander_Mak
"It is too early to say whether
modules will achieve widespread
use outside of the JDK itself. In
the meantime, it seems best to
avoid them unless you have a
compelling need."
-- Josh Bloch
@Sander_Mak
"It is too early to say whether
modules will achieve widespread
use outside of the JDK itself. In the
meantime, it seems best to see for
yourself whether a modular
approach fits your codebase."
-- Sander Mak
Thanks. Read More:
javamodularity.com
@Sander_Mak
bit.ly/ps-sander

Weitere ähnliche Inhalte

Was ist angesagt?

Modules or microservices?
Modules or microservices?Modules or microservices?
Modules or microservices?
Sander Mak (@Sander_Mak)
 
Project Presentation on Advance Java
Project Presentation on Advance JavaProject Presentation on Advance Java
Project Presentation on Advance Java
Vikas Goyal
 

Was ist angesagt? (20)

Modular Java
Modular JavaModular Java
Modular Java
 
Developing modular Java applications
Developing modular Java applicationsDeveloping modular Java applications
Developing modular Java applications
 
Modular JavaScript
Modular JavaScriptModular JavaScript
Modular JavaScript
 
Java 9 modularity
Java 9 modularityJava 9 modularity
Java 9 modularity
 
Java 9 and Project Jigsaw
Java 9 and Project JigsawJava 9 and Project Jigsaw
Java 9 and Project Jigsaw
 
Java 9 preview
Java 9 previewJava 9 preview
Java 9 preview
 
Modularization With Project Jigsaw in JDK 9
Modularization With Project Jigsaw in JDK 9Modularization With Project Jigsaw in JDK 9
Modularization With Project Jigsaw in JDK 9
 
Polygot Java EE on the GraalVM
Polygot Java EE on the GraalVMPolygot Java EE on the GraalVM
Polygot Java EE on the GraalVM
 
Java modules using project jigsaw@jdk 9
Java modules using project jigsaw@jdk 9Java modules using project jigsaw@jdk 9
Java modules using project jigsaw@jdk 9
 
Modules or microservices?
Modules or microservices?Modules or microservices?
Modules or microservices?
 
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
 
Java 9 Module System Introduction
Java 9 Module System IntroductionJava 9 Module System Introduction
Java 9 Module System Introduction
 
Java modularization
Java modularizationJava modularization
Java modularization
 
JDK-9: Modules and Java Linker
JDK-9: Modules and Java LinkerJDK-9: Modules and Java Linker
JDK-9: Modules and Java Linker
 
Project Presentation on Advance Java
Project Presentation on Advance JavaProject Presentation on Advance Java
Project Presentation on Advance Java
 
Springboot introduction
Springboot introductionSpringboot introduction
Springboot introduction
 
Java 9 New Features
Java 9 New FeaturesJava 9 New Features
Java 9 New Features
 
Workshop Framework(J2EE/OSGi/RCP)
Workshop Framework(J2EE/OSGi/RCP)Workshop Framework(J2EE/OSGi/RCP)
Workshop Framework(J2EE/OSGi/RCP)
 
Advance java Online Training in Hyderabad
Advance java Online Training in HyderabadAdvance java Online Training in Hyderabad
Advance java Online Training in Hyderabad
 
Java modules
Java modulesJava modules
Java modules
 

Ähnlich wie Java Modularity: the Year After

1java Introduction
1java Introduction1java Introduction
1java Introduction
Adil Jafri
 
Sakai 2.0 Architecture Update 2005-06-09
Sakai 2.0 Architecture Update 2005-06-09Sakai 2.0 Architecture Update 2005-06-09
Sakai 2.0 Architecture Update 2005-06-09
Charles Severance
 

Ähnlich wie Java Modularity: the Year After (20)

Sander Mak - Keeping Up With Java - Codemotion Rome 2019
Sander Mak - Keeping Up With Java - Codemotion Rome 2019Sander Mak - Keeping Up With Java - Codemotion Rome 2019
Sander Mak - Keeping Up With Java - Codemotion Rome 2019
 
Java 9 / Jigsaw - AJUG/VJUG session
Java 9 / Jigsaw - AJUG/VJUG  sessionJava 9 / Jigsaw - AJUG/VJUG  session
Java 9 / Jigsaw - AJUG/VJUG session
 
Introduction to Java
Introduction to JavaIntroduction to Java
Introduction to Java
 
1java Introduction
1java Introduction1java Introduction
1java Introduction
 
Sakai 2.0 Architecture Update 2005-06-09
Sakai 2.0 Architecture Update 2005-06-09Sakai 2.0 Architecture Update 2005-06-09
Sakai 2.0 Architecture Update 2005-06-09
 
Codename BEAN.pptx
Codename BEAN.pptxCodename BEAN.pptx
Codename BEAN.pptx
 
java web framework standard.20180412
java web framework standard.20180412java web framework standard.20180412
java web framework standard.20180412
 
Unit1 introduction to Java
Unit1 introduction to JavaUnit1 introduction to Java
Unit1 introduction to Java
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
 
Java ms harsha
Java ms harshaJava ms harsha
Java ms harsha
 
The Art of Metaprogramming in Java
The Art of Metaprogramming in Java  The Art of Metaprogramming in Java
The Art of Metaprogramming in Java
 
Java training noida hibernate+spring+struts+web services(1)
Java training noida hibernate+spring+struts+web services(1)Java training noida hibernate+spring+struts+web services(1)
Java training noida hibernate+spring+struts+web services(1)
 
Netbeans 6.1 Talk
Netbeans 6.1 TalkNetbeans 6.1 Talk
Netbeans 6.1 Talk
 
JAVA ALL 5 MODULE NOTES.pptx
JAVA ALL 5 MODULE NOTES.pptxJAVA ALL 5 MODULE NOTES.pptx
JAVA ALL 5 MODULE NOTES.pptx
 
gopal hp
gopal hpgopal hp
gopal hp
 
java full stack content 2 (2023).docx
java full stack content 2 (2023).docxjava full stack content 2 (2023).docx
java full stack content 2 (2023).docx
 
java full stack
java full stackjava full stack
java full stack
 
java full stack content
java full stack contentjava full stack content
java full stack content
 
Apache maven and its impact on java 9 (Java One 2017)
Apache maven and its impact on java 9 (Java One 2017)Apache maven and its impact on java 9 (Java One 2017)
Apache maven and its impact on java 9 (Java One 2017)
 
159747608 a-training-report-on
159747608 a-training-report-on159747608 a-training-report-on
159747608 a-training-report-on
 

Mehr von Sander Mak (@Sander_Mak)

Mehr von Sander Mak (@Sander_Mak) (20)

Scalable Application Development @ Picnic
Scalable Application Development @ PicnicScalable Application Development @ Picnic
Scalable Application Development @ Picnic
 
Coding Your Way to Java 13
Coding Your Way to Java 13Coding Your Way to Java 13
Coding Your Way to Java 13
 
Java 9 Modularity in Action
Java 9 Modularity in ActionJava 9 Modularity in Action
Java 9 Modularity in Action
 
Provisioning the IoT
Provisioning the IoTProvisioning the IoT
Provisioning the IoT
 
Event-sourced architectures with Akka
Event-sourced architectures with AkkaEvent-sourced architectures with Akka
Event-sourced architectures with Akka
 
TypeScript: coding JavaScript without the pain
TypeScript: coding JavaScript without the painTypeScript: coding JavaScript without the pain
TypeScript: coding JavaScript without the pain
 
The Ultimate Dependency Manager Shootout (QCon NY 2014)
The Ultimate Dependency Manager Shootout (QCon NY 2014)The Ultimate Dependency Manager Shootout (QCon NY 2014)
The Ultimate Dependency Manager Shootout (QCon NY 2014)
 
Modularity in the Cloud
Modularity in the CloudModularity in the Cloud
Modularity in the Cloud
 
Cross-Build Injection attacks: how safe is your Java build?
Cross-Build Injection attacks: how safe is your Java build?Cross-Build Injection attacks: how safe is your Java build?
Cross-Build Injection attacks: how safe is your Java build?
 
Scala & Lift (JEEConf 2012)
Scala & Lift (JEEConf 2012)Scala & Lift (JEEConf 2012)
Scala & Lift (JEEConf 2012)
 
Hibernate Performance Tuning (JEEConf 2012)
Hibernate Performance Tuning (JEEConf 2012)Hibernate Performance Tuning (JEEConf 2012)
Hibernate Performance Tuning (JEEConf 2012)
 
Akka (BeJUG)
Akka (BeJUG)Akka (BeJUG)
Akka (BeJUG)
 
Fork Join (BeJUG 2012)
Fork Join (BeJUG 2012)Fork Join (BeJUG 2012)
Fork Join (BeJUG 2012)
 
Fork/Join for Fun and Profit!
Fork/Join for Fun and Profit!Fork/Join for Fun and Profit!
Fork/Join for Fun and Profit!
 
Kscope11 recap
Kscope11 recapKscope11 recap
Kscope11 recap
 
Java 7: Fork/Join, Invokedynamic and the future
Java 7: Fork/Join, Invokedynamic and the futureJava 7: Fork/Join, Invokedynamic and the future
Java 7: Fork/Join, Invokedynamic and the future
 
Scala and Lift
Scala and LiftScala and Lift
Scala and Lift
 
Elevate your webapps with Scala and Lift
Elevate your webapps with Scala and LiftElevate your webapps with Scala and Lift
Elevate your webapps with Scala and Lift
 
Hibernate performance tuning
Hibernate performance tuningHibernate performance tuning
Hibernate performance tuning
 
JDK7: Improved support for dynamic languages
JDK7: Improved support for dynamic languagesJDK7: Improved support for dynamic languages
JDK7: Improved support for dynamic languages
 

Kürzlich hochgeladen

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
anilsa9823
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Kürzlich hochgeladen (20)

Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 

Java Modularity: the Year After