/*
* 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.jgroups;
import static org.hibernate.search.test.integration.VersionTestHelper.getHibernateORMModuleName;
import static org.hibernate.search.test.integration.VersionTestHelper.getWildFlyModuleIdentifier;
import java.io.File;
import org.hibernate.search.test.integration.jms.MasterSlaveTestTemplate;
import org.hibernate.search.test.integration.jms.controller.RegistrationController;
import org.hibernate.search.test.integration.jms.model.RegisteredMember;
import org.hibernate.search.test.integration.jms.util.RegistrationConfiguration;
import org.hibernate.search.testsupport.concurrency.Poller;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.descriptor.api.Descriptors;
import org.jboss.shrinkwrap.descriptor.api.persistence20.PersistenceDescriptor;
import org.jboss.shrinkwrap.descriptor.api.persistence20.PersistenceUnit;
import org.jboss.shrinkwrap.descriptor.api.persistence20.Properties;
/**
* Create deployments using the JGroups backend
*
* @author Sanne Grinovero
*/
public class JGroupsDeploymentHelper {
private JGroupsDeploymentHelper() {
//not allowed
}
public static Archive<?> createMaster(String deploymentName, int refreshPeriodInSec, File tmpDir) throws Exception {
WebArchive master = baseArchive( deploymentName, masterPersistenceXml( deploymentName, refreshPeriodInSec, tmpDir ) );
return master;
}
public static Archive<?> createSlave(String deploymentName, int refreshPeriodInSec, File tmpDir) throws Exception {
WebArchive slave = baseArchive( deploymentName, slavePersistenceXml( deploymentName, refreshPeriodInSec, tmpDir ) );
return slave;
}
private static WebArchive baseArchive(String name, PersistenceDescriptor unitDef) throws Exception {
WebArchive webArchive = ShrinkWrap
.create( WebArchive.class, name + ".war" )
.addClasses( RegistrationController.class, RegisteredMember.class, RegistrationConfiguration.class, MasterSlaveTestTemplate.class )
.addClass( Poller.class )
.addAsResource( new StringAsset( unitDef.exportAsString() ), "META-INF/persistence.xml" )
.addAsResource( "testing-flush-loopback.xml" )
.addAsWebInfResource( "jboss-deployment-structure-excludejavassist.xml", "jboss-deployment-structure.xml" )
.addAsWebInfResource( EmptyAsset.INSTANCE, "beans.xml" );
return webArchive;
}
private static PersistenceDescriptor masterPersistenceXml(String name, int refreshPeriod, File tmpDir)
throws Exception {
return commonUnitDef( name, "filesystem-master", refreshPeriod, tmpDir )
.createProperty()
.name( "hibernate.search.default.worker.backend" )
.value( "jgroupsMaster" )
.up()
.up()
.up();
}
private static PersistenceDescriptor slavePersistenceXml(String name, int refreshPeriod, File tmpDir)
throws Exception {
return commonUnitDef( name, "filesystem-slave", refreshPeriod, tmpDir )
.createProperty()
.name( "hibernate.search.default.worker.backend" )
.value( "jgroupsSlave" )
.up()
.up()
.up();
}
private static Properties<PersistenceUnit<PersistenceDescriptor>> commonUnitDef(
String name, String directoryProvider, int refreshPeriod, File tmpDir) throws Exception {
return Descriptors.create( PersistenceDescriptor.class )
.createPersistenceUnit()
.name( "pu-" + name )
.jtaDataSource( "java:jboss/datasources/ExampleDS" )
// The deployment Scanner is disabled as the JipiJapa integration is not available because of the custom Hibernate ORM module:
.clazz( RegisteredMember.class.getName() )
.getOrCreateProperties()
.createProperty()
.name( "wildfly.jpa.hibernate.search.module" )
.value( getWildFlyModuleIdentifier() )
.up()
.createProperty()
.name( "jboss.as.jpa.providerModule" )
.value( getHibernateORMModuleName() )
.up()
.createProperty()
.name( "hibernate.search.services.jgroups.configurationFile" )
.value( "testing-flush-loopback.xml" )
.up()
.createProperty()
.name( "hibernate.hbm2ddl.auto" )
.value( "create-drop" )
.up()
.createProperty()
.name( "hibernate.search.default.lucene_version" )
.value( "LUCENE_CURRENT" )
.up()
.createProperty()
.name( "hibernate.search.default.directory_provider" )
.value( directoryProvider )
.up()
.createProperty()
.name( "hibernate.search.default.sourceBase" )
.value( tmpDir.getAbsolutePath() + "-sourceBase" )
.up()
.createProperty()
.name( "hibernate.search.default.indexBase" )
.value( tmpDir.getAbsolutePath() + "-" + name )
.up()
.createProperty()
.name( "hibernate.search.default.refresh" )
.value( String.valueOf( refreshPeriod ) )
.up()
.createProperty()
.name( "hibernate.search.default.worker.execution" )
.value( "sync" )
.up();
}
}