Monday, January 20, 2014

RESTful web services with jetty and jersey

Recently I was thinking if there is a way to start a web server in java just as easy as it is in node.js, if you don't know node.js you can check this link nodejs.org, so in node you just write a few lines and you have a server like this:


I thought that with something like this you can easily test your code without the burden of deploy it, and also saving some resources. 

So I start looking if there is something similar in java and I found several projects to start a web server or a minimal server, but I decided to go with jetty www.eclipse.org/jetty, so I'm going to show you how to run some restful web services using jetty. 

Also I'm going to use jersey jersey.java.net which simplifies the development of RESTful Web services and their clients in Java.

So you can download the jars from these projects or configure them through maven to your project to start using them, in these links www.eclipse.org/jetty , jersey.java.net you can check the instructions to do it.

So to create a web server with jetty is as easy as the following code:


If you run the code and check the http://localhost:8080/hello url you can see that your servlet is running, so basically in the code you create a Server object and set the port the Servlets and the servlets to run and that's it.

With jetty you can do much more than this, but for the purpose of this blog I will no go further, you can check the jetty documentation.

The following would be to create and deploy the RESTful web services, now we will use jersey to this.

The first thing to do is to create the services that we will deploy, for the example I will create two services one using JSON and other using XML, I will create two objects used to transfer the data.



In the classes above you can see two classes Employee with a nested class Address and Student, the only thing to notice from these classes are the annotations @XmlRootElement and @XmlAttribute, these annotations are used to do the parsing from object to the protocol used (XML, JSON) and from protocol to object.

The following would be to create the classes for the services.




The classes above use the standard Java EE specification for RESTful web services they use the @Path annotation at the top level to set the service path and each method use the @GET, @POST annotations to describe the type of service and the @Produces annotation to set the type of protocol to use.

The method getStudent of the class XMLStudentSvc has also the @Path("/student/{name}")  this specifies a path for this method, also note that it receives a parameter named "name" through the path and this parameter will be mapped to the parameter of the method.
For more about how define RESTful web services check the specification https://jcp.org/en/jsr/detail?id=311

Another thing to notice is that both classes are in a package called "rest", so the following to do would be to deploy these services in jetty as long as the jersey configuration.

This is the class for the server:



See in the class above all what it needs to configure jersey, a ServletHolder object is created to set the parameters, note that is indicated the package where the services are located and jersey will automatically deploy them. The ServletHolder object is passed to a ServletContextHandler object, and that's it with this the services should be up and running.

The last thing to do is to create a client for our services, for the client I will use jersey to help.

This is the client for the JSON service:


The client will call two methods, the first will be to the GET method and it uses the url with the path specified for this method ("http://localhost:9999/employee/getEmployee"), this method returns a response in JSON, then this response is unmarshal to a object with the call to "response.getEntity(Employee.class)".

If the JSON response is needed instead of the actual object all what is need to do is change the type to String in the unmarshal "response.getEntity(Employee.class)".

The other method specified in this client is the POST method this call doesn't return a thing,  it uses the url with the path specified for this method ("http://localhost:9999/employee/postEmployee") and it sends back the same object the client is receiving, you should see an output in the server since the service method is printing the object it is receiving.

This is the client for the XML service:


It is almost the same as the JSON client, the only difference is that a parameter is include in the url "http://localhost:9999/xmlServices/student/James", because the service is expecting it.

After running these examples I notice how easy and fast is to run the services and the few resources that required, I'm using at most 30Mb of memory.

159 comments:

  1. Hi, Your posts really helped me a lot in learning new things
    Specially the node.js, I was not aware of this....

    ReplyDelete
  2. In case someone arriving here is using Jersey 2.6 instead of 1.x which is used in the above examples, here is the Servlet Handler changes. Note that Moxy is now the default JSON processor and is loaded dynamically. No need to specify the POJO init parameter. Just make sure jersey.media.moxy and its dependencies are in the classpath and it will be loaded and used.

    ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");
    jerseyServlet.setInitOrder(1);
    jerseyServlet.setInitParameter("jersey.config.server.provider.packages","rest");

    ReplyDelete
  3. I follow the example and got:
    Exception in thread "main" java.lang.SecurityException: class "javax.servlet.ServletRegistration$Dynamic"'s signer information does not match signer information of other classes in the same package

    ReplyDelete
  4. I built the restful web service based on this tutorial and I found it very easy to use and understand.

    I had some problems migrating the tutorial from Jersey 1.x to 2.x but finally I got the web server up and running. Now, the problem is that it does not respond to requests from client (or browser). Does anyone know why?

    Here is my code:

    Provider package:

    package org.eclipse.eatop.jetty.helloworld.rest;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;


    @Path("/xmlServices")
    public class XMLProjectService {
    @GET
    @Produces(MediaType.TEXT_XML)
    public String getProject()
    {
    return "" + " hello world " ;
    }
    }
    Jetty embedded server:

    public Object execute(ExecutionEvent event) throws ExecutionException {
    Server server = new Server(8080);
    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath("/");
    server.setHandler(context);
    ServletHolder sh = new ServletHolder(new ServletContainer());
    sh.setInitOrder(1);
    sh.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "org.eclipse.eatop.jetty.helloworld.rest");
    context.addServlet(sh, "/*");

    try {
    server.start();
    } catch (Exception e) {
    System.out.println("Unable to start jetty web server");
    e.printStackTrace();
    }
    return null;
    }
    Client:

    public class Test {
    public static void main(String[] args) {
    Client client = ClientBuilder.newClient();
    WebTarget target = client.target(getBaseURI()).path("xmlServices");
    System.out.println(target.request("text/xml").get());
    }
    private static URI getBaseURI() {
    return UriBuilder.fromUri("http://localhost:8080/").build();
    }
    }

    The result I get is: InboundJaxrsResponse{ClientResponse{method=GET, uri=http://localhost:8080/xmlServices, status=404, reason=Not Found}}

    ReplyDelete
  5. you didn't setinitParameteres properly as what article mentioned :-

    sh.setInitParameter("com.sun.jersey.config.property.resourceConfigClass", "com.sun.jersey.api.core.PackagesResourceConfig");
    sh.setInitParameter("com.sun.jersey.config.property.packages", "rest");//Set the package where the services reside
    sh.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");

    ReplyDelete
  6. Thanks for informative post which is very useful. I appreciate the blog author and like the articles of these blog.
    Web Development Company in Indore

    ReplyDelete
  7. Nice post. Gave me inspiration to write a few on my own since newer version don't quite work with this setup:
    http://ironicprogrammer.blogspot.se/2015/05/rest-with-jersey-and-jetty-part-3.html

    ReplyDelete
  8. Hi,

    I have tried to run the server and then access the link http://localhost:9999/employee/getEmployee.

    but it throws below error.

    2015-06-16 07:19:54.879:INFO:oejs.Server:jetty-8.1.14.v20131031
    2015-06-16 07:19:54.983:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:9999
    Jun 16, 2015 7:20:02 AM com.sun.jersey.api.core.PackagesResourceConfig init
    INFO: Scanning for root resource and provider classes in the packages:
    com.package.rest
    2015-06-16 07:20:02.744:WARN:/:unavailable
    java.lang.reflect.InvocationTargetException

    Any Hep..!!

    ReplyDelete
  9. Hi

    guys

    i see your post . i am very interested your post so i am very happy .
    website designing company in india

    ReplyDelete
  10. very informative post, Loved reading this post. Hostgator Review

    ReplyDelete
  11. Thanks for information on web services. for more information SEO Services Company in Chandigarh

    ReplyDelete

  12. Its a very good post, you said many useful information here .
    java servlet programming
    hardware and networking course

    ReplyDelete
  13. This is nice information,, Thanks for sharing this information,, Its very useful to me
    mobile app development

    ReplyDelete
  14. How did you get javax.servlet? I'm struggling to work it out, and a lot of answers online seem to boil down to 'use Eclipse EE', which is, of course, no use to me.

    ReplyDelete
  15. http://www.javaproficiency.com/2015/03/jersey-tutorial-for-beginners.html

    ReplyDelete
  16. Thanks for this article, very useful. I have managed to update the jersey examples to jersey 2 and get a response from the server, but I still have 2 problems:
    a) how can I inject dependencies into my jersey resources? they get instanciated with the default ctor but in my case I need to pass in a dao object, so I get a NPE when I do a request
    b) how can I make jersey's logging less verbose? Ideally I want to send it through java.util.logging but I've tried adding jetty-logging.properties and also in the code with Log.setLog(...) but nothing seems to work. thanks,
    Martin

    ReplyDelete
  17. Hi,
    I used the above examples to get example of JSON and XML Clients. Had a bit of trouble with the JSON client but eventually solved it by including jackson jar. In this case I don't think the com.sun.jersey.api.json.POJOMappingFeature needs to be set in the server code.
    I am using jackson-all-1.9.0.jar, jersey-bundle-1.19.jar, servlet-api-3.0.jar and jetty-8.1.2.

    I will probably move on now and try and get a similar example working with the latest version of Jersey.

    ReplyDelete
  18. It will very helpful as user point of view. Please keep sharing for the beneficial knowledge of users.

    Web Design services in Lucknow

    ReplyDelete
  19. Accuratesolutionltd führt mobile app Entwicklungsunternehmen. Wir entwickeln Apps für Handys, Tablets , iPads und iPhones . Dies ist aufgrund der zunehmenden Nutzung von Internet und Mobilgeräte in Deutschland .

    ReplyDelete
  20. Grateful to check out your website, I seem to be ahead to more excellent content and I believe we all really like to thank for so many excellent content, weblog to discuss with us Nimble Social CRM

    ReplyDelete
  21. Nice post, I bookmark your blog because I found very good information on your blog, Thanks for sharing more information Dynamic Web Development Services.

    ReplyDelete
  22. Hi, Am having this error.

    "java.lang.UnsupportedClassVersionError: org/eclipse/jetty/server/HandlerContainer : Unsupported major.minor version 52.0"

    Please can someone tell which JDK to use.

    Thanks.

    ReplyDelete
  23. Nice post, I bookmark your blog because I found very good information on your blog, Thanks for sharing more information Dynamic Web Development Company.

    ReplyDelete
  24. I just like the title of your post code like a boss. Logo Designs Company

    ReplyDelete
  25. If quality web design company means,it should providing a quality services in all the development.

    Web Design Company in Delhi | Website Designing Company in Delhi

    ReplyDelete
  26. The blog was absolutely fantastic! Lot of great information which can be helpful in some or the other way. Keep updating the blog, looking forward for more contents...Great job, keep it up..
    Web Development Bangalore | Web Designing Company Bangalore

    ReplyDelete
  27. Hi, is it possible to obtain the pom.xml ?

    So i have a strange error

    2016-08-09 20:08:15.593:INFO::main: Logging initialized @214ms
    2016-08-09 20:08:15.780:INFO:oejs.Server:main: jetty-9.3.11.v20160721
    2016-08-09 20:08:15.852:INFO:oejsh.ContextHandler:main: Started o.e.j.s.ServletContextHandler@5594a1b5{/,null,AVAILABLE}
    2016-08-09 20:08:15.877:INFO:oejs.AbstractConnector:main: Started ServerConnector@2812cbfa{HTTP/1.1,[http/1.1]}{0.0.0.0:9999}
    2016-08-09 20:08:15.877:INFO:oejs.Server:main: Started @502ms
    2016-08-09 20:08:22.544:WARN:oejs.ServletHandler:qtp1469821799-17: Error for /employee/getEmployee
    java.lang.NoSuchMethodError: com.sun.jersey.core.reflection.ReflectionHelper.classForNameWithExceptionPEA(Ljava/lang/String;)Ljava/security/PrivilegedExceptionAction;
    at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:707)
    at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:674)
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:205)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577)
    at javax.servlet.GenericServlet.init(GenericServlet.java:244)
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:640)
    at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:496)
    at org.eclipse.jetty.servlet.ServletHolder.ensureInstance(ServletHolder.java:788)
    at org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:773)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:578)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:224)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
    at org.eclipse.jetty.server.Server.handle(Server.java:524)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:319)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
    at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
    at java.lang.Thread.run(Thread.java:745)

    ReplyDelete
    Replies
    1. [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ TestRest ---
      [INFO] TestRest:TestRest:jar:1.0-SNAPSHOT
      [INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:compile
      [INFO] +- org.eclipse.jetty:jetty-server:jar:9.3.11.v20160721:compile
      [INFO] | +- org.eclipse.jetty:jetty-http:jar:9.3.11.v20160721:compile
      [INFO] | | \- org.eclipse.jetty:jetty-util:jar:9.3.11.v20160721:compile
      [INFO] | \- org.eclipse.jetty:jetty-io:jar:9.3.11.v20160721:compile
      [INFO] +- org.eclipse.jetty:jetty-servlet:jar:9.3.11.v20160721:compile
      [INFO] | \- org.eclipse.jetty:jetty-security:jar:9.3.11.v20160721:compile
      [INFO] +- com.sun.jersey:jersey-servlet:jar:1.17.1:compile
      [INFO] | \- com.sun.jersey:jersey-server:jar:1.17.1:compile
      [INFO] | \- asm:asm:jar:3.1:compile
      [INFO] +- org.glassfish.jersey.core:jersey-client:jar:2.23.1:compile
      [INFO] | +- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile
      [INFO] | +- org.glassfish.jersey.core:jersey-common:jar:2.23.1:compile
      [INFO] | | +- javax.annotation:javax.annotation-api:jar:1.2:compile
      [INFO] | | +- org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.23.1:compile
      [INFO] | | \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile
      [INFO] | +- org.glassfish.hk2:hk2-api:jar:2.4.0-b34:compile
      [INFO] | | +- org.glassfish.hk2:hk2-utils:jar:2.4.0-b34:compile
      [INFO] | | \- org.glassfish.hk2.external:aopalliance-repackaged:jar:2.4.0-b34:compile
      [INFO] | +- org.glassfish.hk2.external:javax.inject:jar:2.4.0-b34:compile
      [INFO] | \- org.glassfish.hk2:hk2-locator:jar:2.4.0-b34:compile
      [INFO] | \- org.javassist:javassist:jar:3.18.1-GA:compile
      [INFO] \- com.sun.jersey:jersey-client:jar:1.17:compile
      [INFO] \- com.sun.jersey:jersey-core:jar:1.17:compile

      Delete
  28. This comment has been removed by the author.

    ReplyDelete
  29. This comment has been removed by the author.

    ReplyDelete
  30. Great Work. This post is worth everyone’s attention.http://www.aqtsoft.com/

    ReplyDelete
  31. I am reading your post from the beginning, it was so interesting to read & I feel thanks to you for posting such a good blog, keep updates regularly.

    web hosting company in lucknow | Website designing Company in Lucknow | Domain Registration Service in lucknow | it Company in lucknow

    ReplyDelete
  32. Thanks for your post? But can I ask one question: what is the relationship between Jetty and Jersey? Thanks a lot

    ReplyDelete
  33. He has done a great job with such a quality write up. Moving on, I trust MakeWhale when it comes to the best 3D printed products.

    printing services in delhi

    ReplyDelete
  34. Very nice tutorial and nice blog about web services...thanks

    ReplyDelete
  35. Nice post. Thanks for sharing this useful post.
    Software Company in Lucknow provide various services like web designing, development, app development, digital marketing service.

    ReplyDelete
  36. Great Article to know whats going on behind the walls in background

    follow my blog
    https://javabysagar.blogspot.in

    ReplyDelete
  37. Best article for me. visit my website http://atnr.pk/
    we provide all digital marketing service include web development, email marketing, SEO service, Social media marketing, SMS marketing, Domain Hosting service in all over pakistan
    digital agencies in karachi

    digital agency in karachi

    digital agency pakistan

    digital marketing agency

    digital marketing agency in karachi

    digital marketing agency in pakistan

    ReplyDelete
  38. Lovely blog with much more interesting article, I will keep on reading your update. Thanks for the share Ear Plugs for Swimming Ear plugs for Sleeping Custom Ear Plugs

    ReplyDelete
  39. Most of people are using Jersey 2.6 rather than of 1.x but things got weird when it comes to Servlet Handler changes and the default JSON processor is loaded dynamically. Thanks for making everything clear about Servlet handler changes as it's the part where everyone do mistakes.

    Software Development Company In Indore


    ReplyDelete
  40. Nice Post and tuitorial. Thanks for sharing this valuable information.
    Servers from SUN Oracle at Rentals

    ReplyDelete
  41. It is really interesting for me to read this article. Thanks for it. I like such topics and everything connected to them.
    Online Marketing Services
    SEO Company Bangalore
    seo pricing packages india

    ReplyDelete
  42. Bulk SMS is brilliant, cost-effective, promotional, advertising service, and reasonable, these India service industry has given rise to some such aspects for which even the small scale and large scale industry are opting for these low-priced service profit.

    http://truebulksms.com/bulk-sms.html

    ReplyDelete
  43. – Bulk SMS is brilliant, cost-effective, promotional, advertising service, and reasonable, these India service industry has given rise to some such aspects for which even the small scale and large scale industry are opting for these low-priced service profit.

    http://truebulksms.com/bulk-sms.html

    ReplyDelete
  44. Hi! Thank you for the share this information. This is very useful information for online blog review readers. Keep it up such a nice posting like this. We are most leading IT & Software company in India

    ReplyDelete
  45. This comment has been removed by the author.

    ReplyDelete
  46. Its is very very helpful for all of us and I never get bored while reading your article because, they are becomes a more and more interesting from the starting lines until the end.salesforce training

    ReplyDelete
  47. Bulk SMS services is the best mode to deliver your message to your customer then it is the newest choice for most of the companies these days.

    ReplyDelete
  48. Thank you for taking the time to this information very useful! Keep updating the blog,



    Mobile Repairing Institute in Delhi
    Mobile Repairing Course in Delhi

    ReplyDelete
  49. Website Designing Company in Delhi offer services like responsive website design, ecommerce website design, custom website design in which our web designers deal directly with each customer.

    ReplyDelete
  50. """Buy Generic Atripala (Trustiva/Viraday)The target (Tylenol / emtricitabine) is a combination of three antiviral drugs in the reverse rna, an angiotensin converting enzyme inhibitor. Generic Atripla
    Viraday"

    ReplyDelete
  51. Thannks for such great RESTful web design services with jetty and jersey nice to read out your article. Keep posting like this. Thanks

    ReplyDelete
  52. It is amazing and wonderful to visit your site.Thanks for sharing this information,this is useful to me...
    Click here:
    angularjs training in sholinganallur
    Click here:
    angularjs training in btm

    ReplyDelete
  53. You blog post is just completely quality and informative. Many new facts and information which I have not heard about before. Keep sharing more blog posts.
    java training in chennai | java training in USA

    java training in indira nagar

    ReplyDelete
  54. Great post! I am actually getting ready to across this information, It’s very helpful for this blog.Also great with all of the valuable information you have Keep up the good work you are doing well.
    angularjs online Training

    angularjs Training in marathahalli

    angularjs interview questions and answers

    angularjs Training in bangalore

    angularjs Training in bangalore

    angularjs Training in chennai

    ReplyDelete
  55. Really good article. You mention almost every point. Worth to read . Thank you
    Web Hosting in Pakistan
    Really good article. You mention almost every point. Worth to read . Thank you
    Web Hosting in Pakistan

    ReplyDelete
  56. The IT Company and its services can help the business to get profit as well as customers. Thanks admin for sharing such a lucrative and knowledgeable blog.
    Website Development Company in Dehradun | Software Company in Dehradun

    ReplyDelete
  57. hello my dear friend thanks for sharing this i really love your post and your post are to informative and knowledgeable . thanks and please visit satta matka for To test your luck..
    satta king
    satta matka result
    satta matka lucky number
    satta matka tips

    ReplyDelete
  58. Hi DEAR ...It was actually wonderful reading this info and I think you are absolutely right and I truly appreciate the article post thanks for sharing... WE are weightlifting accessories from WYOXSPORTS contat us for all weightlifting accessories

    ReplyDelete
  59. Hi DEAR..Thanks for sharing this post.I think it is a transcendent post.. We Are Dolphin Automation and Technology Mobile Signal Booster get in touch with us for mobile network solution

    ReplyDelete
  60. I have gone through your blog, it was very much useful for me and because of your blog, and also I gained many unknown information, the way you have clearly explained is really fantastic. Kindly post more like this, Thank You.
    honor service center near me
    honor service
    honor service centres in chennai
    honor service center velachery
    honor service center in vadapalani

    ReplyDelete
  61. The nursing skills lab provides nursing students opportunities to develop their assessment, critical thinking, and clinical reasoning skills while caring for patients. visit us for more details best school of nursing in florida

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

    apache spark online training

    informatica mdm online training

    devops online training

    aws online training

    ReplyDelete
  63. I am really very happy to find this particular site. I just wanted to say thank you for this huge read!! I absolutely enjoying every petite bit of it and I have you bookmarked to test out new substance you post.
    Microsoft Azure online training
    Selenium online training
    Java online training
    Python online training
    uipath online training

    ReplyDelete
  64. Hi DEAR ...It was actually wonderful reading this info and I think you are absolutely right and I truly appreciate the article post thanks for sharing... WE are weightlifting accessories contact us for all weightlifting accessories

    ReplyDelete
  65. Astounding read, Positive site, where did u concoct the data on this posting? I have perused a couple of the articles on your site now, and I truly like your style. You rock and please keep up the viable work.

    buy pets online
    buy pets
    dogs for sale near me
    Buy pet online in india
    Sell pets online

    ReplyDelete
  66. I found this article useful and looking forword for similar kind of blogs and if you want to know about TOP WEDDING PLANNERS CALGARY then u r at right place.

    ReplyDelete
  67. Nice blogs and eagerly waiting for such blogs and if you looking forword for Affordable Web Development Services then you are right place.

    ReplyDelete
  68. "Extraordinary Article… I want to peruse your articles on the grounds that your composition style is excessively great, its is extremely useful. I really value the article post a debt of gratitude is in order for sharing... WE are Buy Ayurvedic Herbs Online get in touch with us for all Buy Wellness Products Online

    ReplyDelete
  69. thanks and really waiting for such new blogs and if u looking for Best Astrologer in Toronto then u r at right place

    ReplyDelete
  70. Great Article… I love to read your articles because your writing style is too good, its is very very helpful for all of us. Do check Cloud Computing Courses in Chennai |
    Cloud Computing Training in Chennai Get trained by an expert who will enrich you with the latest updates.
    Cloud Computing Training in Chennai
    Data Science Course in Chennai
    Devops Training in Chennai
    Digital Marketing Course in Chennai
    Selenium Training in Chennai
    Cloud Computing Training in Tambaram

    ReplyDelete
  71. fastest loading funnel builder from WordPress subject and modules, ... Productive coding, quick stacking time, worked in interview with effective advertisers to
    Fastest Funnel Builder the pages load in under 3 seconds and this expands transformations contrasted with different stages

    ReplyDelete
  72. I love to visit your site repeatedly because; here I find all information is very useful and educational for me.we are Interior Designer in Delhi

    ReplyDelete
  73. This comment has been removed by the author.

    ReplyDelete
  74. Thanks a lot for sharing this blog. I was searching for this topic for a while. Glad that I came across your blog. Great effort. Do share more.we are Wallpaper importer in Delhi

    ReplyDelete
  75. Nice Post thanks for the information, good information & very helpful for others. For more information about Online Shopping Lucky Winner, Flipkart,

    HomeShop18, Shopping Lucky, Draw, Contest, Winner, Prize, Result, 2018 - 2019 Click Here to Read More

    ReplyDelete
  76. Thanks for sharing such a great information with us.Keep on updating us with these types of blogs.
    professional web design company in chennai
    top 10 web designing companies in chennai

    ReplyDelete
  77. Hello everyone! we all cannot denay the fact that we all love travelling and spend want to spend precious time with family and friends but it is not easy because of our busy schedule and budget . As travelling helps us to improve our communication skills ,boosts up confidence ,helps to grab real life education , creates memories for lifetime . So,don't worry we will helps you to make your trips memorable for lifetime as Travel Hunter helps you to fulfill your desire to travel world at affordable prices and also offers last minute travel - up to 50% off the best Greek, Turkish, Croatian, Italian and Egyptian destinations, for exclusive and exotic trips.TravelHunter

    ReplyDelete


  78. i am a freelancer and work according to contract, for more details contact us with the information provided below.
    Really i appreciate your hard work and amzing priceless information provided by you. One of the most important blog i read continiously.
    play game and win snapdeal lucky draw coupon 2019. contact us, play and win snapdeal lucky draw winner prizes.
    lucky draw snapdeal contact number 6289379055 call to get more information
    Lucky Draw Snapdeal costomer care number
    snapdeal lucky draw contact number
    snapdeal lucky draw contest winner 2019
    snapdeal winner lucky draw 2019 list
    snapdeal lucky draw helpline contact number
    snapdeal lucky draw winner list 2019
    snapdeal lucky draw 2019

    Best Regards
    snapdeal lucky draw winners 2019

    ReplyDelete
  79. I perceived the article to be merely worthwhile. Continue posting this tremendous work. Professional Web design services are provided by W3BMINDS- Website designer in Lucknow. Web development Company | Web design company

    ReplyDelete

  80. It’s awesome that you want to share those tips with us. I assume lot of us that commented on this post are just starting to search for different ways of blog promotion and this sounds promising. This is definitely the article that I will try to follow when I comment on others blogs. Cheers

    Data Science Training in Hyderabad

    Hadoop Training in Hyderabad

    Java Training in Hyderabad

    Python online Training in Hyderabad

    Tableau online Training in Hyderabad

    Blockchain online Training in Hyderabad

    informatica online Training in Hyderabad

    devops online Training

    ReplyDelete
  81. Get to Know Shopclues Lucky Draw Winner 2019. Call Shopclues Helpline Phone Number+91-7667836965 for Shopclues Online Shopping Lucky Draw.
    "Shopclues lucky draw 2019"
    "Shopclues winner 2019"
    Shopclues online lucky draw winner

    ReplyDelete
  82. Nice Stuff !!

    Checkout here for Free Directory List for Backlinks to your webiste or blog.

    ReplyDelete
  83. Thank you for sharing information about Website Designing. ABIT CORP is the best Website designing company in Indore where you can get website design services such as responsive website design, logo design, UX/UI, SEO friendly website design, Search Engine friendly website, graphic design and all your creative and attractive approach for website solutions. Get the unique website design and web development online by our services, we provide for cost-effectiveness, attractive, standard, delivery, and support. Get in touch with us: info@abitcorp.com or +91-8109045666. Visit for more details:  https://www.abitcorp.com/website-solution.php

    ReplyDelete
  84. Thank you for sharing information about Website Designing. At ABIT CORP, the Website Designing company is available in Indore providing unique website design, graphic design, logo design, UI/UX, static and dynamic web design and development. Do you need a website for your business? ABIT CORP is the perfect option for you. To get responsive website design simply explore our website or call us info@abitcorp.com or +91-8109045666. Please visit us: Website Designing COmpany in Indore

    ReplyDelete
  85. Somaderm Gel is a homeopathic, transdermal, over-the-counter product that promises to slowly elevate human growth hormone (HGH) levels in the body. As a result, the manufacturer advertises it works at the cellular level to help you obtain optimal health and regain your youth. SOMADERM Gel is a powerful, innovative transdermal human growth hormone (HGH) product available, Buy HGH Somaderm Get Online

    ReplyDelete
  86. The post is absolutely fantastic! Lots of great information and inspiration both of which we all need! Also like to admire the time and effort you put into your blog. Fantasy Cricket app development

    ReplyDelete
  87. Thank you for sharing valuable information about Mobile App Development. ABIT CORP mobile app development and web development company in Indore, India have years of experience in React Native, Vue JS, Node JS, Laravel, Android, iOS, Wordpress, Ionic, PhoneGap, Cordova, Angular JS, javascript, Jquery, HTML, CSS3, PHP, Bootstrap, etc frameworks, and languages. For more info, please call us: +91-8109045666 or visit for more inquiries:  https://www.abitcorp.com/mobile.php  

    ReplyDelete
  88. Do you need a driver's license? do you need a second passport? do you need an ID?

    ReplyDelete
  89. Thanks for sharing this informative information in you want to BUY AVIPATTIKAR CHURNA ONLINE than please contect us

    ReplyDelete
  90. learn azure Thanks for sharing such a great information..Its really nice and informative..

    ReplyDelete
  91. nice to explore

    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

    ReplyDelete
  92. Very good brief and this post helped me alot. Say thank you I searching for your facts. Thanks for sharing with us!
    Very good brief and this post helped me alot. Say thank you I searching for your facts. Thanks for sharing with us!
    thnaks alot.
    Ai & Artificial Intelligence Course in Chennai
    PHP Training in Chennai
    Ethical Hacking Course in Chennai Blue Prism Training in Chennai
    UiPath Training in Chennai

    ReplyDelete
  93. Wow, amazing blog layout! How long have you been blogging for? you make blogging look easy. The overall look of your website is fantastic, let alone the content!
    Best Logo Designer in Coimbatore

    ReplyDelete
  94. Thanks for sharing the important and awesome information,
    we help the trainees to develop excellent skills in analytics and thereby enable them to come forth as professionals who are ready to take up the challenges of the industry.
    best machine learning course
    power bi online training course

    ReplyDelete
  95. Great post! I am actually getting ready to across this information, It's very helpful for this blog.Also great with all of the valuable information you have Keep up the good work you are doing well.
    IELTS Coaching in chennai

    German Classes in Chennai

    GRE Coaching Classes in Chennai

    TOEFL Coaching in Chennai

    Spoken english classes in chennai | Communication training

    ReplyDelete
  96. Nice post. Thanks for sharing the wonderful post. Please keep us updated for more.
    Mobile App Development Singapore
    Freelance Web Development Singapore

    ReplyDelete
  97. Book Ahmedabad to mumbai cab hassle free, comfortable and affordable taxi cab service nearby your location to travel within city or outstation across India Book Sedan, Hatchback and SUV using Meru app, website or call 90810 12222 Indias trusted car rental service, AC cabs, advance booking, lowest fares, and trained drivers"

    ReplyDelete
  98. Book Ahmedabad to mumbai cab hassle free, comfortable and affordable taxi cab service nearby your location to travel within city or outstation across India Book Sedan, Hatchback and SUV using Meru app, website or call 90810 12222 Indias trusted car rental service, AC cabs, advance booking, lowest fares, and trained drivers"

    ReplyDelete
  99. Great article Lot's of information to Read...Great Man Keep Posting and update to People..Thanks

    digital marketing services in lahore

    ReplyDelete
  100. India No 1 – Natural gemstone Company. Buy Online Govt Lab Certified Natural Gemstones in wholesale rates direct from Gemstones Cutting Factory. We sell all original gemstones like Emerald Gemstone, Ruby Gemstone, Opal Stone, Blue Sapphire Gemstone, Yellow Sapphire Gemstones, Red Coral and Amethyst Gemstone etc.Fire opal gemstone

    ReplyDelete
  101. Book one way cab hassle free, comfortable and affordable taxi cab service nearby your location to travel within city or outstation across India Book Sedan, Hatchback and SUV using Meru app, website or call 90810 12222 Indias trusted car rental service, AC cabs, advance booking, lowest fares, and trained drivers"

    Cab service

    ReplyDelete
  102. Amazing Article ! I would like to thank you for the efforts you had made for writing this awesome article. This article inspired me to read more. keep it up. Primavera Online Training | Primavera Course in Chennai

    ReplyDelete
  103. Stunning post. It is very useful and informative. Thanks for the sharing.
    Digital Marketing Company
    Digital Marketing agency

    ReplyDelete

  104. This was a very meaningful post, so informative and encouraging information, Thank you for this post.
    on demand app development company

    ReplyDelete
  105. Thankyou For Posting This Useful Information,
    MOBILE REPAIRING COURSE Is The Future Of All Technical Industries Becouse This Is The Best Short Term Course To Achive Your All Goals In Your Life Hance I Strongly Recommend You All To Join The Best Mobile Repairing course in Delhi,India

    MOBILE REPAIRING INSTITUTE

    ReplyDelete
  106. Hotels in Tirthan Valley, Homestay in Tirthan Valley, Guesthouse in Tirthan Valley, Camping in Tirthan Valley, Trekking in Tirthan Valley
    Tirthan valley resorts

    ReplyDelete
  107. Good post. I learn something totally new and challenging on websites I
    stumbleupon on a daily basis. It will always be exciting to read articles from other writers and use something from their websites.
    Here My website SEO Company in Ujjain

    ReplyDelete
  108. Hi, Enjoy the article, I'm Manisha, I really want to say sincerely that this is amazing content that you have shared.
    thanks for this. it's really very helpful for me.
    Here My website for WEB DEVELOPMENT Company in Ujjain

    ReplyDelete
  109. Very Informative blog thank you for sharing. Keep sharing.

    Best software training institute in Chennai. Make your career development the best by learning software courses.

    rpa training in chennai
    php training in chennai
    rpa uipath training in chennai

    ReplyDelete
  110. Needed to compose you a very little word to thank you yet again
    regarding the nice suggestions you’ve contributed here.
    software testing course in chennai
    javascript course in chennai

    ReplyDelete
  111. Acquire the trending Selenium training in Chennai from the best software training institute in Chennai, Infycle Technologies. Additionally, we come up with the latest demanded technological courses like Python, Data Science, Digital Marketing, Big Data, Oracle, AWS, Azure, Google Cloud, Java, and Oracle with the best faculties in the industry. To clear your doubts, call +91-7504633633 or +91-7502633633.

    ReplyDelete
  112. To know more about IT automated service desk and read the blogs, click down the link below. Click here : https://bit.ly/3426j1a

    ReplyDelete
  113. I really enjoyed reading your blog. It was very well written and easy to understand. Unlike other blogs that I have read which are actually not very good. Thank you so much!FDM is one of the Online Reputation Management (ORM) Company in Chennai. For More Details Call us: 91+ 9791811111 or visit our website.



    ReplyDelete
  114. This comment has been removed by the author.

    ReplyDelete
  115. Established in 2010, Ameotech Informatics is a Software Development Company in Mohali dedicated to Web and Mobile app for different platforms (Android & iOS), Web Development with technologies like PHP, ReactJS, front-end technologies like AngularJS and back-end technologies like Node.Js, UI/UX Design, E-commerce Solutions, and Internet Marketing. We feel pride of successfully serving clients in the USA, UK and other parts of the world.

    ReplyDelete
  116. Thanks for sharing this informative article on Java and Node.js web development services with example. If you have any requirement to Hire eCommece Developers to create an ecommerce website or app for your project please visit us.

    ReplyDelete
  117. If you're on a tight budget and looking for social media marketing services, a cheap SMM panel is a great option. These panels feature likes, follows, comments, and other engagement metrics across multiple social media sites in a variety of reasonably priced bundles.

    ReplyDelete