Thursday, November 15, 2012

Meta-Annotations


Meta-Annotations

Meta-Annotations are an experiment in annotation inheritance, abstraction and encapsulation with a Java SE mindset
A meta-annotation is any annotation class annotated with @Metatype. The other annotations used on the meta-annotation become part of its definition. If any of those annotations happen to also be meta-annotations, they are unrolled as well and their annotations become part of the definition.

@Metatype

The recursion that is the meta-annotation concept only happens when an annotation is marked as a @javax.annotation.Metatype.
When @Metatype is seen the basic contract is "carry the surrounding annotations forward". When a class, method or other target uses an annotation annotated with @Metatype the annotations on that annotation are "unrolled" or carried forward and effectively placed on that class, method or other target as if they were explicitly declared.
If any of the annotations that are carried forward also are annotated with @Metatype the recursion continues. The result is a simple algorithm or design pattern that provides inheritance or reuse in a way that is not specific to any domain, API, or specification.
APIs and specifications can choose to formally adopt annotation reuse in this fashion, but the core concept and implementations of@Metatype do not need to be expanded to support these APIs or specifications.
The simple elegance of this not being domain specific is that it could be used to combine several annotations from different specifications into one reusable annotation. Say JAX-RS @PathParam("id") with Bean Validation @NotNull to create a new annotation called @ValidId.

Creating Meta-Annotations

If the annotation in question can be applied to ElementType.ANNOTATION_TYPE or ElementType.TYPE, creating a meta-annotation version of it is quite easy.
@TransactionManagement(TransactionManagementType.CONTAINER)
@Metatype
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ContainerManagedTransactions {
}
When the annotation in question cannot be applied to ElementType.ANNOTATION_TYPE or ElementType.TYPE, things get interesting. This is where meta-annotations depart from things like @Stereotype. The goal of meta-annotations is to be completely generic and not specific to any one domain or API. A such, you cannot really require all existing APIs change to allow for meta-annotations. The goal is that meta-annotations can be used generically and do not need to be "designed" into an API.
To allow annotations that apply to FIELDMETHODPARAMETERCONSTRUCTORLOCAL_VARIABLE, or PACKAGE, as well as any other location where annotations may be applied in the future a compromise is made.
import javax.ejb.Schedule;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Metatype
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)

public @interface Daily {
    public static class $ {

        @Daily
        @Schedule(second = "0", minute = "0", hour = "0", month = "*", dayOfWeek = "*", year = "*")
        public void method() {
        }
    }
}
An inner class named $. This is enough to bind together the @Daily and @Schedule in the context to which they both apply.
Ugly but effective. Alternate proposals welcome.
The above is considered the public API portion of the meta-annotation concept.
The concept itself is born out of standards based systems like EJB and CDI where annotation processing is invisible to the application itself. In those settings the above is enough and no additional APIs would be needed to support meta-annotations in standard APIs.

Under the covers

The "guts" of this particular implementation is designed to look and feel as much like the reflection API as possible. Obviously, with VM level control, you could do much better. A clean Java SE API might be just what is needed and its very possible that meta-annotations should really be a Java SE concept.
Here's a glimpse as to how things can look under the covers:
final java.lang.reflect.AnnotatedElement annotated = new org.metatype.MetaAnnotatedClass(Triangle.class);
assertNotNull(annotated);

assertTrue(annotated.isAnnotationPresent(Color.class));
assertTrue(annotated.getAnnotation(Color.class) != null);
assertTrue(!contains(Color.class, annotated.getDeclaredAnnotations()));
assertTrue(contains(Color.class, annotated.getAnnotations()));
assertEquals("red", annotated.getAnnotation(Color.class).value());

assertTrue(annotated.isAnnotationPresent(Red.class));
assertTrue(annotated.getAnnotation(Red.class) != null);
assertTrue(!contains(Red.class, annotated.getDeclaredAnnotations()));
assertTrue(contains(Red.class, annotated.getAnnotations()));

assertTrue(annotated.isAnnotationPresent(Crimson.class));
assertTrue(annotated.getAnnotation(Crimson.class) != null);
assertTrue(contains(Crimson.class, annotated.getDeclaredAnnotations()));
assertTrue(contains(Crimson.class, annotated.getAnnotations()));
The application classes would look like so:
@Crimson
// -> @Red -> @Color
public static class Triangle {

}

@Metatype
@Color("red")
// one level deep
@Target(value = {TYPE})
@Retention(value = RUNTIME)
public static @interface Red {
}

@Metatype
@Red
// two levels deep
@Target(value = {TYPE})
@Retention(value = RUNTIME)
public static @interface Crimson {
}

Best Practices
It is recommended to have an api package or some other package where "approved' annotations are defined and to prohibit usage of the non-meta versions of those annotations. All the real configuration will then be centralized in the api package and changes to the values of those annotations will be localized to that package and automatically be reflected throughout the application.
An interesting side-effect of this approach is that if the api package where the meta-annotation definitions exist is kept in a separate jar as well, then one can effectively change the configuration of an entire application by simply replacing the api jar.

Future concepts

XML Overriding

The unrolling of meta-annotations happens under the covers. In that same vein, so could the concept of overriding.
The above @Red annotation might theoretically be overridden via xml as follows:

<org.superbiz.api.Red>
  <org.superbiz.api.Color value="dark red"/>
</org.superbiz.api.Red>
Or take more complex meta-annotation definition like the following:
package org.superbiz.corn.meta.api;

import javax.ejb.Schedule;
import javax.ejb.Schedules;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Metatype
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)

public @interface PlantingTime {
    public static interface $ {

        @PlantingTime
        @Schedules({
                @Schedule(month = "5", dayOfMonth = "20-Last", minute = "0", hour = "8"),
                @Schedule(month = "6", dayOfMonth = "1-10", minute = "0", hour = "8")
        })
        public void method();
    }
}
This might theoretically be overridden as:

<org.superbiz.corn.meta.api.PlantingTime>
  <javax.ejb.Schedules>
    <value>
      <javax.ejb.Schedule month="5" dayOfMonth="15-Last" minute="30" hour="5"/>
      <javax.ejb.Schedule month="6" dayOfMonth="1-15" minute="30" hour="5"/>
    </value>
  </javax.ejb.Schedules>
</org.superbiz.corn.meta.api.PlantingTime>

Merging or Aggregating definitions
Certain annotations take lists and are designed to be multiples. In the current definition of meta-annotations, the following is illegal.
@RolesAllowed({"Administrator", "SuperUser"})
@Metatype
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Admins {
}

@RolesAllowed({"Employee", "User"})
@Metatype
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Users {
}


public static class MyBean {

    @Admin
    @User
    public void doSomething() {
        // ...
    }
}
Here the @Admin and @User annotation each resolve to @RolesAllowed. Since only one @RolesAllowed annotation is allowed on the method per the Java language specification, this results in an error.
The intention is clear however and aggregating metadata together in this way is natural.
A theoretical way to support something like this is with an annotation to describe that this aggregation is intended and desired. Note the addition of the theoretical @Merge annotation.
@RolesAllowed({"Administrator", "SuperUser"})
@Metatype
@Merge
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Admins {
}

@RolesAllowed({"Employee", "User"})
@Metatype
@Merge
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Users {
}


public static class MyBean {

    @Admin
    @User
    public void doSomething() {
        // ...
    }
}
A new @RolesAllowed annotation would be created containing the list {"Administrator", "SuperUser", "Employee", "User"} and that would represent the final @RolesAllowed usage for the doSomething() method.

121 comments:

Yeroc said...

Like the idea but would it not be better to extend the existing CDI @Stereotype annotation to work like this rather than introducing a new annotation?

Monster said...

Hi. This is quite interesting, but without a license, most devs (including me) would stay away from your code. Could you please add a license in the Github repo?

Ajay Raj said...

Great Blog posting...

Rhce Training in Chennai
Red Hat Linux Trainng in Chennai

Unknown said...

Thanks for sharing This wonderful information, looking to read some more.
Ecare Technologies

DevOps Training Institutes in Bangalore

Cloud Computing Training Institutes in Bangalore

Big Data Training Institutes in Bangalore

Unknown said...

Thanks for sharing in this blog...

PLC training in Cochin, Kerala
Automation training in Cochin, Kerala
Embedded System training in Cochin, Kerala
VLSI training in Cochin, Kerala
PLC training institute in Cochin, Kerala
Embedded training in Cochin, Kerala
Best plc training in Cochin, Kerala

Unknown said...


Good and nice blog post, thanks for sharing your information.. it is very useful to me.. keep rocks and updating..

Android Training in chennai | Android course in chennai

Unknown said...

Here is how you can download iOS 11 beta 4 for your iPhone or iPad devices. We compiled a detailed guide on how to install iOS 11 beta 4.

luu quoc trung said...


Thank you both for sharing Holy Mass with us each day FNAF Sister Location Juegos Friv Friv 2018 to make yourselves available Friv Twizl Jeux De Twizl Juegos De FNAF Sister Location when we were called out late at night and any other time and for your support and encouragement in every respect. Juegos Friv 2021 Juegos Twizl Juegos Yepi 2017 Juegos De Twizl

Danish Ahmed said...

Thanks for sharing this article, now you can also check your Recuritment & Notification 2017-2018 by following below given links...

fci andhra pradesh watchman recuritment 2017

fci tamilnadu watchman recuritment 2017

xat notification 2018

jkbote polytechnic result 2017

mishti said...

Your Meta annotation concept is energetic. From this post, everybody can realize the uniqueness of your level. I suppose, you are very brilliant in different programming languages.
Web application projects

adidas nmd said...

nhl jerseys
cheap ray bans
oakley sunglasses wholesale
ralph lauren polo
fitflops sale clearance
nike blazer pas cher
christian louboutin shoes
cheap ray ban sunglasses
oakley sunglasses
nike outlet

Unknown said...

Great Blog posting...

PHP Training Institute in Chennai

Shawn Williams said...


Mobdro app is an excellent online video streaming software available for all other devices like Android, Windows PC, iPhone and iPads. You may even download it on Amazon fire tv.
Check the process here:
troypoint mobdro

Elysium Academy said...

great participation i am passionate on writing java programming always willing to learn object oriented programming updates. especially Code re usability inheritance above you have explain meta annotation concepts i am sure implement this concepts in my Java Training Center no doubt that it will improves my coding skills

Anonymous said...

I’m very happy to read this. This is the kind of manual that needs to be given and not the accidental misinformation that is at the other blogs. Appreciate your sharing this greatest doc!
Friv Jogos online

Elysium Academy said...
This comment has been removed by the author.
Elysium Academy said...

Thanks for sharing informative post. Your Meta annotation concept is unique. It's a great ideal for learn new technology
Networking Training Courses

Perjalanan Menuju Hijrah said...

Like the idea but would it not be better to extend the existing CDI @Stereotype annotation to work like this rather than introducing a new annotation?

sorry izin share

http://www.klikgamat.com/2018/08/cara-mencegah-dan-mengobati-diare-pada-anak-dan-dewasa.html
http://gamatori.com/2018/08/11/obat-alami-mencegah-menopause-dini-paling-ampuh/

prabha said...

Awesome..You have clearly explained …Its very useful for me to know about new things..Keep on blogging..
angularjs Training in marathahalli

angularjs interview questions and answers

angularjs Training in bangalore

angularjs Training in bangalore

angularjs Training in chennai

automation anywhere online Training

simbu said...

Excellant post!!!. The strategy you have posted on this technology helped me to get into the next level and had lot of information in it.

Java training in Bangalore | Java training in Btm layout

Java training in Bangalore | Java training in Marathahalli

Java training in Bangalore | Java training in Btm layout

Java training in Bangalore |Java training in Rajaji nagar

gowsalya said...

Outstanding blog post, I have marked your site so ideally I’ll see much more on this subject in the foreseeable future.
python training in rajajinagar
Python training in bangalore
Python training in usa

shalinipriya said...

I believe there are many more pleasurable opportunities ahead for individuals that looked at your site.
Data Science training in kalyan nagar
Data Science training in OMR | Data science training in chennai
Data Science training in chennai | Best Data science Training in Chennai
Data science training in velachery | Data Science Training in Chennai
Data science training in tambaram | Data Science training in Chennai
Data science training in jaya nagar | Data science Training in Bangalore

Dharani M said...

good information
java training in Marathahalli

spring training in Marathahalli

java training institute in Marathahalli

spring and hibernate training in Marathahalli

mounika said...

Nice post..

DOT NET training in btm

dot net training institute in btm

dot net course in btm

best dot net training institute in btm DOT NET training in btm

dot net training institute in btm

dot net course in btm

best dot net training institute in btm

cynthiawilliams said...

Thanks for sharing this pretty post, it was good and helpful. Share more like this.
ReactJS Training in Chennai
AngularJS Training in Chennai
AngularJS course in Chennai
AWS Training in Chennai
DevOps Training in Chennai
RPA Training in Chennai
R Programming Training in Chennai

alex said...

Come in and win right now. best slot machines Do not lose your luck.

Sumaya Manzoor said...

Excellent blog. Looking for software courses?

Hadoop Training in Chennai
Android Training in Chennai
Selenium Training in Chennai
Digital Marketing Training in Chennai
JAVA Training in Chennai
German Classes in chennai
PHP Training in Chennai
PHP Training in T Nagar

jefrin said...

Good to read thanks for sharing

R programming training institute chennai

cynthiawilliams said...

Hearty thanks to you admin, your blog is awesome and helpful. Keep your blog with latest information.
Robotics Process Automation Training in Chennai
Blue Prism Training in Chennai
UiPath Training in Chennai
Data Science Course in Chennai
RPA Training in Anna Nagar
RPA Training in Chennai
RPA course in Chennai

Sivanandhana Girish said...

This is a very helpful blog for one who needs to learn in a short span of time.

Spoken English Classes in Velachery
Spoken English in Velachery
Spoken English Classes in Tambaram
Spoken English Class in Chrompet
Spoken English Classes in OMR Chennai
Spoken English Classes in Navalur
Spoken English Class in Ambattur
Spoken English Class in Avadi

Anonymous said...

Thanks for splitting your comprehension with us. It’s really useful to me & I hope it helps the people who in need of this vital information
Aviation Academy in Chennai
Air hostess training in Chennai
Airport management courses in Chennai
Ground staff training in Chennai

sandeep saxena said...

Thanks a lot for your help on this. I look forward to reading more articles from you!
core java training in chennai
core java Training in Velachery
c++ courses in chennai
c c++ courses in chennai
javascript training in chennai
javascript course in chennai
core java Training in OMR
clinical sas training in chennai

service care said...

I enjoy what you guys are usually up too. This sort of clever work and coverage! Keep up the wonderful works guysl.Good going.
lg mobile service center in chennai
lg mobile service center

Sadhana Rathore said...

I really admired your post, such great and useful information that you have mentioned here.
AWS Certification in Chennai
AWS course in Chennai
Cloud Computing Training in Chennai
Cloud Computing courses in Chennai
Azure Training in Chennai
Microsoft Azure Training in Chennai
DevOps Training in Chennai
AWS Training in Chennai
AWS course in Chennai

Eillen Sharma said...

Escort service in Gurgaon
Escort service in Gurgaon

Escort service in Kolkata
Escort service in Bangalore
Escort service in Mumbai

Samuel mark said...

contacting Yahoo through Yahoo Contact phone number.If any of your queries is not being resolved in Yahoo, then you can contact Yahoo anytime here.

Contact Yahoo! Customer Service Number Fix Yahoo! Error with Yahoo! Customer .Yahoo phone number for help with Yahoo Mail absolute support for Yahoo !

Anonymous said...

I am so grateful for your article.Really looking forward to read more. Great.

Escorts Services in Aerocity
Call Girls in Mahipalpur

Rathinam said...


Hi,This is a nice post! I like this post. I read your all post, which is very useful information with a brief explanation. I waiting for your new blog, do well...!
Social Media Marketing Courses in Chennai
Social Media Marketing Training
Embedded System Course Chennai
Linux Training in Chennai
Tableau Training in Chennai
Spark Training in Chennai
Oracle DBA Training in Chennai
Social Media Marketing Courses in Chennai
Social Media Marketing Training in Chennai

Aditi Ray said...
This comment has been removed by the author.
saranya said...

Good Post! Thank you so much for sharing this pretty post, it was so good to read and useful to improve my knowledge as updated one, keep blogging.
python training in Bangalore

Kiruthiprabha said...

This is an awesome post. Really very informative and creative contents. This concept is a good way to enhance knowledge. I like it and help me to development very well. Thank you for this brief explanation and very nice information. Well, got good knowledge.
Oracle DBA Online Training

gowsalya said...

I found your blog while searching for the updates, I am happy to be here. Very useful content and also easily understandable providing.. Believe me I did wrote an post about tutorials for beginners with reference of your blog. 
Microsoft azure training in chennai

gowsalya said...

Hi, Great.. Tutorial is just awesome..It is really helpful for a newbie like me.. I am a regular follower of your blog. Really very informative post you shared here. Kindly keep blogging.
msbi online training

rithiaanandh said...

Thanks for splitting your comprehension with us. It’s really useful to me & I hope it helps the people who in need of this vital information.
Sql server dba online training

Christoper stalin said...

Thanks for sharing this blog!!!
web design and programming courses
php institute in chennai
magento 2 course

Joyti web expert said...

I am frequent visitor of your website as i love to read out the articles posted on your website. At the same time i request to post some great article on Study MBBS in Abroad Ukraine - Ternopil Medical Universityand similar as well. Thanks !!!

pavithra dass said...

Your article is worth reading! You are providing a lot of valid information.This'll be really helpful for my reference. Do share more such articles.
R Training in Chennai
Data Analytics Training in Chennai
Data Science Training in Chennai
UiPath Training in Chennai
Cloud Computing Training in Chennai
R Training in OMR
R Training in Porur
R Training in Vadapalani

Anonymous said...

Such a very useful article amazon web services training. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article.

Anbarasan14 said...

Nice post. Thanks for sharing.
Spoken English Classes in Chennai
Spoken English Class in Chennai
Spoken English in Chennai
IELTS Training in Chennai
IELTS Chennai
Best English Speaking Classes in Mumbai
Spoken English Classes in Mumbai
IELTS Mumbai
IELTS Center in Mumbai
IELTS Coaching in T Nagar

Ranikamala said...


Hey, Your post is very informative and helpful for us.
In fact, I am looking at this type of article from some days.
Thanks a lot to share this informative article.
SAP HANA Training In Hyderabad

Carpet Thailand said...

This is a great inspiring article. I am pretty much pleased with your good work. Please share good post on Carpet Washing in Thailand also Keep it up. Keep blogging. Looking to reading your next post.

daizy mathew said...

Thanks for sharing this useful information.
PythonClass

daizy mathew said...

Thanks for sharing this useful information
php training in chennai

gowsika said...

This blog is very impressive,this blog is more helpful to me..
Air Hostess Training Institute in chennai
Air hostess Training Institute in Bangalore
Air hostess Training Fees in Mumbai
Air Hostess Training in Chennai
Aviation courses in Bangalore
Air Hostess Training in Chennai
Air Hostess Training Institute in chennai
Aviation Courses in Chennai
Aviation Institute in Bangalore
Air Hostess Course in Chennai

zuan said...

I like the helpful info you provide in your articles. I’ll bookmark your weblog and check again here regularly. I am quite sure I will learn much new stuff right here! Good luck for the next!
web designer courses in chennai | best institute for web designing Classes in Chennai

web designing courses in chennai | web designing institute in chennai | web designing training institute in chennai

web designing training in chennai | web design and development institute

web designing classes in Chennai | web designer course in Chennai


web designingtraining course in chennai with placement | web designing and development Training course in chennai

Anonymous said...

Nice Post
For Data Science training in Bangalore,Visit:
Data Science training in Bangalore

Jackie Co Kad said...

Great Article
IEEE Projects on Cloud Computing
Final Year Projects for CSE


JavaScript Training in Chennai
JavaScript Training in Chennai

Bhanu Ravi said...

Very nice post here and thanks for it .I always like and such a super blog of these post.Excellent and very cool idea and great blog of different kinds of the valuable information's.
aws Training in Bangalore
python Training in Bangalore
hadoop Training in Bangalore
angular js Training in Bangalore
bigdata analytics Training in Bangalore

Digital_seo said...

Thank you for sharing useful information. Keep sharing more post
Selenium Training in Bangalore |
Best Selenium Training Institute in Bangalore |
Selenium Training in Marathahalli|
Automation Testing Training in Marathahalli |
Best Selenium Training in Bangalore


ethiraj raj said...

I am impressed by the way of writing your blog and topics which you covered. I read all your post which is useful and informative.
aws Training in Bangalore
python Training in Bangalore
hadoop Training in Bangalore
angular js Training in Bangalore
bigdata analytics Training in Bangalore

Training for IT and Software Courses said...

Awesome post with lots of data and I have bookmarked this page for my reference. Share more ideas frequently.javascript training in bangalore

Training for IT and Software Courses said...

I must appreciate you for providing such a valuable content for us. This is one amazing piece of article.Helped a lot in increasing my knowledge.sap hr training in bangalore

Training for IT and Software Courses said...

Wow it is really wonderful and awesome thus it is veWow, it is really wonderful and awesome thus it is very much useful for me to understand many concepts and helped me a lot.html training in bangalore

Training for IT and Software Courses said...

Excellent post for the people who really need information for this technology.

sql server dba training in bangalore

sql server dba courses in bangalore

sql server dba classes in bangalore

sql server dba training institute in bangalore

sql server dba course syllabus

best sql server dba training

sql server dba course syllabus

best sql server dba training

sql server dba training centers

Kanye Co Jamila said...


Great Article
Data Mining Projects


Python Training in Chennai

Project Centers in Chennai

Python Training in Chennai

Softgen Infotech said...

Really i appreciate the effort you made to share the knowledge. The topic here i found was really effective...

Learn DevOps Training from the Industry Experts we bridge the gap between the need of the industry. Softgen Infotech provide the Best DevOps Training in Bangalore with 100% Placement Assistance. Book a Free Demo Today.

Durai Moorthy said...

Nice blog, thanks for sharing. Please Update more blog about this, this is really informative for me as well
aws Training in Bangalore
python Training in Bangalore
hadoop Training in Bangalore
angular js Training in Bangalore
bigdata analytics Training in Bangalore
python Training in Bangalore
aws Training in Bangalore

janani ram said...

This is good information and really helpful for the people who need information about this.
content writing course in chennai
content writing training in chennai
Blockchain Training in Chennai
Ionic Training in Chennai
IoT Training in Chennai
Xamarin Training in Chennai
Node JS Training in Chennai
German Classes in Anna Nagar
Spoken English Classes in Anna Nagar

Ruhi Sukhla said...

Very Useful And Informative Article.....

ba time table 2020 vbspu

Brucehank12 said...


I just read your post and would like to thank you for maintaining such a cool blog.
Awesome content. I bookmarked it for future reference. canon mx492 wireless setup

Data Science Course said...

awesome Post!!! I finally found great post here.I really enjoyed reading this article. Thanks for sharing valuable information.
Data Science Course in Marathahalli
Data Science Course Training in Bangalore

subha said...

Thank you so much for updating the useful blog. I liked this blog..
Spoken English Classes in Bangalore
Spoken English Classes in Chennai
Spoken English Classes in BTM
Spoken English Classes in Marathahalli
Spoken English Classes near Marathahalli
Spoken English Marathahalli
DevOps Training in Bangalore
PHP Training in Bangalore
Data Science Courses in Bangalore
English Speaking Course in Bangalore

chandhran said...

It is an excellent blog. Your post is very good and unique.
DevOps Training in Bangalore
Best DevOps Training in Bangalore
DevOps Course in Bangalore
DevOps Training Bangalore
DevOps Training Institutes in Bangalore
DevOps Training in btm
Best DevOps Training in Chennai
DevOps Training institute in Chennai
Spoken English Classes in Bangalore
ielts coaching in bangalore

rekha verma said...



If you want a babe from the house of Russian Escorts in Gurgaonthere are a few things you should know well before making a booking. Firstly our agency here at your city. In simple words is a cut above the rest because of the highly professional services we provide to our clients. Check our other Services...
Call Girls in Gurgaon
Escorts in Gurgaon
Escorts Service in Gurgaon
Female Escorts in Gurgaon
Russian Call Girls in Gurgaon



nizam said...

this contains more information .thanks a lot

BEST ANGULAR JS TRAINING IN CHENNAI WITH PLACEMENT

https://www.acte.in/angular-js-training-in-chennai
https://www.acte.in/angular-js-training-in-annanagar
https://www.acte.in/angular-js-training-in-omr
https://www.acte.in/angular-js-training-in-porur
https://www.acte.in/angular-js-training-in-tambaram
https://www.acte.in/angular-js-training-in-velachery

subha said...

HSDPA, 7.2 Mbps, WLAN are other connectivity options. Files can be transferred with Bluetooth connectivity option share more
Ai & Artificial Intelligence Course in Chennai
PHP Training in Chennai
Ethical Hacking Course in Chennai Blue Prism Training in Chennai
UiPath Training in Chennai

abid said...

Such a very useful article. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article.

abid said...

Such a very useful article. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article.

Janu said...


Thanks of sharing this post…Python is the fastest growing language that helps to get your dream job in a developing area. It says every fundamental in a programming, so if you want to become an expertise in python get some training




Dot Net Training in Chennai | Dot Net Training in anna nagar | Dot Net Training in omr | Dot Net Training in porur | Dot Net Training in tambaram | Dot Net Training in velachery





Unknown said...

The information you shared here is unique and informative which is very rare to see nowadays.I would have missed the useful information if I didn't find your site. ecommerce seo course

subha said...

You’ve written a really great article here. Your writing style makes this material easy to understand.. I agree with some of the many points you have made. keep update and share some more related content
AngularJS training in chennai | AngularJS training in anna nagar | AngularJS training in omr | AngularJS training in porur | AngularJS training in tambaram | AngularJS training in velachery

Aishu said...

Your blogs are very good and informative.
German Classes in Chennai | Certification | Language Learning Online Courses | GRE Coaching Classes in Chennai | Certification | Language Learning Online Courses | TOEFL Coaching in Chennai | Certification | Language Learning Online Courses | Spoken English Classes in Chennai | Certification | Communication Skills Training

Training for IT and Software Courses said...

Wow it is really wonderful and awesome thus it is very much useful for me to understand many concepts and helped me a lot.

Data Science Online Training

Data Science Classes Online

Data Science Training Online

Online Data Science Course

Data Science Course Online

sudhan said...

It is really a very informative post for all those budding entreprenuers planning to take advantage of post for business expansions. You always share such a wonderful articlewhich helps us to gain knowledge .Thanks for sharing such a wonderful article, It will be deinitely helpful and fruitful article.
Cyber Security Training Course in Chennai | Certification | Cyber Security Online Training Course | Ethical Hacking Training Course in Chennai | Certification | Ethical Hacking Online Training Course | CCNA Training Course in Chennai | Certification | CCNA Online Training Course | RPA Robotic Process Automation Training Course in Chennai | Certification | RPA Training Course Chennai | SEO Training in Chennai | Certification | SEO Online Training Course

sudhan said...

Your blog have very good information regarding the led light, I also have some worth information regarding led bulb, I think this info will be very helpful for you
Cyber Security Training Course in Chennai | Certification | Cyber Security Online Training Course | Ethical Hacking Training Course in Chennai | Certification | Ethical Hacking Online Training Course | CCNA Training Course in Chennai | Certification | CCNA Online Training Course | RPA Robotic Process Automation Training Course in Chennai | Certification | RPA Training Course Chennai | SEO Training in Chennai | Certification | SEO Online Training Course

Jayalakshmi said...

Nice Post thanks for the information, good information & very helpful for others.
hardware and networking training in chennai

hardware and networking training in tambaram

xamarin training in chennai

xamarin training in tambaram

ios training in chennai

ios training in tambaram

iot training in chennai

iot training in tambaram

jeni said...

Outstanding blog post, I have marked your site so ideally I’ll see much more on this subject in the foreseeable future.
hardware and networking training in chennai

hardware and networking training in velachery

xamarin training in chennai

xamarin training in velachery

ios training in chennai

ios training in velachery

iot training in chennai

iot training in velachery

shiny said...

Thanks for sharing informative post. Your Meta annotation concept is unique. It's a great ideal for learn new technology.

data science training in chennai

data science training in annanagar

android training in chennai

android training in annanagar

devops training in chennai

devops training in annanagar

artificial intelligence training in chennai

artificial intelligence training in annanagar

Anirban Ghosh said...

With so much overstated negative criticism of the corporate culture in the media, it is indeed bracing to have an upbeat, positive report on the good things that are happening. Wish to read some more from you!
SAP training in Kolkata
SAP training Kolkata
Best SAP training in Kolkata
SAP course in Kolkata

EXCELR said...

"I feel very grateful that I read this. It is very helpful and very informative and I really learned a lot from it. data science courses
"

Sameer Ahmed said...

I am very glad that I have come across your blog because you have shared a one of a kind blog which has all the things in a very pleasant manner.
social media marketing training

Ali jan said...

This can be achieved by meeting all those who are going to be involved with the project. As we all know, consulting is a business which involves interaction and close coordination, so find the best output for your business by selecting the ideal Salesforce Consulting Company. Salesforce interview questions and answers

ganesh said...

Such a very useful article. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article.

Angular js Training in Chennai

Angular js Training in Velachery

Angular js Training in Tambaram

Angular js Training in Porur

Angular js Training in Omr
Angular js Training in Annanagar

harini said...

This is an amazing post. Very informative and expressed in a precise way. Its a must recommend post! thanks for such a great content! Loved reading it. Thanks for your time in extracting the information.
Selenium Training in Chennai

Selenium Training in Velachery

Selenium Training in Tambaram

Selenium Training in Porur

Selenium Training in Omr

Selenium Training in Annanagar

sahasrit said...

Thanks for sharing the information..... keep sharing more articles.
amazon web services aws training in chennai

microsoft azure training in chennai

workday training in chennai

android-training-in chennai

ios training in chennai

Lavanya said...

Good and nice blog post, thanks for sharing your information.. it is very useful to me.. keep rocks and updating..
salesforce training in chennai

software testing training in chennai

robotic process automation rpa training in chennai

blockchain training in chennai

devops training in chennai

Magesh said...

It is really good and thanks for your useful post...
Social Media Marketing Courses in Chennai
Social Media Marketing Training in Chennai
Social Media Marketing Online Course

Huongkv said...

Aivivu - chuyên vé máy bay, tham khảo

kinh nghiệm mua vé máy bay đi Mỹ giá rẻ

các chuyến bay từ mỹ về việt nam hôm nay

các đường bay từ canada về việt nam

Lịch bay từ Hàn Quốc về Việt Nam hôm nay

Mallela said...

Very informative content and intresting blog posts.Data science course in Nashik

ALAN COOPER said...

Compare Online coursework help to draw every person’s interest, Establish and clarify the exact arrangement or possessions of all homework. Insert articles linked to people. Grab the difficulties that come up in just how chosen subject. Illustrate how issues may be at the homework and offer a remedy to overcome all those issues. Find connections between those writers. Asses sing your own idea. All Assignment Help composing writing can possibly be an effective means to generate a fantastic mission.

Dipanshu Sharma said...

Thanks and keep posting such an informative blog.
Godrej Urban Park Chandivali Mumbai

navya said...

It is really a very informative post for all those budding entreprenuers planning to take advantage of post for business expansions.
Biomedical engineering projects ideas

Anonymous said...

Thanks for sharing Nice information.
python training in Bangalore

Data Analytics Courses in Bangalore said...

I want to leave a little comment to support and wish you the best of luck.we wish you the best of luck in all your blogging enedevors.
data science course bangalore

Priyanshu Sharma said...

Everyone dreams of having his own house. If you too want to have your own house, read this blog where you will find tips to help you find your dream house.

Prestige Sector 150 Noida

Michael L Catudal said...

อีกทั้งเรายังให้บริการ เกมสล็อต ยิงปลา แทงบอลออนไลน์ รองรับทุกการใช้งานในอุปกรณ์ต่าง ๆ HTML5 คอมพิวเตอร์ แท็บเล็ต สมาทโฟน คาสิโนออนไลน์ และมือถือทุกรุ่น เล่นได้ตลอด 24ชม. ไม่ต้อง Downloads เกมส์ให้ยุ่งยาก ด้วยระบบที่เสถียรที่สุดในประเทศไทย

Marty Sockolov said...

Baccarat is actually money making and it's remarkable accessibility. Optimal In your case it's readily available that you will find pretty fascinating choices. And that is thought to be one thing that is really different And it's very something that is really prepared to hit with Pretty much the most wonderful, as well, is actually a really positive option. Furthermore, it's a really fascinating solution. It is a better way which can make money. Superbly prepar The number of best-earning baccarat will be the accessibility of generting the most money. Pretty much as practical is very well suited for you A substitute that could be assured. To a wide range of accessibility and performance And find out outstanding results also.บาคาร่า
ufa
ufabet
แทงบอล
แทงบอล
แทงบอล

yanmaneee said...

kyrie shoes
golden goose
lebron shoes
yeezy boost 350 v2
lebron james shoes
yeezy 500
yeezy boost 350
curry shoes
curry shoes
moncler jackets

salome said...

this article is very interesting to read and useful .thanks for posting and we expect more.Angular training in Chennai

vivikhapnoi said...

Thanks for sharing your wealthy information. This is one of the excellent posts which I have seen. I go through your all of your blog, but this blog is the best one. It is really what I wanted to see hope in future you will continue for sharing such an excellent post
có vé máy bay từu mỹ về việt nam chưa

chuyến bay từ frankfurt đến hà nội

giá vé máy bay từ anh về hà nội

có chuyến bay từ úc về việt nam không

san ve may bay gia re tu Dai Loan ve Viet Nam

vé máy bay từ vancouver về việt nam

sree said...

Thank you, for technologies and academic projects visit our website
Cloud Computing Projects With Source Code on Takeoff Edu Group.

John P. Ketchum said...

Our diverse protocol and integrated services allow us to serve all clients in London and the UK with specialist top security companies in London
resources and capabilities to support and assist the movement of pricey assets in this region. With over 10 years of experience in this industry, you can bet that we have the best operators.

BK-25 said...

Nice Blog.

Power-Bi Certification in Chennai
Informatica Certification Training in Chennai
Android Application Training In Chennai
Ios Application Training In Chennai
Best Software training institute
MSBI Training in Chennai
Best Docker Training in Chennai
Xamarin Training in Chennai

Ravi Varma said...

Angular Training in Hyderabad – Learn from experts

360DigiTMG said...

Pleasant data, important and incredible structure, as offer great stuff with smart thoughts and ideas, loads of extraordinary data and motivation, the two of which I need, because of offer such an accommodating data here.
business analytics training in hyderabad

Digitalize Training said...

Needed to compose you a very little word to thank you yet again regarding the nice suggestions you’ve contributed here.

Regards
SEO Training

360DigiTMG said...

Took me time to read all the comments, but I really enjoyed the article. It proved to be Very helpful to me and I am sure to all the commenters here! It’s always nice when you can not only be informed, but also entertained!
business analytics training in hyderabad

Chaitanya said...

SEO you are a great blogger and I have started this method to rank our site on google thanks for sharing such a great list.
Express JS Training
Chef Training
<a href="https://viswaonlinetrainings.com/courses/maven-online-training/>Maven Training</a>

Shivam said...

Looking for the best mortgage rates in Canada? Save time and money by comparing rates from top lenders with our easy-to-use platform. Whether you're buying your first home, refinancing, or investing, we ensure you get the most competitive rates and terms tailored to your needs. Unlock your dream home with confidence! Visit us today and see why we're the trusted choice for securing the best mortgage rates across Canada. Start your journey to homeownership now! Best Mortgage Rate Canada

Hamza said...
This comment has been removed by the author.
Shivam said...

Looking for the latest mortgage rates in Ontario? Whether you're a first-time homebuyer or looking to refinance, our up-to-date rates and expert advice will help you make informed decisions. Contact us today to find the best mortgage rates tailored to your needs and secure your dream home in Ontario! Mortgage Rates in Ontario