Нужна ли мне синхронизированная карта при реализации шаблона EJBHomeFactory? - PullRequest
0 голосов
/ 26 августа 2009

Когда вы хотите вызвать EJBBean с клиента, сначала вам нужно получить ссылку на объект EJBHome через поиск JNDI. Этот код необходимо выполнять каждый раз, когда вам нужно работать с EJBBean, поэтому он становится избыточным и дорогим.

Чтобы решить эту проблему, вы можете кэшировать ссылки на объекты EJBHome и использовать их снова и снова из кэша, не повторяя поиск JNDI.

Это EJBHomeFactory Pattern (или более общий шаблон локатора службы).

Большинство реализованных мною реализаций используют синхронизированный Map в качестве кеша или Hashtable. Если кеш создается при развертывании приложения на сервере, и впоследствии в кеш не вносятся никакие изменения (выполняются только методы get ()), действительно ли мне нужен синхронизированный Map или подойдет HashMap?

Я знаю, HashMap небезопасно, если хотя бы один из потоков изменяет карту (здесь даже есть сообщение SO на здесь ), но в этом случае потоки выполняют только чтение.

Итак, HashMap безопасно использовать в EJBHomeFactory Pattern?

1 Ответ

0 голосов
/ 26 августа 2009

Если вы можете гарантировать, что жизненный цикл будет таким, как вы описали, то, очевидно, что несинхронизированный HashMap должен быть в порядке. Однако мой инстинкт заключается в том, что это создает хрупкую зависимость от вашего текущего шаблона развертывания.

Если вы используете синхронизированную структуру данных, то вы знаете, безопасно сейчас и в будущем. Если у вас нет конкретных доказательств того, что синхронизация действительно влияет на производительность, я бы выбрал «очевидно правильную» реализацию.

Между прочим, несколько ведущих серверов приложений фактически кэшируют результаты поиска JNDI, поэтому неясно, сколько фактически дает сохранение шаблона, который вы используете - хотя я должен признать, что склонен использовать его сам.

Сами ссылки EJB могут быть повторно использованы, так что частота посещений дома может быть довольно низкой. Если целью является экстремальная производительность, это может быть дальнейшим путем для изучения.

...