Это была проблема, с которой я столкнулся. Чуть более неприятно, так как мне нужно запустить несколько кувшинов, а также часть военного развертывания.
Есть несколько хаков, которые, кажется, вращаются вокруг нескольких файлов persistence.xml и / или какой-то странной попытки попытаться сослаться на файл jar с помощью весенних загрузчиков ресурсов (которые у меня не работали).
Мой личный прием - использовать загрузчики ресурсов Spring для разрешения ресурса, находящегося во ВСЕХ jar-объектах, анализировать ссылку на jar-адрес URL-адреса и использовать диспетчер модулей Spring Persistence для внедрения их в тег jar-file в виртуальном постоянном хранилище .xml
Это обходной способ, но избегается многократное использование persistence.xml, что технически недопустимо.
public class SpringPersistenceUnitManager extends DefaultPersistenceUnitManager implements ApplicationContextAware {
private final Logger log = LoggerFactory.getLogger(getClass());
private ApplicationContext ctx = null;
private String jarLocationPattern;
@Override
protected void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) {
super.postProcessPersistenceUnitInfo(pui);
try {
Resource[] resources = ctx.getResources("classpath*:applicationContext.xml");
for (Resource res : resources) {
String resJar = resolveJar(res.getURL());
if (!resJar.equals(pui.getPersistenceUnitRootUrl().toString())) {
log.info("Adding " + resJar + " to persistence context");
pui.addJarFileUrl(new URL(resJar));
}
}
}
catch (IOException e) {
log.error("error", e);
}
}
private String resolveJar(URL fileInJar) {
String path = fileInJar.getPath();
return path.substring(0, path.indexOf('!'));
}
и контекстные материалы весны:
<util:properties id="hibernate.properties" location="classpath:hibernate.properties" />
<bean id="persistenceUnitManager" class="com.rokksoft.blackice.util.SpringPersistenceUnitManager"
p:defaultDataSource-ref="jdbcDataSourcePool"
/>
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" lazy-init="true"
p:persistenceUnitManager-ref="persistenceUnitManager"
p:persistenceUnitName="blackicePU"
p:dataSource-ref="jdbcDataSourcePool"
p:jpaProperties-ref="hibernate.properties">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
</bean>
Вы хотите отфильтровать имена банок в идеале - в банке стороннего производителя может быть что угодно.