Intel Thread Building Blocks также обеспечивает несколько rw_lock вариантов:
http://www.threadingbuildingblocks.org/
у Них есть spin_rw_mutex в течение очень коротких периодов конкуренции и queueing_rw_mutex в течение более длительных периодов конкуренции. Первый может использоваться в особенно производительности чувствительный код. Последний более сопоставим в производительности с обеспеченным Повышением. Поток или непосредственно использующий pthreads. Но профиль для проверки, какой является победой для схем доступа.
РЕДАКТИРОВАТЬ : добавлена ссылка на сообщение в блоге, показывающее, как тестировать Hibernate JPA с помощью Spring и DbUnit.
[...] Я хотел бы иметь сборку maven, которая создает базу данных из сущностей
Существует плагин maven hibernate3 с целью hibernate3: hbm2ddl , что может помочь. В сочетании с плагином maven sql должна быть возможность создать эту схему из сгенерированного DDL.
[...] затем заполняет исходные данные / данные словаря
Опять же, плагин maven sql здесь может справиться. Или, может быть, с DBUnit , который является еще одним элегантным решением (см. плагин maven dbunit ).
и запускать модульные и интеграционные тесты.
Я не уверен, что вы модульные тесты должны иметь доступ к базе данных, но для тестов интеграции проверьте DBUnit , как я сказал. Это действительно очень хороший инструмент, который позволяет вам настроить базу данных в известном состоянии, проверить таблицы на предмет ожидаемого содержимого после выполнения теста и вернуть базу данных в исходное состояние. См. Хороший пример Тестирование JPA Hibernate с помощью Spring и DbUnit .
Этот процесс должен быть полностью автоматизирован, чтобы поместить эту сборку на сервер CI (Hudson),
@ Дэвид, спасибо за ваш пост. Единственное разумное решение, которое я нашел для заполнения исходных данных, похоже на ваше - это вставка данных в тесты. В своем коде я даже не использую hibernate3-maven-plugin. Создание базы данных выполняется Spring в файле jpaContext.xml
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaVendorAdapter">
<bean
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect"/>
</bean>
</property>
<property name="dataSource" ref="dataSource"/>
Как я уже писал, я использую org.springframework.test.jpa.AbstractJpaTests с переопределенным методом
@Override
protected String[] getConfigLocations() {
return new String[]{
"classpath:/jpaContext.xml"};
}
Я думаю, это упростит ваше решение . Я все еще ищу лучшее разрешение для создания исходных данных. Создание объектов с большим количеством взаимосвязей вручную является обременительным.
Я решил проблему, почти идентичную вашей, расширив
org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests
Затем я использовал hibernate3-maven-plugin для заполнения базы данных (Я использовал hsqldb) во время тестирования:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<components>
<component>
<name>hbm2ddl</name>
<implementation>jpaconfiguration</implementation>
</component>
</components>
<componentProperties>
<drop>true</drop>
<jdk5>true</jdk5>
<propertyfile>target/classes/jdbc.properties</propertyfile>
<skip>${maven.test.skip}</skip>
</componentProperties>
</configuration>
<executions>
<execution>
<phase>process-test-resources</phase>
<goals>
<goal>hbm2ddl</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>${jdbc.groupId}</groupId>
<artifactId>${jdbc.artifactId}</artifactId>
<version>${jdbc.version}</version>
</dependency>
</dependencies>
</plugin>
Я разместил простой проект maven в Google Code, чтобы продемонстрировать эту технику.