Nayan,
Мне нужно расширить ваш ответ, потому что он не завершен.
Запутанная вещь об использовании свойств для динамического создания EntityManager состоит в том, что в JPA есть три метода createEntityManagerFactory (), и все 3 имеют имя единицы постоянства. Я не осознавал, что свойства переопределяют имя модуля постоянства, пока не проверил спецификацию JPA 2.0. В разделе 9.4.3 говорится, что свойства переопределяют значения, указанные в файле persistence.xml. Он также показывает, что представляют собой стандартные имена свойств.
(JavaDocs не говорит вам, что может входить в свойства, и они не говорят, что свойства переопределяют то, что находится в persistence.xml. Другой пример, где JavaDocs отстой.)
В вашем примере используются имена свойств, такие как "JDBC_URL", которых нет в Javadocs API Java EE 6. В спецификации JPA поясняется, что в дополнение к стандартным свойствам могут использоваться специфические для поставщика имена свойств. Документы EclipseLink показывают, какие имена свойств поддерживает реализация через нестандартный класс PersistenceUnitProperties:
http://www.eclipse.org/eclipselink/api/2.3/index.html
Таким образом, чтобы иметь динамические EntityManager, необходимо использовать специфичные для поставщика свойства, чтобы динамические менеджеры объектов не были переносимы. Я думаю, у тебя не может быть всего.
Один из случаев, когда динамические EntityManager были бы переносимыми, - это использование стандартного свойства javax.persistence.jtaDataSource. Вам придется добавить источник данных в ваш контейнер Java EE, но это настолько динамично, насколько это возможно при работе в контейнере. В Java SE это не похоже на какие-либо переносимые, динамические опции.
JavaDocs должен гораздо лучше объяснить, как свойства работают с методами createEntityManagerFactory ().