Есть одна конфигурация JPA, которая разворачивается на нескольких системах. В каждой могут быть свои параметры БД (сервер, логин-пароль и т.д.).
Поэтому в приложении один на всех persistence.xml, который выглядит примерно так:
<property name="javax.persistence.jdbc.url" value="&contoso_jdbc;"/>
<property name="javax.persistence.jdbc.driver" value="&contoso_driver;"/>
<property name="javax.persistence.jdbc.user" value="&contoso_username;"/>
<property name="javax.persistence.jdbc.password" value="&contoso_password;"/>
Соответственно, в начале persistence.xml стоит доктайп и в отдельном файле DTD написано что-нибудь вроде
<!ENTITY mysql_server "127.0.0.1">
<!ENTITY mysql_db "contoso">
<!ENTITY contoso_username "user">
<!ENTITY contoso_password "password">
<!ENTITY contoso_jdbc "jdbc:mysql://&mysql_server;:3306/&mysql_db;?блаблабла">
Ну, смысл понятен. На этапе сборки в WAR кладётся нужный DTD-файл из нескольких.
А теперь вопрос: насколько такой подход - говнокод, и не лучше ли сделать это, например, через properties при создании EntityManagerFactory?