Дао как член сервлета - нормально? - PullRequest
1 голос
/ 13 мая 2010

Полагаю, DAO безопасен для потоков, не использует членов класса.

Так можно ли без проблем использовать его как частное поле сервлета? Нам нужна только одна копия, и

несколько потоков могут обращаться к нему одновременно, так зачем создавать локальную переменную, верно?

1 Ответ

1 голос
/ 13 мая 2010

«DAO» - это просто общий термин для классов абстракции базы данных. Будь они потокобезопасны или нет, зависит от конкретной реализации.

Этот плохой пример можно назвать DAO, но он вызовет проблемы, если несколько потоков вызовут метод вставки одновременно.

class MyDAO {
     private Connection connection = null;

     public boolean insertSomething(Something o) throws Exception {
          try {
              connection = getConnection()
              //do insert on connection.
          } finally {
              if (connection != null) {
                  connection.close();
              }
          }
     }
}

Таким образом, ответ таков: если ваш DAO правильно обрабатывает соединения и транзакции, он должен работать.

...