2012-09-30 5 views
1

Je crée un site Web avec google app engine, mais j'ai une question sur les servlets côté serveur et leur interaction avec la base de données de banque de données. Fondamentalement, il revient à la condition de concurrence traditionnelle de lire-modifier-écrire; c'est-à-dire que je lis une entité hors de la banque de données, éventuellement en la mettant à jour, puis en écrivant la mise à jour s'il y en a une.Google App Engine (Java): servlets, datastore et multithread

Fondamentalement, puis-je synchroniser l'accès au magasin de données? Est ce que j'ai besoin de? D'après ce que je comprends, le serveur peut générer autant d'instances de mes servlets qu'il le souhaite; J'utilise des méthodes statiques dans mes «coulisses», donc je pensais pouvoir synchroniser les méthodes statiques avec un objet verrou statique. Fondamentalement, je ne sais pas quelles sont les défenses contre les conditions de course/etc. Je n'ai pas besoin de prendre. S'il y a un guide pratique quelque part, ce serait génial, mais je n'arrive pas à en trouver un.

Répondre

1

Non synchronized stratégie vous aidera ici car ce ne sont pas (seulement) de nombreuses instances de la servlet qui peuvent être générées par GAE, mais aussi de nombreuses machines virtuelles différentes. Pour résoudre votre question de base sur la prévention des problèmes de cohérence avec le magasin de données, vous devrez accéder à vos données dans les transactions atomiques. Vérifiez ici: Transactions

1

Je ne connais pas GAE et leur banque de données, mais dans les servlets standard, le conteneur crée exactement une instance de chaque servlet et accède à cette servlet simultanément. Cela ne change pas grand chose à votre problème.

La synchronisation de l'accès à votre banque de données est une mauvaise idée. Tout d'abord, cela va rapidement devenir un goulot d'étranglement car un seul client sera autorisé à accéder à la base de données alors que tous les autres devront attendre. C'est inacceptable. Votre solution va également se casser si votre application est déployée sur plusieurs serveurs. synchronized Les blocs ne sont pas regroupés.

Qu'est-ce que vous cherchez sont transactions - et il semble que App Engine Datastore supports them.

Questions connexes