Tecnologie

Dettaglio dell'articolo:

domenica 18 febbraio 2007

Cache e Hibernate

Una applicazione dovrebbe essere in grado di mantenere una cache contenente i dati già caricati dal database, e consultare il database solo quando i dati sono stati modificati.
In questo caso, le modifiche devono invalidare la cache.

Hibernate implementa due livelli di cache:

  1. Cache di primo livello: si tratta di una cache a livello di sessione. Questa cache è usata in primo luogo per ottimizzare le query SQL generate da Hibernate. Non è necessario configurare questo tipo di cache, visto che è gestita direttamente dalle librerie di Hibernate.
  2. Cache di secondo livello: si tratta del tipo di cache discusso in questo articolo, che verrà di seguito semplicemente denominata "cache".
Iniziamo ad utilizzare Hibernate senza cache, come mostrato in Figura 1. I dati sono scambiati tra Hibernate ed il database, e le transazioni sono gestite dal database. Hibernate assume che i dati in memoria devono essere aggiornati ad ogni accesso (una assunzione ragionevole, specialmente se Hibernate non ha accesso esclusivo al database).

Figura 1


Figura 1. Hibernate senza nessuna Cache






La Figura 2 mostra Hibernate che opera con una singola JVM cache usata per minimizzare il traffico tra Hibernate ed il database. Questo accrescerà le performance dell'applicazione e minimizzerà il carico sul database, ma a costo di una maggiore complessità nella configurazione (come descritto di seguito) ed utilizzo della memoria.

Figura 2


Figura 2. Hibernate con una Cache




Figura 3 illustra il problema che può sorgere quando si usa una cache.Se l'applicazione non ha accesso esclusivo al database, la cache associata può facilmente diventare "out of sync". Se l'applicazione legacy modifica un record sul database che è presente sulla cache, non avviene nessuna segnalazione che il dato non è aggiornato, e di conseguenza i dati nella cache non saranno corretti.

Figura 3




Figura 3. Hibernate e un sistema legacy




Sessioni Multiple

Una cache su singola jvm, come descritto sin qui, è una cache a livello di sessione. Se c'è la necessità di costruire un sistema che si basi su pi๠di una jvm, sarà necessario utilizzare una cache distribuita.

Sfortunatamente non esiste una soluzione ideale al problema di una cache distribuita in collegamento con un sistema legacy.Se la tua applicazione che utilizza hibernate accede in modo read-only sul database, potrà essere possibile configurare delle cache che scadono periodicamente.

Se sei in grado di controllare tutti gli accessi ad un particolare istanza del database, puoi usare una cache distribuita per assicurare che il traffico dei dati è propriamente sincronizzato. Un esempio di questo è mostrato in Figura 4. Fare attenzione che l'overhead del traffico dovuto alla sincronizzazione della cache non sia maggiore dei vantaggi dati dai dati tenuti in cache.

Figura 4



Figura 4. Hibernate e cache distribuita






Come annotazione finale, va tenuto conto che una cache distribuita è solo una delle possibili soluzioni ai problemi di performance.Alcuni database, per esempio, implementano un sistema interno di distribuzione, facendo in modo che la complessità della distribuzione dei dati sia presa in carico dal database stesso (consentendo all'applicazione di trattare il database multiplo con una singola sorgente di dati).

Configurazione di una cache

Applicazioni che effettuano un grande numero di letture in relazione al numero di operazioni di scrittura in genere traggono massimo beneficio dall'aggiunta di una cache.

Il tipo di cache che si adatta meglio dipende da fattori come l'uso di JTA, requisiti di transaction isolation-level, ed utilizzo di cluster. A causa di queste ampie casistiche di utilizzo, Hibernate non implementa cache, ma si basa su librerie configurabili di terze parti.

Tabella 1. Cache Supportate

Cache

Tipo

URL

EHCache (Easy Hibernate Cache)

In Process

http://ehcache.sourceforge.net/

OSCache (Open Symphony)

In Process OR Cluster

http://www.opensymphony.com/oscache/

SwarmCache

Cluster

http://swarmcache.sourceforge.net/

JBoss TreeCache

Cluster

http://jboss.org/wiki/Wiki.jsp?page=JBossCache


Cache standard

In aggiunta alle cache open-source descritte sopra, può essere utile adottare una soluzione commerciale quale Tangosol Coherence. Per maggiori informazioni consultare http://hibernate.org/132.html e http://tangosol.com/.

La Tabella 2 mostra i dettagli necessari per impostare la proprietà hibernate.cache.provider_class che deve essere impostate nel file hibernate.properties per abilitare l'uso di una cache.

Ogni tipo di cache offre differenti possibilità in termini di memoria e disco e una ampia varietà di possibili configurazioni.

Tabella 2. Specificare un tipo di cache

Cache

Property Value

EHCache

net.sf.ehcache.hibernate.Provider (default) (Easy Hibernate Cache)

OSCache (Open Symphony)

net.sf.hibernate.cache.OSCacheProvider

SwarmCache

net.sf.hibernate.cache.Swarm CacheProvider

JBoss TreeCache

net.sf.hibernate.cache.TreeCache Provider

Custom (User-Defined)

Fully qualified class name pointing to a net.sf .hibernate.cache.CacheProvider implementation


Indipendentemente da quale cache viene scelta, sarà necessario dire a Hibernate che tipo di regole per la cache devono essere applicate ai tuoi dati. Questo viene definito utilizzando il tag cache. Puoi impostare il tag cache nel tuo file *.hbm.xml o nel file hibernate.cfg.xml. E' anche possibile configurare le impostazioni della cache da programma utilizzando l'oggetto Configuration. La Tabella 3 mostra i valori consentiti per il tag cache.

Tabella 3. Opzioni per la cache

Option

Comment

read-only

Utile solo se l'applicazione accede in sola lettura ai dati (ma non effettua modifiche). Particolarmente utile se il cache provider supporta l'expiration automatica della cache.Deve essere anche impostato a mutable=false il tag per la parent class/collection.

read-write

Questa strategia mantiene lo stato della cache "read committed", utilizzando un meccanismo di timestamping ed è diponibile solo in ambienti non clustered.
Se non è utilizzato JTA, assicurarsi che Session.close() or Session.disconnect() venga utilizzato in tutte le transazioni.

nonstrict-read-write

Non verifica che due transazioni modifichino gli stessi dati; questo è lasciato all'applicazione.
Se non è utilizzato JTA, assicurarsi che Session.close() or Session.disconnect() venga utilizzato in tutte le transazioni.

transactional

Cache a transazioni distribuite.


Alcune librerie non supportano tutte le opzioni per la cache. La Tabella 4 quali opzioni supportano i diversi provider.

Tabella 4. Opzioni cache supportate dai provider

Cache

read-only

nonstrict-read-write

read-write

transactional

EHCache

Yes

Yes

Yes


OSCache

Yes

Yes

Yes


SwarmCache

Yes

Yes



JBoss TreeCache

Yes



Yes


Query Cache

I risultati di una query possono essere salvati in cache. Per utilizzare la query cache, essa deve essere abilitata:

hibernate.cache.use_query_cache true

Questa impostazione non è però sufficiente per abilitare la cache all'interno di una applicazione.
E' infatti necessario, ogni volta che viene eseguita una query, richiamare il metodo:

Query.setCacheable(true)

Hibernate salva i risultati di una query nella "cache region" in un formato ridotto, registrando soltanto i riferimenti.
Quindi quando l'applicazione avrà la necessità di leggere i dati contenuti nel risultato della query, essa dovrà effettuuare un accesso al database,
a meno che non sisa stata abilitata la cache di secondo livello.
In sostanza per poter evitare di accedere al database avendo tutti i dati in cache, è necessario:

1) abilitare la cache di secondo livello per tutti i dati collegati alla query;
2) abilitare la query cache e impostare la properietà cacheable dell'oggetto query a true.

Java Transaction API (JTA)

Seguendo la documentazione Sun, JTA "definisce le interfacce Java standard tra un transaction manager e tutte le componenti coinvolte in un distributed transaction system: resource manager, application server, e applicazioni transazionali." In altre parole, JTA riguarda le transazioni che coinvolgono pi๠application server. Per ulteriori dettagli consultare (http://java.sun.com/products/jta/).


Un esempio pratico

Supponiamo di dover utilizzare quanto detto in una applicazione che utilizzi un oggetto Category e degli oggetti Item, ovviamente associati alla propria categoria. Tali oggetti Item sono inoltri associati a delle Bid, che rappresentano offerte di acquisto relative all'oggetto. L'applicazione utilizza inoltre la classe User per definire gli utenti.

Iniziamo ad aggiungere l'elemento di mappatura necessario per dire ad Hibernate come gestire istanze della classe Category.

<class name="Category" table="CATEGORY"> <cache usage="read-write"></cache>
<id ...>
</id>
</class>

Viene usata l'opzione "read-write" invece di "nonstrict-read-write" perchè Category è una classe che può essere condivisa tra molte transazioni concorrenti. (E' chiaro che un isolation level "read committed" può andar bene) Un "nonstrict-read-write" si baserebbe su cache expiration (timeout), ma è preferibile che le modifiche alle categoria siano visibili immediatamente.

Questa mappatura è sufficiente per dire a Hibernate di mette in cache tutti i valori della Category, ma non lo stato di entità o collections. Le collections hanno bisogno del loro tag <cache>.</cache>

<class name="auction.model.Category" table="CATEGORY">
<cache usage="read-write"/>
<id ...>
</id>
<set name="items">
<cache usage="read-write"></cache>
<key ...>
</key>
</set>
</class>


Se è necessario che le istanze degli Item siano messi in cache,devi abilitare il caching della classe Item. Una startegia "read-write" è specialmente appropriata.

Andiamo avanti nell'esempio e consideriamo una collezione di bid associate ad un certo Item. Una Bid è immutabile, ma la collezione delle bid è mutabile, e moduli concorrenti devono vedere ogni aggiunta e rimozione di un elemento senza ritardi:

<class name="Item" table="ITEM">
<cache usage="read-write"></cache>
<id ...>
</id>
<set name="bids">
<cache usage="read-write"></cache>
<key ...>
</key>
</set>
</class>


Alla classe Bid può essere applicata una strategia "read-only":

<class name="Bid" table="BID" mutable="false">
<cache usage="read-only"></cache>
<id ...>
</id>
</class>


User è un esempio di classe che può essere messa in cache utilizzando la strategia "nonstrict-read-write", ammesso che abbia senso il caching degli utenti.



Commenti:

cipro,

Inviato da: cipro il: 2015-12-29 00:13:12.645993

seroquel,

Inviato da: buy seroquel il: 2016-05-29 15:10:08.581442

amitriptyline,

Inviato da: purchase of amitriptyline without a prescriton il: 2015-10-31 22:04:24.745595

valtrex,

Inviato da: valtrex il: 2016-09-17 15:33:04.310041

buy tetracycline online,

Inviato da: tetracycline cost il: 2015-11-13 05:44:23.3218 viagra,

Inviato da: viagraonlineusa il: 2017-07-01 02:09:28.836713 revia,

Inviato da: buy revia il: 2017-03-31 13:23:17.695203 buy acomplia rimonabant,

Inviato da: rimonabant il: 2016-12-12 04:00:36.136296 purchase stattera,

Inviato da: stratera il: 2016-07-31 11:40:25.10912 buy tadalafil,

Inviato da: buy tadalafil il: 2017-03-13 04:40:46.274291 purchase vardenafil,

Inviato da: buy vardenafil il: 2017-03-26 17:44:47.587462 cipro,

Inviato da: cipro il: 2015-12-26 15:30:00.132968 xenical cost,

Inviato da: xenical cost il: 2015-08-25 06:12:06.568875 clonidine 1 mg,

Inviato da: clonidine il: 2016-11-14 20:08:50.560069 furosemide,

Inviato da: furosemide il: 2016-07-04 18:12:14.394127 buy celebrex,

Inviato da: celebrex il: 2017-07-19 10:50:51.842802 viagra soft,

Inviato da: learn more, il: 2016-09-23 21:33:55.390392 buy stromectol,

Inviato da: stromectol il: 2017-03-10 07:10:02.198846 metformin,

Inviato da: metformin tablet il: 2016-12-13 12:29:18.391776 viagra online order,

Inviato da: viagra 100 mg il: 2016-10-09 07:31:18.393594 flagyl,

Inviato da: buy flagyl il: 2017-06-21 23:23:37.387419 phenergan dm,

Inviato da: phenergan pill il: 2016-09-25 04:03:36.838251 continued,

Inviato da: benicar generic substitute il: 2016-08-22 04:41:57.11866 metformin 850 mg,

Inviato da: glucophage metformin il: 2017-03-15 05:37:49.215797 atomoxetine strattera,

Inviato da: buy strattera il: 2016-12-04 03:42:10.382904 where can i buy albuterol online,

Inviato da: albuterol ipratropium il: 2016-10-25 14:02:03.319322 Buy Indocin,

Inviato da: Indocin Over The Counter il: 2015-11-23 00:16:34.127458 buy neurontin,

Inviato da: neurontin il: 2016-04-30 22:44:15.305938 buy elimite online,

Inviato da: elimite il: 2016-06-25 00:08:01.470332 generic viagra soft tabs,

Inviato da: viagra soft il: 2016-05-18 23:10:12.85367 benicar,

Inviato da: benicar online il: 2016-11-01 09:35:17.419007 buy trazodone,

Inviato da: trazodone il: 2017-05-13 20:26:26.340153 viagra,

Inviato da: discover more il: 2017-02-17 13:06:02.380214 tadalafil,

Inviato da: tadalafil il: 2015-11-16 07:14:13.243309 buy amoxil without prescription,

Inviato da: amoxil il: 2016-05-06 01:25:38.615502 buy clomid,

Inviato da: clomid il: 2016-11-09 17:14:43.729714 lipitor,

Inviato da: lipitor il: 2016-10-03 03:32:30.219145 triamterene,

Inviato da: triamterene-hctz 37.5-25 mg tb il: 2017-07-27 12:11:50.893653 Tadalis Sale,

Inviato da: tadalis prescriptions il: 2017-02-09 20:53:45.660725 citalopram,

Inviato da: buy citalopram il: 2016-08-26 14:49:14.449803 found it,

Inviato da: diamox il: 2015-08-13 21:07:21.346906 furosemide 40 mg,

Inviato da: furosemide 40 mg tablets online il: 2016-05-10 21:49:39.988189 levitra,

Inviato da: levitra prescription il: 2016-05-04 06:33:41.003151 metformin 500 mg,

Inviato da: metformin il: 2017-01-12 01:45:44.078741 antabuse 500mg,

Inviato da: antabuse il: 2015-12-18 13:50:25.172033 celebrex 200mg price,

Inviato da: celebrex 200mg price il: 2016-08-14 04:25:55.561656 methotrexate,

Inviato da: buy methotrexate il: 2017-07-01 10:57:51.89213 ampicillin,

Inviato da: ampicillin il: 2017-06-15 14:53:54.893328 cheap cymbalta,

Inviato da: cymbalta il: 2017-06-20 07:15:39.028334 cipro safe,

Inviato da: cipro safe il: 2015-11-27 23:13:42.789476 buspirone 5 mg,

Inviato da: buspar il: 2016-05-10 21:19:38.912419 toradol 10mg tablets,

Inviato da: generic toradol il: 2017-07-16 08:24:22.511079 buy antabuse,

Inviato da: antabuse il: 2015-11-14 02:19:24.569507 where can i purchase clomid,

Inviato da: clomid il: 2015-12-03 16:40:11.106407 hydrochlorothiazide 12.5 mg,

Inviato da: hydrochlorothiazide il: 2016-10-02 06:55:50.503264 cytotec price,

Inviato da: where can i buy cytotec over the counter il: 2015-11-05 09:53:27.239981 acyclovir cream,

Inviato da: acyclovir 400 mg il: 2017-06-15 18:28:08.451522 allopurinol,

Inviato da: where can i buy allopurinol il: 2016-02-09 17:14:32.608597 levaquin,

Inviato da: levaquin il: 2015-08-04 00:57:16.823819 buy stromectol online,

Inviato da: how much does ivermectin cost il: 2017-06-19 20:31:16.902572 augmentin 875,

Inviato da: augmentin il: 2016-09-25 04:22:56.294705 tofranil,

Inviato da: generic tofranil il: 2017-01-02 08:06:51.265471 comment6, http://cialispill.com buy cheap cialis, 8001,

Inviato da: Rwfkkjml il: 2016-12-15 19:39:28.333511 citalopram,

Inviato da: citalopram hbr 20 mg il: 2016-05-27 07:22:17.103954 atenolol,

Inviato da: buy atenolol online il: 2016-03-08 00:02:52.536305 lexapro,

Inviato da: lexapro il: 2015-07-30 18:43:43.111418 trazodone,

Inviato da: desyrel il: 2015-08-01 00:05:58.442781 zofran,

Inviato da: zofran cost il: 2017-02-12 05:19:36.306356 motrin price,

Inviato da: recommended site il: 2017-01-26 13:54:55.909331 generic for nexium,

Inviato da: nexium generic il: 2017-01-12 09:18:45.208707 deltasone,

Inviato da: order deltasone il: 2016-12-11 04:12:06.2978 hydrochlorothiazide,

Inviato da: hydrochlorothiazide il: 2016-09-01 03:13:41.211357 Its really fun to read. I enjoyed a lot. Thanks for sharing this wonderful information. excel training

Inviato da: uali20 il: 2017-07-16 09:05:19.543842 cost of diclofenac,

Inviato da: diclofenac sod 75 mg il: 2016-11-14 03:21:44.358835 suhagra,

Inviato da: suhagra il: 2017-01-19 19:38:18.902918 buy clonidine online,

Inviato da: clonidine for adhd in adults il: 2017-03-23 07:59:41.63251 antabuse medication,

Inviato da: buy antabuse il: 2015-07-17 08:30:29.355372 viagra,

Inviato da: viagra il: 2015-11-06 08:22:56.445327 trazodone,

Inviato da: trazodone il: 2016-05-07 04:05:07.391625 allopurinol tabs,

Inviato da: buy allopurinol il: 2016-05-05 12:29:17.713206 explained here,

Inviato da: viagra on sale il: 2016-01-13 13:49:46.305277 buy furosemide 40 mg,

Inviato da: furosemide il: 2016-05-14 19:04:36.951293 generic for avodart medication,

Inviato da: generic for avodart il: 2015-11-25 00:23:56.354274 purchase cialis online no prescription,

Inviato da: cialis il: 2015-12-16 21:18:42.657114 valtrex,

Inviato da: valtrex cream il: 2017-01-12 21:53:07.761392 buy cephalexin,

Inviato da: buy cephalexin il: 2016-08-15 06:16:08.996453 nexium,

Inviato da: nexium dr 40 mg il: 2017-07-13 19:00:27.230642 allopurinol,

Inviato da: home page il: 2016-01-07 06:33:23.80366 fluoxetine,

Inviato da: fluoxetine 20 mg capsule il: 2016-09-28 02:41:28.939542 buy nolvadex,

Inviato da: where can i buy nolvadex il: 2016-04-13 21:45:10.70955 clindamycin,

Inviato da: clindamycin phosphate il: 2016-03-20 02:11:52.371121 baclofen without prescription,

Inviato da: baclofen il: 2015-11-19 11:09:38.761864 buy cymbalta online,

Inviato da: buy cymbalta online il: 2015-12-17 19:18:31.777461 aciphex,

Inviato da: generic for aciphex 20 mg il: 2016-08-17 19:30:48.555934 buy noroxin,

Inviato da: noroxin il: 2017-02-16 12:09:32.213524 atenolol,

Inviato da: atenolol 50mg il: 2016-11-08 01:58:18.711607 wellbutrin generic,

Inviato da: wellbutrin il: 2017-02-13 00:05:42.169571 kamagra 100mg oral jelly,

Inviato da: kamagra il: 2016-02-01 17:13:48.650803 tetracycline 250mg,

Inviato da: tetracycline 250 mg il: 2015-10-29 13:54:55.132014 lasix on line,

Inviato da: lasix il: 2017-04-06 20:45:43.845415 webcam porn live,

Inviato da: czech chat rooms sex il: 2016-09-30 06:01:07.35949 sildenafil 100mg price,

Inviato da: sildenafil generic il: 2015-08-21 22:30:56.297751 amitriptyline,

Inviato da: 25 mg amitriptyline il: 2015-08-21 22:42:34.442875 bentyl,

Inviato da: bentyl otc il: 2017-03-20 10:50:38.760177 tetracycline no prescription,

Inviato da: order tetracycline online without prescription il: 2016-12-04 18:46:41.058694 Clonidine,

Inviato da: Clonidine il: 2017-02-04 07:49:40.730778 amitriptylin online,

Inviato da: elavil 25 mg il: 2016-11-30 21:31:36.059236 Medrol Online,

Inviato da: medrol il: 2015-11-08 14:39:00.190751 lisinopril 20 mg tablet,

Inviato da: Lisinopril Tablets il: 2015-11-22 13:59:37.492608 augmentin,

Inviato da: augmentin il: 2016-04-19 01:37:00.955672 zithromax 100 mg,

Inviato da: zithromax il: 2017-05-14 05:00:08.507864 prednisolone,

Inviato da: prednisolone generic il: 2017-01-14 14:56:39.299147 antabuse price,

Inviato da: Buy Antabuse il: 2015-11-22 18:49:51.700284 where can i order viagra,

Inviato da: viagra generic il: 2015-11-05 13:35:02.0007 This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post! web design services

Inviato da: uali20 il: 2017-07-16 08:47:49.051041 lisinopril,

Inviato da: lisinopril il: 2016-09-30 18:39:55.550483 This post is very simple to read and appreciate without leaving any details out. Great work! You completed certain reliable points there. I did a search on the subject and found nearly all persons will agree with your blog. the-online-free-games.blogspot.com

Inviato da: Toom il: 2016-04-27 18:39:06.258517 nolvadex tamoxifen,

Inviato da: nolvadex tamoxifen il: 2016-05-04 08:24:56.334952 albuterol,

Inviato da: buy albuterol il: 2017-07-01 00:33:39.566653 eurax,

Inviato da: eurax il: 2017-06-14 07:18:10.229882 doxycycline,

Inviato da: doxycycline mono il: 2016-10-24 12:53:34.392797 albuterol,

Inviato da: albuterol online il: 2017-01-12 13:43:51.016627 abilify,

Inviato da: abilify il: 2016-11-01 16:12:55.170992 trazodone 50 mg,

Inviato da: trazodone il: 2016-09-16 16:47:54.645491 buy methotrexate online,

Inviato da: methotrexate il: 2016-05-19 13:14:33.243466 levitra 10 mg,

Inviato da: levitra best price il: 2015-10-20 02:28:50.326254 allopurinal,

Inviato da: allopurinol il: 2016-01-03 00:06:24.363296 where to buy nolvadex,

Inviato da: nolvadex il: 2015-08-05 21:13:19.165521 synthroid,

Inviato da: synthroid il: 2017-03-09 00:18:31.625281 levaquin,

Inviato da: levaquin 250mg il: 2017-01-07 12:46:02.00396 erythromycin,

Inviato da: erythromycin online il: 2016-09-15 23:21:20.330071 cymbalta,

Inviato da: cymbalta il: 2017-01-05 07:00:12.70871 cephalexin,

Inviato da: cephalexin il: 2016-12-08 05:08:44.402146 generic retin-a,

Inviato da: generic retin-a micro il: 2016-09-23 15:22:32.33518 generic wellbutrin price,

Inviato da: buy wellbutrin il: 2016-07-12 19:42:10.281089 tetracycline online without prescription,

Inviato da: tetracycline over the counter il: 2016-01-18 04:40:06.594792 valtrex,

Inviato da: where can i buy valtrex il: 2015-07-30 22:26:33.952451 tentex royal without prescription,

Inviato da: tentex royal il: 2016-07-08 19:31:27.900299 qkm http://cashadvance.party payday loans without lenders

Inviato da: Payday Loans il: 2017-01-26 08:52:23.308584 propranolol,

Inviato da: propranolol beta blocker il: 2017-05-13 01:47:54.757664 abilify aripiprazole,

Inviato da: abilify buy online il: 2016-01-31 03:36:17.719151 valtrex mg,

Inviato da: valtrex il: 2015-10-25 08:01:31.450659 This is a wonderful article, Given so much info in it, These type of articles keeps the users interest in the website, and keep on sharing more ... good luck Click Here

Inviato da: uali20 il: 2017-07-23 12:36:54.453311 viagra,

Inviato da: viagra il: 2017-07-13 07:10:47.680283 give me a sign; I'm starting to wonder if you've lost your way I've been right here waiting patiently, Your lane should be right here next to me I need you tonight, think of you all of the time. thank you

Inviato da: bloons tower defense 5 il: 2017-08-04 04:11:04.775113 cephalexin,

Inviato da: cephalexin 250 mg il: 2017-03-27 06:52:21.48995 cytotec,

Inviato da: cytotec online il: 2016-08-08 14:19:40.52655 yasmin online,

Inviato da: yasmin il: 2016-07-02 02:09:28.88717 tamoxifen,

Inviato da: tamoxifen online il: 2017-03-20 21:14:08.464263 generic amitriptyline,

Inviato da: amitriptyline online il: 2016-07-17 03:41:45.15338 propranolol er,

Inviato da: propranolol il: 2017-04-02 03:22:38.58512 This post is very simple to read and appreciate without leaving any details out. Great work! You completed certain reliable points there. I did a search on the subject and found nearly all persons will agree with your blog.

Inviato da: Toom il: 2016-04-27 18:40:17.296462 kamagra,

Inviato da: look at this il: 2016-06-29 11:42:15.310999 atenolol 25 mg,

Inviato da: tenormin atenolol il: 2016-08-24 09:06:26.597022 hot porns show,

Inviato da: hot porns show il: 2015-09-17 06:40:51.182999 cheap metformin,

Inviato da: metformin il: 2016-01-19 19:58:17.844765 buy valtrex,

Inviato da: valtrex il: 2017-05-13 00:22:05.691697 generic viagra soft tabs,

Inviato da: viagra soft il: 2017-01-13 08:21:04.618848 synthroid 175,

Inviato da: synthroid il: 2017-01-21 06:01:56.969276 albendazole,

Inviato da: albendazole il: 2017-03-15 12:28:21.306724 Great ceativity and the post clarity is awesome! Thanks for your article! I have been looking for quite a long time and fortunately I read this article! I believe there are many other people who are interested in them just like me! Thank you for sharing them with everyone!

Inviato da: happy wheels il: 2017-08-11 06:26:19.412537 amoxicillin,

Inviato da: 500 mg amoxicillin il: 2016-09-27 13:50:10.134834 amoxicillin without a prescription,

Inviato da: amoxicillin capsule il: 2015-07-21 00:14:59.683326 metformin hcl,

Inviato da: metformin il: 2016-07-27 14:45:26.765947 where can i buy acyclovir online,

Inviato da: buy acyclovir il: 2017-07-28 14:10:03.242379 levitra costs,

Inviato da: levitra il: 2016-02-07 17:44:06.192442 silagra,

Inviato da: silagra online il: 2016-07-23 05:08:01.175549 viagra,

Inviato da: viagra il: 2015-12-16 12:53:11.199393 bupropion prices,

Inviato da: bupropion hcl sr il: 2015-08-03 19:24:50.735022 buying viagra online,

Inviato da: viagra canadian il: 2016-02-08 21:30:08.696044 buy tadalis sx,

Inviato da: tadalis sx il: 2015-09-11 05:46:02.773524 buy robaxin online,

Inviato da: robaxin gold il: 2016-07-17 21:58:14.704955 lisinopril diuretic,

Inviato da: lisinopril diuretic il: 2016-12-09 14:59:44.842948 where can i buy misoprostol,

Inviato da: misoprostol online il: 2017-07-14 12:31:49.151072 yasmin birth control pills,

Inviato da: yasmin birth control il: 2017-07-08 19:33:06.787756 arimidex testosterone,

Inviato da: arimidex il: 2016-11-12 05:03:11.596919 synthroid 125 mcg,

Inviato da: synthroid 125 mcg il: 2016-11-03 18:53:51.713783 where to buy retin a tretinoin,

Inviato da: tretinoin cream il: 2015-07-14 16:32:13.796158 indocin generic,

Inviato da: buy indocin il: 2015-12-04 22:29:18.813949 propecia,

Inviato da: propecia generic il: 2016-05-04 00:13:49.212995 buy atarax,

Inviato da: buy atarax il: 2016-08-01 04:56:45.830247 valtrex medication,

Inviato da: daily valtrex no prescription il: 2015-10-12 09:36:16.800725 buy zithromax,

Inviato da: zithromax il: 2016-11-10 23:01:34.929107 metformin,

Inviato da: metformin hcl il: 2016-08-16 06:36:19.586643 augmentin,

Inviato da: generic augmentin online il: 2016-09-22 20:31:42.87533 abilify,

Inviato da: abilify il: 2016-09-27 18:09:59.561425 advair,

Inviato da: advair 250 il: 2015-08-21 17:19:44.926008 abilify,

Inviato da: generic abilify il: 2015-08-05 20:14:32.795957 viagra soft,

Inviato da: viagra soft 100mg il: 2015-10-30 19:33:28.069673 cymbalta,

Inviato da: cymbalta il: 2016-07-28 21:25:35.517814 kamagra gold 100mg,

Inviato da: kamagra il: 2016-12-13 21:17:58.56648 buy alli,

Inviato da: buy alli il: 2016-05-23 19:18:16.485225 advair prescription,

Inviato da: price of advair il: 2017-04-27 07:37:47.402138 atenolol,

Inviato da: bonuses il: 2016-01-25 16:59:00.538376 clonidine,

Inviato da: clonidine generic il: 2016-11-16 21:36:22.617374 buy clindamycin online,

Inviato da: clindamycin il: 2016-02-18 06:16:58.697555 buy viagra soft tabs,

Inviato da: buy viagra soft il: 2017-07-14 23:41:32.840257 hydrochlorothiazide,

Inviato da: hydrochlorothiazide il: 2015-12-10 04:59:57.121014 stromectol,

Inviato da: citation il: 2016-02-13 13:01:18.254388 buy bentyl,

Inviato da: bentyl for stomach pain il: 2017-01-26 11:17:11.681814 buy xenical cheap,

Inviato da: xenical il: 2015-08-01 04:32:37.429382 arimidex online,

Inviato da: arimidex for men il: 2016-07-10 19:24:50.917486 prednisolone,

Inviato da: methylprednisolone il: 2017-04-12 21:08:01.955095 albenza,

Inviato da: albenza over the counter il: 2016-02-01 06:45:20.701679 phenergan,

Inviato da: phenergan generic il: 2015-10-18 04:46:09.773759 zofran,

Inviato da: zofran il: 2016-10-29 11:13:24.642368 cheap propecia,

Inviato da: buy propecia without prescription il: 2016-02-16 23:47:23.932974 synthroid without prescription,

Inviato da: synthroid 75 mcg il: 2016-02-18 13:57:19.149479 Buy Azithromycin,

Inviato da: buy azithromycin il: 2016-11-14 11:18:12.015403 clindamycin 150mg,

Inviato da: clindamycin il: 2017-01-13 06:47:57.76852 amoxicillin tablet,

Inviato da: amoxicillin tablet il: 2015-11-28 04:17:48.175103 buy lasix,

Inviato da: lasix tablet il: 2017-03-23 19:07:29.125268 cleocin gel,

Inviato da: cleocin gel for acne il: 2016-09-24 06:03:24.144052 buy amoxil,

Inviato da: amoxil il: 2017-01-08 18:29:42.727149 acyclovir 400 mg cost,

Inviato da: aciclovir cream il: 2016-09-16 22:17:34.752486 tadalafil,

Inviato da: tadalafil online il: 2015-11-18 11:50:58.433253 buy albuterol,

Inviato da: read full report il: 2017-07-29 01:01:28.979045 cephalexin,

Inviato da: cephalexin 500 mg capsule il: 2016-09-27 17:23:10.451462 read more,

Inviato da: methotrexate il: 2017-04-19 12:54:48.847998 This is a smart blog. I mean it. You have so much knowledge about this issue, and so much passion. You also know how to make people rally behind it, obviously from the responses. comptia a+ training

Inviato da: uali20 il: 2017-07-16 08:55:21.746922 I surprise how much effort you put to create such a great informative website. comptia a+ training london

Inviato da: uali20 il: 2017-07-16 09:14:13.531762 furosemide tab 40mg,

Inviato da: purchase furosemide 20 mg il: 2015-12-08 17:40:10.909969 buy lasix online no prescription,

Inviato da: lasix 40 mg il: 2016-09-03 09:05:30.956073 avodart,

Inviato da: generic avodart 0 5 mg il: 2015-10-31 11:05:02.953308 cleocin gel,

Inviato da: cleocin gel il: 2016-06-22 16:29:38.514194 cost of cymbalta,

Inviato da: cymbalta il: 2016-11-05 17:55:53.782424 acomplia online,

Inviato da: cheap acomplia online il: 2017-01-19 04:14:38.1446 prednisolone,

Inviato da: prednisolone il: 2016-10-08 07:40:07.51598 zofran,

Inviato da: where can you buy zofran over the counter il: 2016-06-24 19:19:10.926757 clindamycin,

Inviato da: clindamycin hydrochloride il: 2015-08-09 07:14:25.591903 ez money payday loans,

Inviato da: ez money payday loan il: 2015-09-05 12:02:08.963142 diflucan drug,

Inviato da: buy diflucan online il: 2016-02-14 12:58:48.081488 where can i buy retin a,

Inviato da: retin-a il: 2017-02-13 06:07:36.991172 atarax,

Inviato da: atarax il: 2017-07-26 11:32:15.066547 atenolol,

Inviato da: generic atenolol il: 2015-10-21 01:07:36.343925 where can i buy tretinoin cream,

Inviato da: where can i buy tretinoin cream il: 2015-12-11 20:35:42.492393 cheap bupropion,

Inviato da: bupropion sale il: 2017-03-03 07:39:57.665612 proscar 1mg,

Inviato da: proscar il: 2016-10-16 21:57:57.857117 anafranil,

Inviato da: anafranil cost il: 2016-11-21 00:21:21.681437 levaquin buy,

Inviato da: cheap levaquin il: 2015-10-04 06:17:27.39935 atenolol,

Inviato da: atenolol online il: 2016-06-29 03:31:49.947245 methotrexate without a prescription,

Inviato da: methotrexate cost il: 2015-10-04 05:42:40.079313 propranolol buy online,

Inviato da: propranolol il: 2017-02-13 13:24:07.902177 viagra,

Inviato da: cost of viagra il: 2016-08-20 21:33:37.881899 check this out,

Inviato da: advair il: 2016-11-19 20:53:37.801113 extra resources,

Inviato da: buy effexor xr 150mg il: 2017-01-04 16:35:43.211331 zithromax,

Inviato da: zithromax z pak il: 2015-07-30 19:06:11.999869 I’ve been searching for some decent stuff on the subject and haven't had any luck up until this point, You just got a new biggest fan!.. Cyber security training London

Inviato da: uali20 il: 2017-07-16 08:57:21.007096 100 mg lasix no prescription,

Inviato da: lasix il: 2016-04-29 02:24:14.793361 yasmin generic,

Inviato da: yasmin online il: 2017-07-28 02:04:49.389512 silagra,

Inviato da: silagra online il: 2016-12-19 18:16:55.228077 methotrexate ectopic,

Inviato da: methotrexate price il: 2015-07-28 07:23:45.015654 azithromycin,

Inviato da: azithromycin online il: 2015-07-29 20:12:18.593038 clindamycin,

Inviato da: clindamycin 150 mg il: 2016-11-15 22:27:56.807069 cheap cialis,

Inviato da: cialis generic price il: 2016-09-16 10:39:55.20945 flagyl 500mg,

Inviato da: flagyl il: 2017-01-08 02:28:02.794108 triamterene,

Inviato da: triamterene-hctz 75-50mg tab il: 2017-07-25 23:52:31.288295 trazodone,

Inviato da: cheap trazodone il: 2017-03-01 13:41:54.379401 Buspar Without A Prescription,

Inviato da: Buspar il: 2016-11-02 00:19:25.633065 cafergot medication,

Inviato da: acyclovir il: 2016-10-28 21:30:54.429297 prednisone,

Inviato da: presnidone without a prescription il: 2016-09-21 01:31:28.074468 vardenafil,

Inviato da: vardenafil il: 2017-06-19 21:40:42.59151 pct nolvadex,

Inviato da: nolvadex for women il: 2016-09-26 18:04:15.498059 prednisolone,

Inviato da: homepage il: 2016-05-28 16:55:58.215239 trazodone 100mg,

Inviato da: trazodone il: 2016-08-22 18:28:12.528399 cialis,

Inviato da: cialis il: 2016-05-17 03:42:01.643053 cost of augmentin,

Inviato da: augmentin online il: 2015-11-25 12:01:49.185812 citalopram,

Inviato da: citalopram il: 2016-07-22 03:09:47.955328 valtrex prescription,

Inviato da: valtrex prescription il: 2015-08-25 07:06:05.852758 cheap advair diskus,

Inviato da: advair il: 2015-09-10 21:13:18.619209 colchicine probenecid,

Inviato da: Colchicine Online il: 2015-11-09 19:42:11.747726 amoxicillin clavulanate,

Inviato da: amoxicillin brand name il: 2016-07-29 17:18:15.931065 buy viagra soft tabs,

Inviato da: viagra soft 100mg il: 2017-06-19 23:18:54.069961 viagra 25 mg,

Inviato da: viagra generic canada il: 2016-11-01 14:58:44.818212 generic seroquel xr,

Inviato da: generic seroquel il: 2016-03-15 19:18:28.212454 valtrex,

Inviato da: valtrex prices il: 2016-07-11 06:30:20.905713 buy doxycycline,

Inviato da: Doxycycline Online il: 2017-02-08 13:30:41.724768 buy prednisone,

Inviato da: prednisone prescription il: 2016-03-20 11:15:10.080209 sildenafil,

Inviato da: sildenafil 100mg price il: 2017-01-14 08:35:20.204987 wellbutrin,

Inviato da: web site il: 2017-02-10 07:40:17.212509 fluoxetine hcl,

Inviato da: fluoxetine 10mg il: 2017-02-14 15:38:48.385254 antabuse,

Inviato da: antabuse il: 2015-07-31 00:30:23.672404 where can i buy amoxicillin,

Inviato da: where can i buy amoxicillin il: 2016-01-08 11:28:54.801054 lisinopril,

Inviato da: lisinopril pills il: 2016-10-12 02:43:43.539445 torsemide,

Inviato da: torsemide 40 mg il: 2016-09-30 12:26:06.704523 stromectol,

Inviato da: stromectol il: 2016-12-07 14:02:03.224292 Effexor XR,

Inviato da: effexor prices il: 2016-12-01 13:00:25.697623 buy zofran,

Inviato da: zofran il: 2016-12-07 09:04:16.687591 antabuse,

Inviato da: buy disulfiram online il: 2015-10-02 06:21:55.16553 finasteride proscar,

Inviato da: propecia cost il: 2017-01-09 19:12:00.928599 buy buspar,

Inviato da: buspar il: 2016-10-14 21:42:12.639545 purchase diclofenac,

Inviato da: diclofenac 50 mg il: 2017-07-17 12:15:26.536883 adalat,

Inviato da: adalat il: 2016-11-08 10:31:50.881319 elocon cream for sale,

Inviato da: elocon il: 2017-07-23 15:50:39.139256 amoxil,

Inviato da: cheap amoxil il: 2015-10-10 01:02:41.609226 baclofen 10 mg,

Inviato da: buy baclofen il: 2017-03-20 14:32:52.259872 torsemide,

Inviato da: torsemide il: 2017-01-03 08:10:20.336738 lisinopril oral,

Inviato da: zestoretic il: 2016-01-03 22:26:56.12218 tretinoin cream,

Inviato da: tretinoin cream il: 2015-12-27 09:51:00.292618 buy zofran,

Inviato da: zofran il: 2016-02-19 19:42:07.587047 prednisone for sale,

Inviato da: prednisone 10 il: 2016-02-17 04:56:23.678238 diflucan,

Inviato da: diflucan il: 2015-11-04 13:36:30.79939 This is a great article thanks for sharing this informative information. I will visit your blog regularly for some latest post. I will visit your blog regularly for Some latest post. ccnp training

Inviato da: uali20 il: 2017-07-16 09:16:30.788767 prozac,

Inviato da: prozac il: 2017-02-16 02:21:05.248619 buy arimidex,

Inviato da: buy arimidex il: 2016-10-26 15:48:19.901518 read more,

Inviato da: buy ventolin il: 2016-09-15 04:42:25.663346 propecia,

Inviato da: buying propecia online il: 2015-10-06 12:08:10.880565 abilify,

Inviato da: abilify generic il: 2016-03-15 07:53:32.467473 cleocin online,

Inviato da: BUY CLEOCIN il: 2016-09-06 12:49:30.045212 flagyl,

Inviato da: flagyl il: 2016-05-09 12:07:12.514302 lasix,

Inviato da: BUY LASIX il: 2016-08-30 00:32:01.897869 metformin 850,

Inviato da: glyburide metformin il: 2016-07-07 07:34:08.595408 buy clindamycin online,

Inviato da: generic clindamycin online il: 2016-10-24 12:18:06.828825 doxycycline,

Inviato da: doxycycline il: 2015-08-01 01:46:19.389632 otc retin a,

Inviato da: retin-a il: 2016-01-16 16:12:14.43143 albuterol,

Inviato da: albuterol il: 2017-06-16 19:16:32.049758 rogaine,

Inviato da: rogaine extra strength il: 2016-10-13 02:40:23.590455 ildenafil citrate,

Inviato da: sildenafil 100mg tablets il: 2015-12-10 14:09:36.863872 found here,

Inviato da: ampicillin il: 2017-05-16 12:57:27.664593 example here,

Inviato da: cost of celebrex il: 2015-09-07 13:26:53.618102 viagra,

Inviato da: viagra cheap il: 2016-05-17 21:59:43.758206 Great ceativity and the post clarity is awesome! Thanks for your article! I have been looking for quite a long time and fortunately I read this article! I believe there are many other people who are interested in them just like me! Thank you for sharing them with everyone! happy wheels

Inviato da: happy wheels il: 2017-08-11 06:26:51.64188 medrol,

Inviato da: medrol il: 2017-03-09 09:32:40.819962 tretinoin,

Inviato da: tretinoin cream 0.1 il: 2015-07-13 19:59:04.352659 elocon eczema,

Inviato da: elocon il: 2017-01-26 06:29:33.445514 medrol,

Inviato da: medrol il: 2016-09-17 15:13:28.820897 sildenafil,

Inviato da: sildenafil citrate il: 2016-11-08 21:35:28.256151 Thank you so much for caring about your content and your readers. java training

Inviato da: uali20 il: 2017-07-16 09:02:55.604015 fluoxetine,

Inviato da: fluoxetine hcl il: 2016-09-26 01:49:36.704612 buy erythromycin,

Inviato da: erythromycin il: 2016-01-22 12:52:50.017975 retin-a,

Inviato da: retin-a il: 2015-10-08 16:42:02.018059 buy motilium,

Inviato da: motilium il: 2017-03-21 01:01:13.161277 rogaine minoxidil,

Inviato da: rogaine il: 2016-05-30 01:50:02.710659 atarax,

Inviato da: atarax il: 2017-03-22 18:59:43.16631 abilify,

Inviato da: abilify cost il: 2016-11-09 13:59:15.977559 levitra 20 mg cost,

Inviato da: levitra il: 2016-12-06 21:21:40.549543 prednisone,

Inviato da: prednisone 20mg by mail without prescription il: 2016-11-03 20:38:31.3804 buy advair diskus online,

Inviato da: price of advair without insurance il: 2017-05-01 18:21:07.701063 azithromycin price without insurance,

Inviato da: azithromycin il: 2016-01-07 08:34:47.136875 hydrochlorothiazide online,

Inviato da: hydrochlorothiazide 12.5 il: 2015-12-19 02:33:17.65993 levaquin,

Inviato da: levaquin il: 2016-12-15 02:20:50.967798 trazodone,

Inviato da: trazodone il: 2017-03-26 19:25:17.41571 lisinopril 10 mg,

Inviato da: lisinopril 20mg il: 2016-12-30 10:28:58.553906 viagra,

Inviato da: professional viagra il: 2016-02-22 06:01:30.939778 buy seroquel,

Inviato da: seroquel il: 2017-07-03 04:37:52.077956 zithromax,

Inviato da: z pack zithromax il: 2015-09-29 13:25:24.150986 erythromycin,

Inviato da: erythromycin il: 2015-11-24 21:08:15.960214 zoloft,

Inviato da: order zoloft online no prescription il: 2015-12-09 23:44:14.046331 methotrexate cost,

Inviato da: buy methotrexate il: 2016-05-21 01:32:56.816701 advair,

Inviato da: advair il: 2017-07-24 12:10:00.44496 buy cheap ampicillin,

Inviato da: buy ampicillin without prescription il: 2017-01-02 14:28:07.733415 bupropion sr 150 mg,

Inviato da: bupropion sr 150 mg il: 2016-10-24 16:06:44.547046 xenical price,

Inviato da: xenical il: 2015-08-12 05:04:18.094092 Thanks for posting this info. I just want to let you know that I just check out your site. Sprinter Van Rental Atlanta

Inviato da: uali20 il: 2017-07-16 08:51:15.901718 fluoxetine,

Inviato da: fluoxetine capsules il: 2016-02-13 12:53:31.135107 allopurinol,

Inviato da: allopurinol il: 2017-02-03 10:01:11.389041 viagra for men,

Inviato da: viagra il: 2017-07-27 22:23:20.965801 buy ampicillin,

Inviato da: where can i buy ampicillin il: 2017-07-14 06:08:35.556996 elocon cream .1,

Inviato da: elocon il: 2017-06-20 07:02:12.58267 where to buy alli pills,

Inviato da: generic alli online il: 2015-11-14 19:50:55.483098 tentex royal without prescription,

Inviato da: tentex royal il: 2015-08-30 15:28:27.866633 for more,

Inviato da: clindamycin buy il: 2016-04-05 16:31:07.06626 albendazole,

Inviato da: albendazole for sale il: 2015-10-12 17:03:41.330591 buy wellbutrin,

Inviato da: buy wellbutrin online il: 2016-07-08 08:42:29.598259 amoxicillin,

Inviato da: amoxicillin il: 2016-07-24 02:22:22.17572 bonuses,

Inviato da: advair il: 2016-09-09 13:53:25.58929 furosemide,

Inviato da: furosemide il: 2015-11-29 20:05:42.13291 prednisone,

Inviato da: generic prednisone il: 2015-07-21 14:28:56.887222 cialis,

Inviato da: cialis 40 mg il: 2016-10-29 01:20:24.503993 wellbutrin,

Inviato da: wellbutrin xl 300 il: 2016-09-13 17:09:20.578725

Scrivi un commento:

Archivio