Я не уверен насчет лучших практик, связанных с этим, но я потратил много времени, пытаясь сделать что-то похожее на эту работу.
В принципе вам понадобится что-то, чтобы создать EntityManager
с.Я всегда использовал Spring для этого.Их документация имеет большой раздел по этому вопросу.Вы можете использовать LocalEntityManagerFactoryBean, и в этом случае разметка будет выглядеть (из вышеупомянутой документации ):
<bean id="myEmf" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="myPersistenceUnit"/>
</bean>
В принципе это не рекомендуется, поскольку она возвращаетсяпреследовать вас, когда вы пытаетесь изменить источники данных позже.Тем не менее, я считаю весьма маловероятным, что вы столкнетесь с ограничениями этого для большинства веб-приложений до определенного размера.
Конфигурирование вашего источника данных может быть затем выполнено с помощью специальных свойств спящего режима в единице персистентности (постоянство.xml в каталоге META-INF /):
<property name="hibernate.connection.driver_class" value="com.company.driver" />
<property name="hibernate.connection.url" value="some:jdbc@string" />
<property name="hibernate.connection.username" value="myuser" />
<property name="hibernate.connection.password" value="mypassword" />
Чтобы использовать это, если вы еще не используете Spring, вы можете просто получить экземпляр EntityManagerFactory
из контекста приложения и перейти оттуда(т.е. context.getBean("myEmf")
).
Больше возможностей возможно с LocalContainerEntityManagerFactoryBean
, этот позволяет вам конфигурировать источник данных.В принципе, пример из документации должен работать, но я обнаружил, что когда я это сделал, мне пришлось указать поставщика персистентности Hibernate.Вам нужен файл persistence.xml, но на самом деле ему нужен только модуль персистентности по умолчанию и очень базовая конфигурация (возможно, для определения диалекта, например, если вы используете hibernate с oracle 10g):
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="myDatasource" />
<property name="persistenceProvider">
<bean class="org.hibernate.ejb.HibernatePersistence" />
</property>
</bean>
В других местах есть примерывесенние документы о том, как настроить BasicDataSource
из Apache dbcp , который также даст вам пул соединений.
Что касается передового опыта, JPA действительно не прост в работеза пределами полной среды сервера приложений.При настройке производительности возникают всевозможные проблемы, когда вы обнаруживаете, что слюнки над функциями Hibernate недоступны в JPA, и есть вероятность, что ваши запросы в конечном итоге не будут строго соответствовать спецификациям JPA.Если вы не используете управление контейнерами, возможно, будет гораздо проще и разумнее просто напрямую использовать API Hibernate.