2013-01-08 3 views
-1

나는 EmployeeDAOImpl.java 및 DepartmentDAOImpl.java가 있습니다. 이제 데이터 서비스 계층에서이 두 가지를 호출하려고합니다. EmployeeDAO 및 DepartmentDAO는 인터페이스이며 CRUD 메소드 만 사용할 수 있습니다. 서비스 레이어에서 나는 메소드에서 createEmployee (Employee employee)와 createDepartment (Department department)라는 두 개의 메소드를 호출한다. 이 두 통화는 동일한 트랜잭션에 있어야하며 두 통화가 성공한 후에 만 ​​연결을 닫을 수 없음을 의미합니다. 이제 사람들은 연결을 제공하는 방법을 알고 있습니다. DepartmentDAOImpl 및 EmployeeDAOImpl 생성자에서 연결을 제공하고 싶지 않습니다. 또한 Spring AOP 또는 ThreadLocale을 사용하고 싶지 않습니다. 그렇게 할 수있는 솔루션이 있습니까?DAO 디자인 패턴 및 연결 처리

답변

1

DAO 생성자에 대한 연결을 제공하지 않거나 Spring AOP 또는 ThreadLocale을 사용하지 않는 이유는 설명하지 않습니다.

연결 획득은 서비스 계층의 책임 인 트랜잭션 관리의 일부라고 말할 수 있습니다. DAO는 데이터베이스에 연결하는 데 필요한 것을 제공해야합니다.

당신은 어떻게하지 않을지 말했지만, 어떻게 할 것인지에 대해서는 생각하지 못했습니다.

서비스가 풀에서 연결을 가져와 DAO에주고 트랜잭션을 관리하고 사용 사례가 완료되면 풀에 연결을 반환해야한다고 말하고 싶습니다.

Spring을 사용하고 싶지 않으므로 구현 세부 사항을 남겨 둘 것입니다. 직선 JDBC를 사용하여이를 수행 할 수 있습니다. 당신은 그것을하기 위해 더 열심히 노력해야 할 것입니다. 당신이 봄 또는 AOP를 사용하지 않는 주장하는 경우

, 당신의 서비스 코드는 다음과 같이 표시됩니다

package service; 

public class FooServiceImpl implements FooService { 
    public void saveFoo(Foo f) { 
     Connection connection = null; 
     Statement st = null; 
     try { 
      connection = ConnectionPool.checkout(); 
      connection.setAutoCommit(false); 
      // do something here 
      connection.commit(); 
     } catch (Exception e) { 
      rollback(connection); 
      e.printStackTrace(); 
     } finally { 
      close(st); 
      close(connection); 
     } 
    } 
} 

봄과 AOP는 여기에 도움이 될 것입니다. 그것은 상용구 코드를 제거합니다. 그것은 당신의 선택입니다.

1

나는 스프링 AOP를 사용하려는 해달라고 또는 ThreadLocale

불행하게도이 봄 거래 및 연결을 처리하는 방법이다 (?) - (짧은)가 아닌 트랜잭션 컨텍스트에서 @Transactional 방법을 입력하면이 배치 해당 트랜잭션을 담당하는 데이터베이스 연결은 ThreadLocal입니다. 이 방법은 해당 트랜잭션 내의 모든 메소드가 동일한 연결을 사용하므로 동일한 트랜잭션을 사용합니다. 이것은 완전히 넘어져 있습니다. 단지 DataSource 추상화 또는 JdbcTemplate (우아하게이 복잡성을 숨김)을 사용하십시오.

다중 스레드 환경에서는 연결을 생성자 매개 변수로 전달하는 것이 완전히 중단됨에 유의하십시오. 대신 DataSource을 전달해야합니다. Spring (또는 그 문제에 대한 EJB)은 저수준 항목을 처리합니다.

약간 더 나은 접근 방법은 모든 DAO의 모든 메소드에 Connection을 전달하는 것입니다. 하지만 이것은 1990 년대 sooo ... 당신은 봄 접근 방식에 대해 싫어하는 것을 정교하게 해석 할 수 있습니까?

+0

+1 - 잘 쓰여진 사려 깊은 답변입니다. 나는 봄을 재검토 할 추천서를 두 번째 것이다. – duffymo