/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.test.integration.jms.transaction;
import java.io.File;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
import org.jboss.shrinkwrap.resolver.api.maven.MavenFormatStage;
import org.jboss.shrinkwrap.resolver.api.maven.MavenStrategyStage;
import org.junit.runner.RunWith;
import org.hibernate.search.test.integration.VersionTestHelper;
import org.hibernate.search.test.integration.jms.DeploymentJmsMasterSlave;
import org.hibernate.search.test.integration.jms.util.RegistrationConfiguration;
/**
* Execute the tests in {@link SearchNewEntityJmsMasterSlave} adding the dependencies as jars in the
* deployments.
*
* @author Davide D'Alto
* @author Sanne Grinovero
*/
@RunWith(Arquillian.class)
public class TransactionalJmsMasterSlaveIT extends TransactionalJmsMasterSlave {
private static final File tmpDir = RegistrationConfiguration.createTempDir();
/**
* Lazy initialization of the libraries since Maven is painfully slow.
*/
private static class LibrariesLoader {
public static final File[] LIBRARIES = init();
private static File[] init() {
final String currentVersion = VersionTestHelper.getDependencyVersionHibernateSearch();
Set<File> libraryFiles = new HashSet<>();
libraryFiles.addAll( dependency( "org.hibernate:hibernate-search-orm:" + currentVersion, false ) );
libraryFiles.addAll( dependency( "org.hibernate:hibernate-search-engine:" + currentVersion, false ) );
libraryFiles.addAll( dependency( "org.hibernate:hibernate-search-backend-jms:" + currentVersion, false ) );
// adding avro using transitive dependency resolution to avoid hard coded of dependencies and their version
libraryFiles.addAll(
dependency( "org.hibernate:hibernate-search-serialization-avro:" + currentVersion, true )
);
libraryFiles.addAll(
dependency(
"org.apache.lucene:lucene-core:" + VersionTestHelper.getDependencyVersionLucene(), false
)
);
libraryFiles.addAll(
dependency(
"org.apache.lucene:lucene-analyzers-common:" + VersionTestHelper.getDependencyVersionLucene(),
false
)
);
libraryFiles.addAll(
dependency(
"org.hibernate.common:hibernate-commons-annotations:" + VersionTestHelper.getDependencyVersionHibernateCommonsAnnotations(),
false
)
);
return libraryFiles.toArray( new File[libraryFiles.size()] );
}
private static Collection<File> dependency(String gav, boolean transitive) {
MavenStrategyStage mavenStrategyStage = Maven.resolver().resolve( gav );
MavenFormatStage mavenFormatStage;
if ( transitive ) {
mavenFormatStage = mavenStrategyStage.withTransitivity();
}
else {
mavenFormatStage = mavenStrategyStage.withoutTransitivity();
}
return Arrays.asList( mavenFormatStage.asFile() );
}
}
@Deployment(name = "master", order = 1)
public static Archive<?> createDeploymentMaster() throws Exception {
WebArchive master = DeploymentJmsMasterSlave.createMaster( "master", REFRESH_PERIOD_IN_SEC, tmpDir )
.as( WebArchive.class );
addLibraries( master );
return master;
}
@Deployment(name = "slave-1", order = 2)
public static Archive<?> createDeploymentSlave1() throws Exception {
WebArchive slave = DeploymentJmsMasterSlave.createSlave( "slave-1", REFRESH_PERIOD_IN_SEC, tmpDir, true )
.as( WebArchive.class );
addLibraries( slave );
return slave;
}
@Deployment(name = "slave-2", order = 3)
public static Archive<?> createDeploymentSlave2() throws Exception {
WebArchive slave = DeploymentJmsMasterSlave.createSlave( "slave-2", REFRESH_PERIOD_IN_SEC, tmpDir, true )
.as( WebArchive.class );
addLibraries( slave );
return slave;
}
private static void addLibraries(WebArchive archive) {
archive.addAsLibraries( LibrariesLoader.LIBRARIES );
}
}