Thursday, February 12, 2009

OpenJPA Enhancement

What is Enhancement Anyway?

I have cruised around the OpenJPA forums enough to notice that numerous new developers have posted questions regarding enhancement. Since I'm new to OpenJPA myself, I figured I'd dive in to enhancement and see what all the fuss is about. This post is directed mainly at developers that are taking a first look at OpenJPA and having problems getting started. No worries for those of you deploying an application to run in a Java EE 5 compliant application server such as WebSphere Application Server because your Entities will be automatically enhanced at runtime.

As I was exploring how to enhance, I started to wonder why do I need to enhance at all? As it turns out the JPA spec requires some type of monitoring of Entity objects, but the spec does not define how to implement this monitoring. Some JPA providers auto-generate new subclasses or proxy objects that front the user's Entity objects, while others like OpenJPA use byte-code weaving technologies to enhance the actual Entity class objects. Now that we've got that out of the way, lets get back to how to do the enhancement. I'm going to give runtime examples first, as I feel those are the easiest from a developers point of view.

Runtime enhancement-When running in a JSE environment or in a non EE-5 compliant container, OpenJPA defaults to using subclassing enhancement. The subclassing enhancement support was added originally as a convenience to new developers to reduce the amount of work to get a 'HelloWorld-ish' OpenJPA application working out of the box. It was never meant to run in production. So you're probably thinking that this sounds great! OpenJPA handles enhancement automatically for me and I can stop reading this post. Wrong! Subclassing has two major drawbacks. First off, it isn't nearly as fast as byte-code enhancement and the second drawback is that there are some documented functional problems when using the subclassing support. The moral of the story is, don't use this method of enhancement. I'm not the only one making this recommendation as I've come across form posts about removing subclassing enhancement as the default OpenJPA behavior. Additional information regarding the subclassing enhancement can be found here.

The second and recommended way get runtime enhancement is to provide a javaagent when launching the JVM that OpenJPA is going run in. This is the method that I use in most of my test environments because it is very painless. All that is required to get runtime enhancement in Eclipse is to specify the -javaagent:[open_jpa_jar_location] on the Run Configuration page. That is it.

Another simple way to get runtime enhancement is to specify the the -javaagent when launching an application from ant. Below is a snippet from my build.xml that shows how to pass the -javaagent when launching a JSE application that uses OpenJPA. 
    <path id="jpa.enhancement.classpath">
        <pathelement location="bin"/>
        <!-- lib contains all of the jars that came with the OpenJPA binary download -->
        <fileset dir="lib">
            <include name="**/*.jar"/>
        </fileset>
    </path>
...
<target name="drive" depends="clean, build">
        <echo message="Running test with run time enhancement."/>
        <java classname="main.Driver" failonerror="true" fork="yes">
            <jvmarg value="-javaagent:${openJPA-jar}"/>
            <classpath refid="jpa.enhancement.classpath"/>
        </java>
    </target>

Buildtime enhancement -
In this section I'm going to cover how to invoke the build time enhancer ant task that is packaged with OpenJPA through the use of ant and maven. Yes there are many different ways to buildtime enhancement bliss, but I'm only going to talk about using the ant task. Note that this entire section assumes you're running the ant/maven scripts from a command line. I can't say for certian how this works inside Eclipse. Warning: I'm not a maven wizard, so please be nice if I've commited some cardinal maven sin. :-)

I'll start first by showing how to define a OpenJPA enhancer task and how to invoke the task in ant. I had to fumble a little to get it working, but overall it was pretty straight forward. First you'll need to compile the Entites. (Note: as a prereq to running the enhance task, I copied my persistence.xml file to my /build directory. You might not need to do this, but the persistence.xml has to be in the classpath.) Next you'll need to configure the enhancer task and a classpath where the task can be found.(Adding the classpath is the part that the OpenJPA manual missed.) The final step is to call the enhance task. A snippet is provided below.
    <path id="jpa.enhancement.classpath">
        <pathelement location="bin"/>

        <!-- lib contains all of the jars that came with the OpenJPA binary download -->
        <fileset dir="lib">
            <include name="**/*.jar"/>
        </fileset>
    </path>


    <target name="enhance" depends="build">
    <!-- This is a bit of a hack, but I needed to copy the persistence.xml file from my src dir
        to the build dir when we run enhancement -->
    <copy includeemptydirs="false" todir="bin">
        <fileset dir="src" excludes="**/*.launch, **/*.java"/>
    </copy>


    <!-- define the openjpac task -->
    <taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask">
        <classpath refid="jpa.enhancement.classpath"/>
    </taskdef>
      
    <!-- invoke enhancer the enhancer -->
    <openjpac>
        <classpath refid="jpa.enhancement.classpath"/>
    </openjpac>
    <echo message="Enhancing complete."/>
</target>
The second(different) path to build time enhancement is to use the maven antrun plug-in to launch the OpenJPA enhancer task. Since I'm new to maven this road was pretty clunky, but the steps were nearly identical to running directly in ant. I'll include the parts from my pom.xml that took the most time to figure out. Again, I'm not sure if you will need to move the persistence.xml file to the build directory, but I did(I assume I'm not doing something right).
  <build>
  <!-- Copy the persistence.xml file to the build dir -->
  <!-- You can skip this step if you put the persistence.xml in src/main/resources/META-INF instead of src/main/java/META-INF -->
  <resources>
      <resource>
        <directory> src/main/java </directory>
        <includes>
          <include> **/*.xml </include>
          </includes>
      </resource>
    </resources>
    <plugins>
.....           
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.2</version>
        <executions>
          <execution>
              <phase>process-classes</phase>
            <configuration>
              <tasks>
                  <taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask" classpathref="maven.compile.classpath"/>
                  <openjpac>
                      <classpath refid="maven.compile.classpath"/>
                  </openjpac>
              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
....
  </build>
Hopefully this helps someone out there! Feel free to contact me if you have any questions/comments/suggestions.

-Rick

200 comments:

Unknown said...

Hi~
I deploy my project with eclipse WTP (Run with server), is there any enhancement methods for that ?
(Maybe I should change the way of eclipse compiler...)

Kevin Sutter said...

Hi. If your server platform is either WAS v7 or WAS v6.1 with the EJB3 Feature Pack, then OpenJPA is already tied into the container's classloading mechanism and the enhancement processing is done dynamically. Nothing extra is required on your part.

Unknown said...

My server platform is Tomcat 6.0, is that mean I need enhance Java class manually? And, when I deploy my project with eclipse, I have not idea for enhancing with Ant.

Rick Curtis said...

Since Tomcat 6.0 isn't EE5 compliant, your entities won't be enhanced by the application server. So yes, you will need to perform an extra step to get your entities enhanced. Since you're using Eclipse to deploy your application, I think the easiest road to enhancement would be to look at the following plugin [1].

[1] http://people.apache.org/~ppoddar/eclipse/index.html

Unknown said...

Thank for helping~
And the plugin said:'The build step will enhance any Java class annotated with JPA annotations @Entity, @MappedSuperclass, @Embeddable', but my application using *.orm.xml file to mapping the entities, is there any other methods?

Rick Curtis said...

Sorry about taking so long to reply, please take a look at my latest blog posting [1]. I think it should work for what you are doing.

[1] http://webspherepersistence.blogspot.com/2009/04/openjpa-enhancement-eclipse-builder.html

Anonymous said...
This comment has been removed by a blog administrator.
Michael Vorburger.ch said...

Kevin, the way you do the Maven thing via embedded Ant is not ideal... the maven-antrun-plugin has lot's of known problem (trying running that as part of a larger build in a Maven Reactor, with different maven-antrun-plugin invocations, and see weired stuff starting to get mixed up).

A better alternative is the http://mojo.codehaus.org/openjpa-maven-plugin/, also linked from http://openjpa.apache.org/enhancingwithmaven.html.

PS: I'm working on an OpenJPA Enhancer Eclipse Builder.. will post to the list when ready.

mikedd said...

@Michael V.

Pinaki Poddar wrote an eclipse plugin.

Not sure if you're doing essentially the same thing, but touching base with Pianki might save you a little time.

Anonymous said...

So you covered the stanadalone issues ... Could you add the actual WebSphere implications to this article? As has been stated, WebSphere 6.1 with the EJB3.0 feature pack is supposed to enhance at runtime automatically, but it clearly does not under some circumstances, in my case with code that has been working for six months. I reinstalled RAD 7.0 and WAS and EJB3 and FP 6.1.0.25 on a new machine and get the dreaded message:

Could not locate metadata for the class using alias "Person". This could mean that the OpenJPA enhancer or load-time weaver was not run on the type whose alias is "Person". Registered alias mappings: "{Person=null}"

and further on:

This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent:
...

If this last statement is true, how do I "allow" runtime optimization?

Kevin Sutter said...

Silence...

The "runtime optimization" that is referenced in the message refers to the subclassing support earlier in Rick's posting. You really don't want this processing. There are several bugs associated with this subclassing enhancement. That's why we turn it off in the WebSphere environment.

If you are hitting this error message while executing container-managed persistence within WebSphere, you should probably open a PMR. As Entity classes are being loaded by the Container, they should be passed off to OpenJPA (or whatever JPA provider is plugged in) and be allowed to be enhanced. If that's not happening, it sounds like a bug.

Kevin

Anonymous said...

Sorry I come through as Silence, the "choose an identity" ui isn't all that clear. What the heck is OpneID?

I have opened a PMR, and have sent in my SystemOut and SystemErr logs. I am unable to run the application at all, so I am waiting for IBM to come back with an answer.

This is too weird because if I switch back to my old machine, it works correctly. However choosing between a Pentium4/2GB that works and a Core i7/4GB that doesn't is a problem.

Christopher R. Gardner said...

During my last spike, I found that WAS 7 did NOT automatically enhance entities. I had to enhance at build time.

Kevin Sutter said...

Hi Christopher,
Your experience should not be the normal processing when using WAS v7. You may experience better startup performance by doing the build-time enhancement, but it should not be necessary. The dynamic enhancement should be performed automatically when the Entities are loaded by the Container.

As my previous remark indicated, I would suggest opening a PMR if this is not the case.

Thanks,
Kevin

Dawid Stysiak said...

In Websphere 6.1 with EJB3, starting from version 6.1.0.25, there is a bug in dynamic enhancement i.e. won't work if you try to use entity for the first time outside of transaction

Rick Curtis said...

@dawid

I'd suggest opening a PMR.

Thanks,
Rick

Akram Chotu said...

I am using OpenJPA in an War/Ear deployed on RAD 7.x + WAS v6.0. For some reason immediately we cannot apply the fix pack http://www-01.ibm.com/software/webservers/appserv/was/featurepacks/osgi/ or migrate to RAD 8.x + WAS V8.x due to some environment issues and application dependencies and so only way for us is to go with build time enhancement using the approach told in http://webspherepersistence.blogspot.com/2009/04/openjpa-enhancement-eclipse-builder.html

I have a basic question regarding OpenJPA entity enhancement. After we do OpenJPA build time enhacement, how do we make sure that we are *really* seeing the benefits of OpenJPA entity enhancements? How do we test it? how to measure the performance before doing build time enhancements and after doing build time enhancement? Could you please clarify and point me to any links that can answer my question?

Rick Curtis said...

@Akram -

> After we do OpenJPA build time enhacement, how do we make sure that we are *really* seeing the benefits of OpenJPA entity enhancements?

To ensure that your Entities have been enhanced you can decompile them and make sure that they implement org.apache.openjpa.enhance.PersistenceCapable.

> How to measure the performance before doing build time enhancements and after doing build time enhancement?

That isn't a valid question. Since I wrote this blog post, OpenJPA has taken a step away from running with unehanced classes. It is now a requirement to enhance your Entities via one of the detailed methods.

Thanks,
Rick

Susana said...

Hi,

We are testing this but we got this error when executing mvn install:

[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks
[ERROR] BUILD ERROR
[INFO] An Ant BuildException has occured: org.apache.openjpa.util.MetaDataException: MetaDataFactory no se pudo configurar (conf.newMetaDataFactoryInstance() ha devuelto nulo). Esto podría significar que no se han encontrado propiedades de configuración. Asegúrese de que tiene un archivo META-INF/persistence.xml, que está disponible en su classpath, o de que el archivo de propiedades que está utilizando para la configuración está disponible. Si está utilizando Ant, compruebe los atributos o del elemento anidado de la tarea. Esto se puede producir si sus archivos jar de distribución de OpenJPA están dañados, o si la política de seguridad es demasiado estricta.
...

Do you know what are we doing wrong?

Thanks.

Regards,
Susana

Kevin Sutter said...

Hi Susana,
When you say that you have tried "this", what aspect of enhancement are you referring to? The error message you posted is indicating that OpenJPA can not find any metadata for the configuration. The most common problem is that the persistence.xml can not be found during the enhancement processing. Depending on your environment (maven, ant, etc), this may also mean that the configuration is just not known to the running process. I would suggest turning on debug from your build environment and see if you can figure out what is missing.

Good luck,
Kevin

Susana said...

Hi,

Sorry for not being more clear. We are using EJB 3.0, JPA 2.0 and WAS 7. We are trying to use maven antrun plug-in to launch the OpenJPA enhancer task, and is when executing maven install with the antrun that we get this error.

If we don't include the antrun plugin to enhance the classes, we get this error at runtime:

Susana said...

javax.ejb.Exception: Injection failure; nested exception is: java.lang.IllegalStateException: EntityManagerFactory has not been created for PU: PuId=EAR_NTAG@POJO_NTAG_IMPL.jar#NtagPersistenceUnit

We have persistence.xml file in src/main/resources/META-INF directory.

Thanks for your help.

Kevin Sutter said...

Hi Susana,
The last exception you posted shows an issue with injection, which is separate from the enhancement processing. Since you are a WebSphere customer, I would suggest opening a PMR and following through with support. You'll get more complete support -- more than just me monitoring this blog posting.

Good luck,
Kevin

Shivreet Sekhon said...

Hi,

Could someone tell me if there is a way to ensure that WAS8 has actually enhanced my entities at deploytime. I do lookinside the installedApps but the entities dont seem to have changed.

Kevin Sutter said...

Hi Shivreet,
When running on WAS v8.0, the configuration properties are set to require enhancement of JPA entities. So, if your entities have not been enhanced (either at build time or dynamically at runtime), the condition will be detected and reported as an error.

Most of the time, that type of detection and reporting will be sufficient. But, if you are the curious type, you have a few other choices to determine whether your entities have been enhanced.

At runtime, you could turn on some Trace logging. The WebSphere Trace Specification could either turn on all Tracing (openjpa=all) or just for the Enhancement processing (openjpa.Enhance=all). The Trace output will tell you whether the Entity was previously enhanced, or if enhancement was required dynamically at runtime.

If you are enhancing at build time, you could also verify the enhancement process by running the "javap" command on your Entity classes. This will show two things. One is that your Entity class has now implemented the org.apache.openjpa.enhance.PersistenceCapable interface. And, you will notice several new methods inserted that begin with "pc".

Hope this helps,
Kevin

Shivreet Sekhon said...

Hi Kevin,

Thanks a lot for that. If you could just answer one more query for me around JPA. Does this msg mean anything to you.

The Entity "MYEntityName" was enhanced at level "2", but the current level of enhancement is "1,055,128".

What is the enhancement level.?

Michael Vorburger.ch said...

Shivreet, I suspect your was enhanced at level vs. current level of enhancement error could mean that you enhanced your Entities with a different version of OpenJPA than the one you are running against.

Kevin Sutter said...

Michael is correct. The level of OpenJPA used to enhance your entities is at a different level of the runtime. Normally, this is not a big deal and the message is only "informational". But, if you are hitting other issues, then this "eye-catcher" may help diagnose the problem.

FYI, the formatting is not very good, but the latter version number you posted "1,055,128" is actually the SVN revision number 1055128. And, the version "2" is just the original initialized version number which doesn't correspond to anything...

Kevin

Unknown said...

All your links are dead because of my lateness, can you please link it to different url, and thanks for a wonderful and helpful article

Kevin Sutter said...

I've pinged the author to see if they could update the links. Thanks for letting us know.

In the mean time, much of the information in this posting can also be found here:
http://openjpa.apache.org/entity-enhancement.html

shikida said...

"All that is required to get runtime enhancement in Eclipse is to specify the -javaagent:[open_jpa_jar_location] on the Run Configuration page. That is it." - just a warning that this won't work on TomEE 1.5.2 because javaagent was broken until 1.6.0 (sept 2013). Thanks for the tutorial.

Rick Curtis said...

Leo --

Sorry, but I don't think your comment is true. This blog post talks exclusively about running with OpenJPA and no where is tomEE mentioned. The tomEE agent might have been broke for a period of time, but the OpenJPA agent has always worked.

shikida said...

Hi Rick, I am not blaming OpenJPA. The problem seems to be TomEE's.

Unknown said...

The jpa specification doesn't tell about this. :D.

Abdur Rahim said...



Very nice article & have great information.

Microsoft Server 2016 Installation

priya said...

I really appreciate this post. I’ve been looking all over for this! Thank goodness I found it on Bing. You’ve made my day! Thx again!
Data Science course in kalyan nagar
Data Science course in OMR
Data Science course in chennai
Data science course in velachery
Data science course in jaya nagar
Data Science interview questions and answers

rohini said...

Great Article… I love to read your articles because your writing style is too good, 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.
Best Devops Training in pune
Devops Training in Bangalore
Microsoft azure training in Bangalore
Power bi training in Chennai

Durai Raj said...

Thanks for your blog... The presentation is really good...
Software Testing Course in Coimbatore
best software testing training institute in coimbatore
Best Java Training Institutes in Bangalore
Hadoop Training in Bangalore
Data Science Courses in Bangalore
CCNA Course in Madurai
Digital Marketing Training in Coimbatore
Digital Marketing Course in Coimbatore

jefrin said...

great blog thanks for sharing
power BI training course in chennai

service care said...

It is amazing and wonderful to visit your site.Thanks for sharing this information,this is useful to me...

mobile service centre
mobile service center in chennai
mobile service center chennai
mobile service centre near me
mobile service centre chennai
best mobile service center in chennai
best mobile service center

service care said...

Thanks for your valuable post... The data which you have shared is more informative for us...

oneplus service center chennai
oneplus service center in chennai
oneplus service centre chennai
oneplus service centre
>oneplus mobile service center in chennai
oneplus mobile service center
oneplus mobile service centre in chennai
oneplus mobile service centre
oneplus service center near me
oneplus service
oneplus service centres in chennai

service care said...

I am hoping the same best effort from you in the future as well. In fact your creative writing skills has inspired me.

apple service center chennai
apple service center in chennai
apple mobile service centre in chennai
apple service center near me

service care said...

Great Article… I love to read your articles because your writing style is too good, 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

moto service center in chennai
motorola service center in chennai
moto service centre chennai
moto service center
motorola service center
motorola service center near me
motorola mobile service centre in chennai
moto g service center in chennai
motorola service center in velachery
motorola service center in t nagar
motorola service center in vadapalani

service care said...

Thanks for such a great article here. I was searching for something like this for quite a long time and at last, I’ve found it on your blog.thanks for sharing.
lg mobile service center in chennai
lg mobile service center
lg mobile service chennai
lg mobile repair
lg mobile service center near me
lg mobile service center in velachery
lg mobile service center in porur
lg mobile service center in vadapalani

service care said...

Thanks for posting useful information.You have provided an nice article, Thank you very much for this one. And i hope this will be useful for many people.. and i am waiting for your next post keep on updating these kinds of knowledgeable things...Really it was an awesome article...very interesting to read..please sharing like this information......
samsung mobile service center in velachery
samsung mobile service center in porur
samsung mobile service center in vadapalani

service care said...

Great post. I was once checking constantly this weblog and I'm impressed! Extremely useful information specially the closing part. I maintain such information much. I was once seeking this specific information for a very long time. Many thanks and best of luck.
honor mobile service center
honor mobile service centre in Chennai
honor service center near me
honor service
honor service centres in chennai
honor service center velachery
honor service center in vadapalani

Anonymous said...

Sharp
Lampung
Metroyoutube
youtube
lampung
kuota
Indonesia

DedicatedHosting4u said...

Hey, very nice site. I came across this on Google, and I am stoked that I did. I will definitely be coming back here more often. Wish I could add to the conversation and bring a bit more to the table, but am just taking in as much info as I can at the moment. Thanks .

DedicatedHosting4u.com

Veelead Solutions said...
This comment has been removed by the author.
Veelead Solutions said...

Thanks for Sharing this useful information. Get sharepoint apps development from veelead solutions

Shiva Shakthi said...

Wonderful Blog!!! Waiting for your upcoming data... thanks for sharing with us.
Software Testing Training in Chennai
software testing course in chennai
software testing course
best software testing training institute in chennai with placement
Software testing training in Tnagar
Software testing training in Thiruvanmiyur
Big data training in chennai
Digital marketing course in chennai
Selenium Training in Chennai
JAVA Training in Chennai

manjuprabhu59 said...

Thanks for the excellent post. It is very useful and more informative by both technically and manually.
iPad Service Center in Chennai
Oppo Service Center in Chennai
Vivo Service Center in Chennai
Oneplus Service Center in Chennai
Honor Service Center in Chennai
Redmi Service Center in Chennai

htop said...

nice message
best devops training in chennai
 devops training in chennai
data Science training in chennai
azure training in chennai
angularjs training in chennai
angular js training in sholinganallur
best angularjs training in chennai

thya said...

thanks for your detailsweb design company in velacheryQbigpro branding solution is the best web design company in velachery web design company in velachery.we will create the web site and managing the site.we will help for all business.website is very important for all business.

Aruna Ram said...

This post is very impressive for me. I read your whole blog and I really enjoyed your article. Thank you...!
Pega Training in Chennai
Pega Developer Training
Advanced Excel Training in Chennai
Linux Training in Chennai
Power BI Training in Chennai
Tableau Training in Chennai
Job Openings in Chennai
Oracle Training in Chennai
Oracle DBA Training in Chennai
Social Media Marketing Courses in Chennai
Pega Training in Adyar

Destiny Solutions LLP said...

Quickbooks Accounting Software Usa

Tech News said...

Good Article
devops training in bangalore
hadoop training in bangalore
iot training in bangalore
machine learning training in bangalore
uipath training in bangalore

ajay majhi said...

Thanks for sharing.it really helpful.nice information.
Data science course in pune
Data science classes in pune
Data science training in pune with placement
Data science training in pune

divi said...

This Post is a very impressive for me. I read your whole blog and I really enjoyed with your article. Thank you...!
web design company in velachery

jeewangarg said...

Jeewangarg is the Best SEO Company in Delhi providing FREE site auditing along with the most reasonable Professional SEO services to top all searches, increase organic visibility, promote business, increase audience, and make instant sales.

RoyceRobbie said...


Good information and, keep sharing like this.

Crm Software Development Company in Chennai

Angular expert said...

You made some really good points there. I looked on the web to find out more about the issue and found most individuals will go along with your views on this web site.



python training in Bangalore



Angular Training in Bangalore

Python Training in Marathahalli, Bangalore

Angular expert said...


Greetings! Very useful advice within this article! It is the little changes which will make the largest changes. Many thanks for sharing!


UI Development Training in Marathahalli

Full stack Development Training in Marthahalli Bangalore

UI Development Training in Bangalore

ellensarah said...

Thanks for providing this information .I hope it will be fruitfull for me. Thank you so much and keep posting.
professional web design company in chennai
web design company in chennai

gautham said...

Well man, you explained a lot
hacking course online

Sakshi said...

Something is new for me that i read today... Thankx for sharing something different with us.
For any Kind of Course Also visit: SourceKode Training Institute

Abdullah said...

Thanks For Sharing Please Visit Shivangi Joshi

sunil said...

Really helpful information shared in this article.thanks for sharing this informative blog.
AWS Training in Pune
AWS Training in Pune
AWS Training in Pune
AWS Training in Pune

sunil said...

Thanks for sharing it.I got Very valuable information from your blog.your post is really very Informatve. I got Very valuable information from your blog.I’m satisfied with the information that you provide for me.

Python training in Pune
Python Classes in Pune
Python Courses in Pune
Python Institute Pune


Training for IT and Software Courses said...

This is the exact information I am been searching for, Thanks for sharing the required infos with the clear update and required points. To appreciate this I like to share some useful information.microsoft azure training in bangalore

svrtechnologies said...

Thanks for Sharing Such an Nice Stuff...

learn tableau online

Jack sparrow said...

Thanks a lot for sharing it, that’s truly has added a lot to our knowledge about this topic. Have a more success ful day. Amazing write-up, always find something interesting.
and here i want to share some thing about mulesoft developer training .


vijay said...

Very useful and information content has been shared out here, Thanks for sharing it.
aws Training in Bangalore
python Training in Bangalore
hadoop Training in Bangalore
angular js Training in Bangalore
bigdata analytics Training in Bangalore

sunil said...
This comment has been removed by the author.
sunil said...

Thanks for sharing it.I got Very valuable information from your blog.your post is really very Informatve. I got Very valuable information from your blog.I’m satisfied with the information that you provide for me.

aws course
aws certification

3RI Technologies said...

Thanks for your excellent blog and giving great kind of information. So useful. Nice work keep it up thanks for sharing the knowledge.
Visit us
Click Here
For More Details
Visit Website
See More

lajwantidevi said...



vidmate

Unknown said...

Thanks for Sharing This Article.It is very so much valuable content. I hope these Commenting lists will help to my website
best angular js online training
best angular js online training
angular js online training

Rav said...

https://www.freelistingindia.in/listings/globe-modular-interiors-modular-kitchen-delhi-manufacturers
https://ghaziabad.adhoards.com/globe-modular-interiors-manufacturers-of-modular-kitchenfurniture-421191.htm
https://www.kulfiy.com/community/home-improvement/modular-kitchen-designing-makes-your-kitchen-more-attractive/
https://globe-modular-interiors-modular-kitchen.business.site/
https://activerain.com/blogsview/5409300/best-modular-kitchen-manufacturing-companies-in-india
https://livinggossip.com/modern-modular-kitchen-style-makes-your-kitchen-amazing/

Rav said...

https://www.quora.com/profile/Ravi-Sharma-5115
https://modularkitchendelhi.edublogs.org/2019/12/10/best-modular-kitchen-services-in-india/
https://hubpages.com/living/modular-kitchen-delhisites.google.com/site/modularskitchensdelhi/
https://modularkitchen.cabanova.com/
https://www.youtube.com/channel/UCbLLxXJF3R9NtFbe2uEF36A
https://www.homify.co.uk/professionals/6801618/globe-modular-interiors
https://www.scoop.it/topic/modular-kitchen-manufacturers-in-delhi-by-globe-modular-interiors
https://propisor.com/profile/globe-modular-interiors-201102

My Class Training Bangalore said...

Such a great word which you use in your article and article is amazing knowledge. thank you for sharing it.

Best SAP Training in Bangalore
Best SAP ABAP Training in Bangalore
Best SAP FICO Training in Bangalore
Best SAP HANA Training in Bangalore
Best SAP MM Training in Bangalore
Best SAP SD Training in Bangalore

My Class Training Bangalore said...

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

Best SAP HR Training in Bangalore
Best SAP BASIS Training in Bangalore
Best SAP HCM Training in Bangalore
Best SAP S4 HANA Simple Finance Training in Bangalore
Best SAP S4 HANA Simple Logistics Training in Bangalore

Startup Jobs Portal said...


whatsapp video status

whatsapp video status and tik tok videos

python training in vijayawada said...

We as a team of real-time industrial experience with a lot of knowledge in developing applications in python programming (7+ years) will ensure that we will deliver our best in python training in vijayawada. , and we believe that no one matches us in this context.

Vihaan Kumar said...

I Vihaan Kumar, I am a forestry photographer and my passion book reading to gain knowledge of other places.
Belize is resting in peace between Guatemala and Mexico and is a unique vacation spot for the formidable traveler – Vihaan Kumar who desires to find out the Caribbean way of life in its entirety.

Angular expert said...


There's definately a lot to know about this issue. I really like all the points you made.


selenium training in Bangalore

Selenium Courses in Bangalore

best selenium training institute in Bangalore

selenium training institute in Bangalore

Angular expert said...

This excellent website truly has all of the info I wanted concerning this subject and didn’t know who to ask.


selenium institutes in Marathahalli

selenium training in Bangalore

Selenium Courses in Bangalore

best selenium training institute in Bangalore

selenium training institute in Bangalore

Angular expert said...


Pretty! This was a really wonderful post. Thank you for providing these details.


http://infocampus.co.in/best-selenium-testing-training-center-in-bangalore.html

kumar vihaan said...

In recent years, Ubisoft has somewhat modified the direction of development of a number of its franchises, that specialize in giant open-world games. and also the alternative day, the top of Ubisoft, Yves Guillot, same that the corporate was planning to continue within the same spirit, and explained why. You may read more on — Blockcrux

Shopclues Winner List said...

Shopclues winner list here came up with a list of offers where you can win special shopclues prize list by just playing a game & win prizes.
Shopclues lucky customer
Shopclues lucky customer 2020
Winner list Shopclues
Shopclues Prize
Prize Shopclues

aj said...
This comment has been removed by the author.
aj said...

Snapdeal Winner List 2020 here came up with an Offer where you can win Snapdeal prize list by just playing a game & win prizes.
Snapdeal winner name also check the Snapdeal lucky draw

svrtechnologies said...

Thanks for the useful info...

Tableau Course

svrtechnologies said...

Thanks for Posting such an useful info...

Tableau Server Training

GlobalEmployees said...

Read my post here
Java programmer
Java programmer

GlobalEmployees said...

Find my blog post here
web designer
salesforce developer
laravel developer
web developer


Angular expert said...

This site was... how do I say it? Relevant!! Finally I have found something that helped me. Cheers!



Best Advanced Java Training In Bangalore Marathahalli

Advanced Java Courses In Bangalore Marathahalli

Advanced Java Training in Bangalore Marathahalli

Advanced Java Training Center In Bangalore

Advanced Java Institute In Marathahalli

Naveen said...

Thanks for submit this post. Here I would like to share about the best college for Optometry. Here is the details of best BSc Optometry colleges in Bangalore. If you are looking to study BSc Optometry in Bangalore, click the below link.
Optometry Colleges In Bangalore

Malcom Marshall said...

Nice information, valuable and excellent design, as share good stuff with good ideas and concepts, lots of great information and inspiration, both of which I need, thanks to offer such a helpful information here.

digital marketing course in chennai
digital marketing training in chennai
seo training in chennai
online digital marketing training
best marketing books
best marketing books for beginners
best marketing books for entrepreneurs
best marketing books in india
digital marketing course fees
high pr social bookmarking sites
high pr directory submission sites
best seo service in chennai

Manoj Malviya Kolkata IPS said...

Manoj Malviya youngest Millionaire in India, Biography |Height|Weight|Marital Status And More

vijayshri said...

Thanks for sharing it.I got Very valuable information from your blog.your post is really very Informative.I’m satisfied with the information that you provide for me.Nice post. By reading your blog, i get inspired and this provides some useful information.

sap mm training in pune with placement

Rajesh Anbu said...

I got useful information by reading this blogs
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

Shopclues Winner List said...

Shopclues winner list here an offer you can win the Shopclues lucky draw. Here you can win the Shopclues winner list 2020 and Shopclues winner list. Shopclues lucky draw where you can win the prize just playing the game. You can also check Shopclues lucky draw and Shopclues winner name 2020.

aj said...

Snapdeal winner list here an offer you can win the Snapdeal lucky draw.Here you can win the Snapdeal winner list 2020 and Snapdeal winner list. Snapdeal lucky draw where you can win the prize just playing the game.You can also check Snapdeal winner name and Snapdeal winner name 2020

web design company said...

thanks for your information.it's really nice blog thanks for it.keep blogging.
web design company in nagercoil
website design company in nagercoil
web development company in nagercoil
website development company in nagercoil
web designing company in nagercoil
website designing company in nagercoil
digital marketing company in nagercoil
digital marketing service in nagercoil

svrtechnologies said...


I am inspired with your post writing style & how continuously you describe this topic. After reading your post, software testing training online thanks for taking the time to discuss this, I feel happy about it and I love learning more about this topic...

dewatampan said...

Kingdomtoto situs judi togel yang setiap hari memberikan kemenangan dengan mudah. Kingdomtoto juga cocok sebagai bandar darat alternatif untuk bermain togel online. Untuk melihat hasil result pasaran togel juga bisa disini ya bos.
Situs yang sama kami refferensikan untuk anda yaitu kinghorsetoto. Situs paito warna terlengkap.

Jack sparrow said...



Thanks for sharing such a great information.It is really one of the finest article and more informative too. I want to share some informative data about visual basic training and c# tutorial for beginners . Expecting more articles from you.

Unknown said...

Poker online situs terbaik yang kini dapat dimainkan seperti Bandar Poker yang menyediakan beberapa situs lainnya seperti http://62.171.128.49/hondaqq/ , kemudian http://62.171.128.49/gesitqq/, http://62.171.128.49/gelangqq/, dan http://62.171.128.49/seniqq. yang paling akhir yaitu http://62.171.128.49/pokerwalet/. Jangan lupa mendaftar di panenqq silakan dicoba ya boss

svrtechnologies said...

This is so elegant and logical and clearly explained. Brilliantly goes through what could be a complex process and makes it obvious...

sap bi online training

Shruti said...

Excellent article. I am experiencing a few of these issues as well..

Selenium Courses in Marathahalli

selenium institutes in Marathahalli

selenium training in Bangalore

Selenium Courses in Bangalore

best selenium training institute in Bangalore

selenium training institute in Bangalore


Jack sparrow said...
This comment has been removed by the author.
Harsh Goekna said...

Awesome article, it was exceptionally helpful! I simply began in this and I'm becoming more acquainted with it better. The post is written in very a good manner and it contains many useful information for me. Thank you very much and will look for more postings from you.


digital marketing blog
digital marketing bloggers
digital marketing blogs
digital marketing blogs in india
digital marketing blog 2020
digital marketing blog sites
skartec's digital marketing blog
skartec's blog
digital marketing course
digital marketing course in chennai
digital marketing training
skartec digital marketing academy

svrtechnologies said...

Thanks for sharing such a great information..Its really nice and informative..

sap workflow online training

Anonymous said...

Nice article. For offshore hiring services visit:
avianation

Sharma said...

Wonderful article, very useful and well explanation. Your post is extremely incredible. I will refer this to my candidates...
Python Online Training
Digital Marketing Online Training
AWS Online Training

Mr Rahman said...

Really Nice Post, Thanks for sharing & keep up the good work.
Oflox Is The Best Website Designer In Dehradun

Aruna said...

It's really a nice and useful piece of information about Data Science. I'm satisfied that you shared this helpful information with us.Please keep us informed like this. Thank you for sharing.


Java training in chennai | Java training in annanagar | Java training in omr | Java training in porur | Java training in tambaram | Java training in velachery

Rajesh said...

It is actually a great and helpful piece of information about Java. I am satisfied that you simply shared this helpful information with us. Please stay us informed like this. Thanks for sharing.
Java training in chennai | Java training in annanagar | Java training in omr | Java training in porur | Java training in tambaram | Java training in velachery

Máy mátxa chân said...

Những chia sẻ của bạn thực sự quá thú vị

https://bonngamchan.vn/may-massage-chan-hang-nhat-co-tot-nhu-loi-don/

https://bonngamchan.vn/

https://bonngamchan.vn/danh-muc/bon-ngam-chan/

https://bonngamchan.vn/may-ngam-chan/

akshaya said...

Amazing contents are provided my amazing people. Today, after reading this wonderful blog, I feel that these contents are to be chewed and swallowed. Looking for more delighting contents. Web Designing Course Training in Chennai | Web Designing Course Training in annanagar | Web Designing Course Training in omr | Web Designing Course Training in porur | Web Designing Course Training in tambaram | Web Designing Course Training in velachery

I am HEro said...
This comment has been removed by the author.
Rahul said...

Nice Blog.This would be really helpful for anyone who likes to develop their programming skills.Great content..thanks for sharing..

Artificial Intelligence Training in Chennai
Best Artificial Intelligence Training in Chennai BITA Academy
artificial Intelligence certification training in chennai
artificial Intelligence training institutes in chennai
artificial Intelligence course in chennai
artificial Intelligence training course in chennai
artificial Intelligence course in chennai with placement
artificial Intelligence course fees in chennai
AI Training in Chennai
artificial Intelligence training in omr
artificial Intelligence training in velachery
Best artificial Intelligence course fees in chennai
artificial Intelligence course in omr
artificial Intelligence course in velachery
Best artificial Intelligence course in chennai

Janu said...

Its a wonderful post and very helpful, thanks for all this information. You are including better information regarding this topic in an effective way.




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









Anu said...

Outstanding blog post, I have marked your site so ideally I’ll see much more on this subject in the foreseeable future.
DevOps Training | Certification in Chennai | DevOps Training | Certification in anna nagar | DevOps Training | Certification in omr | DevOps Training | Certification in porur | DevOps Training | Certification in tambaram | DevOps Training | Certification in velachery

Unknown said...

I have recently visited your blog profile. I am totally impressed by your blogging skills and knowledge.

WebSphere MQ Online Training

WebSphere MQ Classes Online

WebSphere MQ Training Online

Online WebSphere MQ Course

WebSphere MQ Course Online

Unknown said...

Thank you for excellent article.You made an article that is interesting.

WebSphere MQ Online Training

WebSphere MQ Classes Online

WebSphere MQ Training Online

Online WebSphere MQ Course

WebSphere MQ Course Online

radhika said...

It's highly informative. The reader can easily understand the concept by reading
AWS training in Chennai

AWS Online Training in Chennai

AWS training in Bangalore

AWS training in Hyderabad

AWS training in Coimbatore

AWS training

AWS online training

Jagna Co Kalani said...

Great Article
Final Year Projects in Python

Python Training in Chennai

FInal Year Project Centers in Chennai

Python Training in Chennai

harshni said...

Thanks for sharing Information to us. If someone wants to know about,I think this is the right place for you!
Artificial Intelligence Training in Chennai | Certification | ai training in chennai | Artificial Intelligence Course in Bangalore | Certification | ai training in bangalore | Artificial Intelligence Training in Hyderabad | Certification | ai training in hyderabad | Artificial Intelligence Online Training Course | Certification | ai Online Training | Blue Prism Training in Chennai | Certification | Blue Prism Online Training Course

raji said...

I think this is one of the most significant information for me. And I’m glad reading your article. Thanks for sharing!

Software Testing Training in Bangalore

Software Testing Training

Software Testing Online Training
<
Software Testing Training in Hyderabad

Software Testing Courses in Chennai

Software Testing Training in Coimbatore

Tiger Online shop said...

Google offers advertisements which appear in search results on google.com with the use of Google AdWords or advertisements that
appear on other websites through the Display Network and Google’s AdSense program.
With google ads you can appear in the top for searched keywords.Thus you will receive more relevant customers for your business.
Google Ads Services
You can get Apple-certified repairs and service at the Apple Store or with one of our Apple Authorized Service Providers.
mobile phone repair in North Olmsted

Unknown said...

hadoop training in chennai
Organic Chemistry tutor
Organic chemistry
online tutor
Organic chemistry

Quickbooks Expert said...

Nice post!

Worried About QuickBooks Error ?Get in touch with QuickBooks expert for instant solution.
Click Here to know how to fix QuickBooks Form 941 Error

Dial on QuickBooks Error Support Phone Number +1-855-977-7463.

Priya Kaur said...

Thanks for Sharing this blog with Us…
best escorts in kapurthala
best escorts in fazilka
best escorts in barnala
best escorts in kharar
best escorts in sangrur

Narendra said...

I am hoping the same best effort from you in the future as well. In fact your creative writing skills has inspired me.

Digital Marketing Company in Haldwani

Narendra said...

Thanks for sharing it.I got Very valuable information from your blog.your post is really very Informatve. I got Very valuable information from your blog.I’m satisfied with the information that you provide for me.
Digital Marketing Company in Haldwani

richard bryan said...

thanks for sharing we at SynergisticIT offer the best aws bootcamp

Unknown said...

This is excellent information. It is amazing and wonderful to visit your site.

Unknown said...

This is excellent information. It is amazing and wonderful to visit your site.
Best Digital Marketing Company in Haldwani

hont said...

IoT Training in Chennai

Josh said...

Male fertility doctor in chennai
Std clinic in chennai
Erectile dysfunction treatment in chennai
Premature ejaculation treatment in chennai

hont said...

digital marketing company
ecommerce service company
shopify website development
prestashop development

saketh321 said...

Great post! I am actually getting ready to across this information, is very helpful my friend. Also great blog here with all of the valuable information you have. Keep up the good work you are doing here. ExcelR Data Analytics Courses

Best Training Institute said...

Good knowledge post for this information
Sap Apo training in bangalore

Usman Awais said...

Delivery Services in Dubai
Delivery Services
Exports of Pakistan

Best Training Institute said...

Information was good,i like your post.Looking forward for more on this topic.
Mule soft training in bangalore

pawan said...

Interact Solutions bulk SMS service provider in India for business of all sizes and budget.
Voice call service provider in india
Email Marketing Services
Bulk SMS Agency
Bulk SMS Gateway

DevOps Online training( https://devopstraininginpune.com/courses/devops-online-training/) said...
This comment has been removed by the author.
Selenium Training in Pune said...

That's really impressive and helpful information you have given, very valuable content.
We are also into education in the IT industry and you also can take advantage of IT Training in Pune

moumita said...

Really it was an awesome article…very interesting to read. Thanks for sharing nice info. Buy Instagram Followers India

Aditi Gupta said...

Nice...I Really Like Your Article Its look like You Spent a Lot of Time and Effort on Your Blog. Thanks for Sharing With Us. Golden Triangle Tour Package India

Vipul Singh said...

Splendid information!
Dr. Bhanu Pratap Singh
ENT Specialist Doctor in Meerut
Top School in Ghaziabad
Quality Education in Ghaziabad
Sinusitis Surgery in Meerut
Website Designing Company in Meerut
Lav Saini

Valluva said...

https://www.blogger.com/comment.g?blogID=14196469&postID=6507055113873541103&page=4&token=1604652474944

cloudbeginners said...

modular furniture manufacturer

Rachel Ross said...

Hey! Lovely blog. Your blog contains all the details and information related to the topic. In case you are a QuickBooks user, here is good news for you. You may encounter any error like QuickBooks Error, visit at QuickBooks Customer Service Phone Number for quick help.

Valluva said...

payroll software
organic chemistry tutor

Drift Financial Services said...

Good luck & keep writing such awesome content.

Virgin Linseed Oil BP
Pure Linseed Oil

Valluva said...

Thanks For Your Blog
Over View For Organic Chemistry
Chemistry

Vipul Singh said...

Nice one, keep producing the type of content.
ENT Specialist in Meerut
CBSE Affiliated School in Meerut
software development company in meerut
Jaina Jewellers Meerut
SEO Trainer in Meerut
Settlement Agreement In London
Best Digital Marketing Company in Meerut
Dr Bhanu Pratap Singh

aaryan said...

aws solution architect training
azure solution architect certification
azure data engineer certification
openshift certification
oracle cloud integration training

keygenius.net/ said...

https://crackedl.com/letasoft-sound-booster-download/
this is amazing site

Oarraziq said...



Click this LINK
CyberLink PowerDirector is a digital video editing program for creating professional-looking video movies and photo slideshows that can be emailed to friends, burned to disc or uploaded to the Internet.

Awais Chughtai said...


wow this websites much more impress me.MKVToolNix Crack

Unknown said...


Leawo Prof. Media is an amazing POST with good content.FINDCRACK is the best crack software site for all Mac and Windows users all over the world.

crackerr said...

Really very happy to say, your post is very interesting to read. I never stop myself to say something about it. You’re doing a great job. Keep it up...
Mirillis Action Activation Key

Unknown said...

hi sir, Wow really interesting article, may later be able to share other helpful information are more interesting. Thank you!MikroTik Beta crack

Unknown said...

hello sir,I truly appreciate this post. I?ve been looking everywhere for this! Thank goodness I found it on Bing. You have made my day! ThanksWindows Service Auditor Crack

crackerr said...

Really very happy to say, your post is very interesting to read. I never stop myself to say something about it. You’re doing a great job. Keep it up...
AnyTrans for iOS 8.8 License Code

Unknown said...

I thinkIphone Backup Extractor Crack is a great Post with very good content. CRACKDUE is the best crack software site for all Mac and Windows users.

Unknown said...

I Considered AnyDesk Crack is an excellent Post with very good content. CRACK GURU is the best crack software site for both Mac and Windows users.

Oarraziq said...


This was a wonderful read from you! It's all very interesting.
Check out the new stuff you post by bookmarking it.
Poweriso crack

https://wares4pc.com/ said...

icecream pdf split merge pro crackIn industry, MATLAB is the tool of choice for high-productivity research, development, and analysis.

crackerr said...

Really very happy to say that your post is very interesting to read. I never stop saying anything about her. You are doing an amazing job. keep moving forward...
wintousb download

softskey said...


This was a wonderful read from you! It's all very interesting.
Check out the new stuff you post by bookmarking it.
DVDfab platinum crack

softskey said...



You provide a fantastic resource and you give it away for free.
My favorite websites are those that recognize the importance of providing free resources.
It is said that everything goes around and comes around again. Post more and keep us informed. Happy reading!
Tenoshare 4ukey KEYGEN

hotpcsoft said...

hi, I found a lot of interesting information here. A really good post, very thankful and hopeful that you will write many more posts like this one. Thanks for sharing.
crackpub

Khan Honey said...

This was a wonderful read from you! It's all very interesting.
Check out the new stuff you post by bookmarking it.
microsoft 2017

crackspro said...

This was a wonderful read from you! It's all very interesting.
Check out the new stuff you post by bookmarking it.
click this link

Unknown said...



hi sir,Found your post interesting to read. I cant wait to see your post soon. Good Luck for the upcoming update.This article is really very interesting and effective thank you.
Directory Monitor Pro Crack

Admin said...

List Of Top Companies

PLC SCADA DCS, Tutorials

list of companies in manyata tech park bangalore

crack said...

Hair loss isn't uncommon in kids, but its causes may be different from those of adult-onset baldness. Often, children lose hair because of a scalp disordertotal commander

crack said...

Conceal while regrowth occurs.
video thumbnails maker platinum crack/

Unknown said...

best payroll software singapore
cloud payroll software

Ubiqcom said...

UBIQCOM is a GPON ONU Router Manufacturer and Supplier in India. It offers a range of benefits including higher bandwidth, better download speed, faster uploads, higher transmission efficiency and so much more. UBIQCOM is the best GPON router in India and also provides the best GPON router price.

Proforyou said...

If you're looking for the best air purifier in India, look no further. In this blog, you'll find the 10 best air purifiers options available right now! Choose from a wide range of Air Purifier online in India and get the best offers only at Proforyou.

Unknown said...

ONLEI Technologies
Python Training
Machine Learning
Data Science
Digital Marketing
Industrial Training In Noida
Winter Training In Noida
IT Training

Reshma said...

Nice blog! Thanks for sharing this valuable information
RPA Training in Hyderabad
RPA Training in Gurgaon

crackspro said...


Thanks for Sharing such an amazing article. Keep working... Your Site is very nice, and it's very helping us.. this post is unique and interesting, thank you for sharing this awesome information Wbs Schedule Pro Crack

Reshma said...

Awesome blog. Thanks for sharing such a worthy information....
Why Should Learn Python
Importance of Learning Python

Rahul Saxena said...

dermatologist in meerut

Hearing loss treatment

best-bridal parlour in meerut

varanasi best cbse school

Gayathri said...

Look at all the positive feedback you have for your informative article. I agree with your content and your other readers. Thank you for sharing.
CCSP Training

Rubel hossen said...

wordpress design agency in united states Need professional WordPress Web Design Services? We're experts in developing attractive mobile-friendly WordPress websites for businesses. Contact us today!

Shivam said...

Find the best-fixed mortgage rate in London that works perfectly for you. We make it easy to compare rates in London big banks and top brokers for free. Best mortgage rate in London

affordable interior designer said...

Thank you for sharing your awesome and valuable article this is the best blog for the students they can also learn.
https://lookobeauty.com/best-interior-designer-in-gurgaon/

Abdulla said...

PrintWay provides its customers a varied suite of printed cards. We have a history of over 6 years in the printing industry. We have produced business cards, pamphlets, flyers, brochures, etc.

pratikshaK said...

I really like the points you mention. nice post.
Java Training In Pune

Siddu said...

Srinivasan panchangam
Mysore Natural loban
Ramayanam Malayalam Book

sindhu said...

Mahameru brass
Sample new
Tirupathi brass

Siddu said...

Author Holy Shopping
Shiva With Parvati Idol
Srimad Valmiki Ramayanam Full Set Tamil