Na, megint elkóboroltam a kiszemelt témától. Szóval a spring context XML-t hogyan robbantsuk fel darabokra úgy, hogy az elég rugalmas legyen és ne kelljen beleírkálni egynál több file-ba a végfelhasználóknak. Ezzel jól célozza az ember a the long tail-ben található felhasználóbázist, de még nem zárja ki a nagyhalakat sem :)
Na és valami ilyesmit találtam ki erre:
- Az adatbázis connection pool kerül külün context xml-be, ilyen elnevezési tradícióval mint pool-...xml. Ennek konkrétan két implementációja lehetséges, az ultralusta végfelhasználók és minimalista futáskörnyezetek számra beágyazott commons-dbcp és a szabványos JNDI lookupos akármi. Mindkettő implementáció persze ugyolyan nevű beant definiál, pl "dataSource"
- Adatbázis függő adatok számára külőn XML-ek. Ez olyanokat tartalmaz mint a JDBC driver osztály neve (amire java 1.6-ban már nincs sokáig szükség, de most még kell ha senki más nem tudja), hibernate dialect, esetleg a compass dialect.
- Külső konfigurációs adatokat a kontextusba ágyazó BeanFactoryPostProcessor, ez idáig az egyetlen Spring-függő dolog benne, de ilyet talán máshol is lehet implementálni. A unit tesztek egyszerűen csak importálnak egy másik ilyen preprocesszort definiáló XML-t ami például a System.properties alapján helyetesít be konfigurációs adatokat és mehet is a műsor. Nem kellett copy-pastelni a konfigot alkalmazás és tesztek közt.
Például amikor webappot hegesztesz, a webapp egyszerűen csak a web.xml-ben definiálja context változóként a kellő konfig adatokat és megmondja hogy a teljes alkalmazás melyik XML-ekben található bean-ekből áll össze. Emberi módon felsorolva, JNDI, postgresql, webapp, opcionális bean-ek.