Я не совсем уверен, что вы здесь, так что предостережение звучит так, будто вы пытаетесь сделать что-то немного безумное (JPA не любит динамику во время выполнения).
Однако есть несколько вариантов: я слышу, что вы хотите изменить соединение с базой данных.Во-первых, ваш постоянный XML является только отправной точкой, вам не нужно включать источник данных.Это не лучшая практика, поскольку идея DataSource и datasourse-ds.xml состоит в том, чтобы убедиться, что вы можете настроить приложение без перекомпиляции кода (и нескольких развертываний и т. Д.).Если вы возьмете на себя управление соединением, вы можете использовать своего менеджера сущностей.
Я просто хочу пояснить, что это, вероятно, плохая идея (вы говорите об инфраструктуре ORM - в данном случае - JPA Hibernate)) но вместо использования @PersistenceContext вы можете предоставить свой собственный менеджер сущностей.Я настоятельно рекомендую использовать EclipseLink в качестве обходного пути для этого.Он не так встроен в JBoss, и вы сможете (после его запуска) настроить его с нуля.
http: //wiki.eclipse.org/EclipseLink
Запустив его, вы можете активно создавать и уничтожать менеджеры сущностей или иметь множество менеджеров сущностей, которые вы создаете из свойств соединения.
Длинное и короткое здесь: я думаюВы идете по очень плохому пути и, возможно, хотите переосмыслить дизайн.JPA может быть неправильным инструментом, и, как бы мне не хотелось это говорить, вам, вероятно, лучше с javax.sql , чем с источником данных JPA, если вы постоянно меняете соединения.
В любом случае, используя Eclipselink2.X, вы можете сделать что-то вроде следующего ->
HashMap<String, Object> connectionA new = HashMap<String, Object>();
propsA.put("javax.persistence.jdbc.driver", "driverClass");
propsA.put("javax.persistence.jdbc.url", "connectionString");
. . .
etc...
EntityManager entityManager = Persistence.createEntityManagerFactory("myUnit").
createEntityManager(propsA);
В этот момент вы можете создать новый набор свойств (с новым подключением, поддерживающим его) длякаждый необходимый менеджер.
Кошмар?Да.Контейнер Управляется?Нет - вы будете отвечать за обработку транзакций, но должно ли это работать?Абсолютно.