Guice, JDBC et la gestion des connexions de base de données

Je suis à la recherche pour créer un exemple de projet lors de l'apprentissage de Guice qui utilise JDBC pour lire/écrire dans une base de données SQL. Cependant, après des années d'utilisation de Printemps et de le laisser s'abstraire la gestion des connexions et des transactions, et j'ai du mal à travailler il notre sur le plan conceptuel.

J'aimerais avoir un service qui démarre et arrête l'opération et les appels de nombreux dépôts de réutiliser la même connexion et de participer dans la même transaction. Mes questions sont les suivantes:

  • Où puis-je créer ma source de données?
  • Comment puis-je donner les dépôts à l'accès à la connexion? (ThreadLocal?)
  • Meilleure façon de gérer la transaction (la Création d'un Intercepteur pour une annotation?)

Le code ci-dessous montre comment je pourrais le faire au Printemps. Le JdbcOperations injecté dans chaque référentiel d'avoir accès à la connexion associée à la transaction active.

Je n'ai pas été en mesure de trouver de nombreux tutoriels qui couvrent ce, au-delà de celles qui montrent la création d'intercepteurs pour les transactions.

Je suis heureux de continuer à utiliser le Printemps comme il se travaille très bien dans mes projets, mais j'aimerais savoir comment le faire, dans le plus pur Guice et JBBC (Pas de JPA/Hibernate/Warp/Réutilisation de Printemps)

@Service
public class MyService implements MyInterface {

  @Autowired
  private RepositoryA repositoryA;
  @Autowired
  private RepositoryB repositoryB;
  @Autowired
  private RepositoryC repositoryC; 

  @Override
  @Transactional
  public void doSomeWork() {
    this.repositoryA.someInsert();
    this.repositoryB.someUpdate();
    this.repositoryC.someSelect();  
  }    
}

@Repository
public class MyRepositoryA implements RepositoryA {

  @Autowired
  private JdbcOperations jdbcOperations;

  @Override
  public void someInsert() {
    //use jdbcOperations to perform an insert
  }
}

@Repository
public class MyRepositoryB implements RepositoryB {

  @Autowired
  private JdbcOperations jdbcOperations;

  @Override
  public void someUpdate() {
    //use jdbcOperations to perform an update
  }
}

@Repository
public class MyRepositoryC implements RepositoryC {

  @Autowired
  private JdbcOperations jdbcOperations;

  @Override
  public String someSelect() {
    //use jdbcOperations to perform a select and use a RowMapper to produce results
    return "select result";
  }
}
InformationsquelleAutor pledge | 2010-02-27