pq toda entidade mapeada pelo hibernate precosa de uma pk
Ideia: crie uma interface Environment, que define os getters pra todas as configuracoes (ou outras interfaces quen nao sao muito mais que bundles de configuracao).
Implemente essa interface: TestingEnvironment, DevelopmentEnvironment, UserAcceptanceTestingEnvironment, ProductionEnvironment, e os bundles especificos, caso necessario (InMemoryTestingDatabase, por exemplo). Basicamente, essa interface e as amigas dela contem toda a configuracao necessaria - de IoC a mappings do Hibernate a detalhes de JDBC, JNDI e o escambau.
Crie uma classe Application, com os metodos start(), isStarted() e stop(). Implemente essa interface pra todos os Environments.
Ponha uma main() nas implementacoes de Application apropriadas.
No projeto onde eu estava mes passado, a gente tinha um internet banking inteiro que subia meramente chamando a main() de DevelopmentEnvironment: Jetty, HSQLDB, simuladores dos mainframes e mais uns brinquedinhos, todos iniciados dali.
Nao eh soh se preocupar com configuracao, eh o deployment inteiro que precisa ser levado em conta