Синглтоны обычно плохая идея, и мне было бы интересно посмотреть, что делает это исключением. Как правило, они просто замаскированные глобалы, и помимо всех старых проблем с глобалами (например, см. http://c2.com/cgi/wiki?GlobalVariablesAreBad,, в частности, бит вверху, говорящий о нелокальности, неявной связи, проблемах параллелизма, а также тестировании и ограничение), в современном мире вы получаете дополнительные проблемы, вызванные распределенными и параллельными системами. Если ваше приложение потенциально работает на нескольких серверах, можете ли вы безопасно и правильно использовать оба экземпляра приложения на одном и том же экземпляре Singleton?
Если объект не имеет своего состояния, тогда ответ - да, но вам не нужен синглтон, только пространство имен.
Но если у объекта действительно есть какое-то состояние, вам нужно беспокоиться о том, как два экземпляра приложения будут синхронизировать детали. Если два экземпляра попытаются одновременно прочитать и записать один и тот же экземпляр, ваши результаты могут оказаться неверными. (Например, синглтон HitCounter, который считывает текущее значение, добавляет 1 и записывает текущее значение, может пропустить попадания таким образом - и это пример наименьшего вреда, который я могу придумать.)
Я в основном незнаком с ним, поэтому, возможно, Google App Engine имеет некоторую транзакционную логику, чтобы справиться со всем этим для вас, но это, вероятно, означает, что вам придется добавить некоторые дополнительные вещи, чтобы справиться с откатами и тому подобным.
Итак, мой основной совет - посмотреть, сможете ли вы переписать алгоритм или систему, не прибегая к использованию синглтона.