2.5.3.3. Spring-Integration

Für die Verwendung der Spring-Frameworks stellt checkerberry db mit dem SpringCheckerberryDbEnvironmentCreator eine Klasse bereit, die die Integration von checkerberry vereinfacht.

Beispiel 2.80. Spring-Integration

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/application-context-test.xml"})
@TestExecutionListeners({
    DependencyInjectionTestExecutionListener.class,
    TestMethodNameResolvingExecutionListener.class,
    ApplicationContextResolvingExecutionListener.class })

public abstract class AbstractJUnit4CachingTestCase {
  private CheckerberryDbEnvironment environment;
  @Before
  public void setUp() {
    environment = SpringCheckerberryDbEnvironmentCreator.createEnvironment();
    environment.setUp(this);
  }

  @After
  public void tearDown() {
    environment.tearDown();
    environment = null;
  }
}


Das obige Beispiel zeigt die Integration von checkerberry db unter Verwendung von JUnit4 und Spring (siehe „Aufrufen der setUp-Methode unter JUnit4 und Spring“). Neben den zuvor beschriebenen TestExecutionListenern, DependencyInjectionTestExecutionListener und TestMethodNameResolvingExecutionListener wird ein weiterer TestExecutionListener verwendet. Der ApplicationContextResolvingExecutionListener ermittelt den aktuellen Spring-Application-Context und speichert diesen innerhalb des checkerberry test centers in der Klasse ApplicationContextResolver. Über die statische Methode getTestApplicationContext steht der Application-Kontext dann zur Verfügung.

In der setUp-Methode wird checkerberry db-Umgebung über die Klasse SpringCheckerberryDbEnvironmentCreator erzeugt. Der Creator stellt folgende Methoden zur Erstellung der checkerberry db-Umgebung zur Verfügung.

Beispiel 2.81. SpringCheckerberryDbEnvironmentCreator

/**
 * Erzeugt ein neues Default-Environment über einen {@link BridgeContainer}.
 * Der BridgeContainer wird über den Namen "bridgeContainer" aus dem
 * Application-Kontext von Spring gelesen.
 *
 * @return erzeugtes Environment.
 */
 public static CheckerberryDbEnvironment createEnvironment() {...}

/**
 * Erzeugt ein neues Default-Environment über einen {@link BridgeContainer}.
 * Der BridgeContainer wird über den angegebenen Namen aus dem
 * Application-Kontext von Spring gelesen.
 *
 * @param bridgeContainerBeanName
 *            Bean-Name des Containers im Application-Kontext.
 * @return erzeugtes Environment.
 */
public static CheckerberryDbEnvironment createEnvironment(
    String bridgeContainerBeanName) {...}

/**
* Erzeugt ein neues Environment über einen {@link BridgeContainer}. Der
* BridgeContainer wird über den angegebenen Namen aus dem
* Application-Kontext von Spring gelesen.
*
* @param environmentId
*            Name der Environment-Id.
* @param bridgeContainerBeanName
*            Bean-Name des Containers im Application-Kontext.
* @return erzeugtes Environment.
*/
public static CheckerberryDbEnvironment createEnvironment(
    CheckerberryDbEnvironmentId environmentId,
    String bridgeContainerBeanName) {...}

/**
 * Erzeugt ein neues Default-Environment mit dem Standard {@link
 * de.conceptpeople.checkerberry.db.bridge.resource.ClasspathResourceLoader}
 * . Der {@link DatabaseConnector} wird über den Namen "databaseConnector"
 * aus dem Application-Kontext von Spring gelesen.
 *
 * @param databaseDescriptionCallback
 *            zu verwendendes Callback zur Definition der
 *            Datenbankbeschreibung.
 * @param configurationCallback
 *            zu verwendendes Callback für die Konfiguration.
 * @return erzeugtes Environment.
 */
 public static CheckerberryDbEnvironment createEnvironment(
   DatabaseDescriptionCallback databaseDescriptionCallback,
   DbConfigurationCallback configurationCallback) {...}


Der SpringCheckerberryDbEnvironmentCreator greift über die Klasse ApplicationContextResolver auf den Application-Kontext von Spring zu und erzeugt anhand einiger Konventionen checkerberry db-Umgebung. Wenn man die Bridge-Komponenten in einen de.conceptpeople.checkerberry.db.bridge.BridgeContainer zusammenfasst und diesen im Application-Kontext unter den Bean-Namen „bridgeContainer“ registriert, benötigt der SpringCheckerberryDbEnvironmentCreator keine weiteren Parameter für die Erzeugung von checkerberry db. Der Aufruf von createEnvironment() ohne Parameter ist dann ausreichend.