2013-04-29 7 views
2

Прости меня, если это очевидный вопрос, но я прочитал documentation сверху вниз, и я до сих пор не уверен, что ответ на этот вопрос:GAE/Java: безопасны ли транзакции?

Если у меня есть сделки датастора, который считывает количество счетчик и увеличивает его, могу ли я быть уверенным, что 2 параллельных сервлета не будут чередовать друг друга? Другими словами, в документах говорится только, что транзакция либо терпит неудачу, либо не удастся атомарно, но она не говорит, что транзакция блокирует данные для других сервлетов, и что происходит, когда два сервлета одновременно получают доступ к одному и тому же объекту?

Если транзакции не являются потокобезопасными, следует ли использовать synchronized при доступе к совместно используемым хранилищам данных?

+0

синхронный работает только в одной виртуальной машине Java (примерно) и не поможет вам, когда AppEngine раскручивается несколько JVMs служить приложение. Как выглядит ваш текущий код транзакции? Сколько запросов вы ожидаете попасть в свой счетчик? Возможно, стоит посмотреть https://developers.google.com/appengine/articles/sharding_counters. –

ответ

0

Сделки являются «потокобезопасными», если вы выполняете запись для объектов, имеющих общего предка.

Ознакомьтесь с API-интерфейсом DATASTOR низкого уровня GAE и, как только вы поймете, как работают сущности, это довольно просто.

https://developers.google.com/appengine/docs/java/datastore/entities

Смежные вопросы