HHH-13963 Remove the JipiJapa fork
This commit is contained in:
parent
6e07062b20
commit
cecaeb92b3
|
@ -31,8 +31,6 @@ ext {
|
||||||
|
|
||||||
geolatteVersion = '1.4.0'
|
geolatteVersion = '1.4.0'
|
||||||
|
|
||||||
// Wildfly version targeted by the custom Jipijapa build
|
|
||||||
wildflyVersion = '17.0.1.Final'
|
|
||||||
shrinkwrapVersion = '1.2.6'
|
shrinkwrapVersion = '1.2.6'
|
||||||
shrinkwrapDescriptorsVersion = '2.0.0'
|
shrinkwrapDescriptorsVersion = '2.0.0'
|
||||||
|
|
||||||
|
@ -160,7 +158,6 @@ ext {
|
||||||
shrinkwrap_descriptors_impl_javaee: "org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-impl-javaee:${shrinkwrapDescriptorsVersion}",
|
shrinkwrap_descriptors_impl_javaee: "org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-impl-javaee:${shrinkwrapDescriptorsVersion}",
|
||||||
|
|
||||||
jboss_vfs: "org.jboss:jboss-vfs:3.2.11.Final",
|
jboss_vfs: "org.jboss:jboss-vfs:3.2.11.Final",
|
||||||
jipijapa_spi: "org.wildfly:jipijapa-spi:${wildflyVersion}",
|
|
||||||
wildfly_transaction_client : 'org.wildfly.transaction:wildfly-transaction-client:1.1.7.Final',
|
wildfly_transaction_client : 'org.wildfly.transaction:wildfly-transaction-client:1.1.7.Final',
|
||||||
|
|
||||||
jboss_ejb_spec_jar : 'org.jboss.spec.javax.ejb:jboss-ejb-api_3.2_spec:1.0.0.Final',
|
jboss_ejb_spec_jar : 'org.jboss.spec.javax.ejb:jboss-ejb-api_3.2_spec:1.0.0.Final',
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
description = 'Integrate with WildFly JipiJapa'
|
|
||||||
|
|
||||||
apply from: rootProject.file( 'gradle/published-java-module.gradle' )
|
|
||||||
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
compile project( ':hibernate-core' )
|
|
||||||
compile( libraries.jipijapa_spi )
|
|
||||||
compile( libraries.jboss_vfs )
|
|
||||||
// compile( libraries.infinispan_hibernate_cache_commons )
|
|
||||||
|
|
||||||
testCompile project( ':hibernate-testing' )
|
|
||||||
testCompile( libraries.shrinkwrap )
|
|
||||||
}
|
|
||||||
|
|
||||||
test {
|
|
||||||
forkEvery 1
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5;
|
|
||||||
|
|
||||||
|
|
||||||
import org.hibernate.boot.archive.scan.spi.AbstractScannerImpl;
|
|
||||||
import org.hibernate.boot.archive.scan.spi.Scanner;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Annotation scanner for Hibernate. Essentially just passes along the VFS-based ArchiveDescriptorFactory
|
|
||||||
*
|
|
||||||
* @author Steve Ebersole
|
|
||||||
*/
|
|
||||||
public class HibernateArchiveScanner extends AbstractScannerImpl implements Scanner {
|
|
||||||
public HibernateArchiveScanner() {
|
|
||||||
super( VirtualFileSystemArchiveDescriptorFactory.INSTANCE );
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,54 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import javax.enterprise.inject.spi.BeanManager;
|
|
||||||
|
|
||||||
import org.hibernate.resource.beans.container.spi.ExtendedBeanManager;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* HibernateExtendedBeanManager helps defer the registering of entity listeners, with the CDI BeanManager until
|
|
||||||
* after the persistence unit is available for lookup by CDI bean(s).
|
|
||||||
* This solves the WFLY-2387 issue of JPA entity listeners referencing the CDI bean, when the bean cycles back
|
|
||||||
* to the persistence unit, or a different persistence unit.
|
|
||||||
*
|
|
||||||
* @author Scott Marlow
|
|
||||||
*/
|
|
||||||
public class HibernateExtendedBeanManager implements ExtendedBeanManager {
|
|
||||||
private final ArrayList<LifecycleListener> lifecycleListeners = new ArrayList<>();
|
|
||||||
private final BeanManager beanManager;
|
|
||||||
|
|
||||||
public HibernateExtendedBeanManager(BeanManager beanManager) {
|
|
||||||
this.beanManager = beanManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hibernate calls registerLifecycleListener to register N callbacks to be notified
|
|
||||||
* when the CDI BeanManager can safely be used. The CDI BeanManager can safely be used
|
|
||||||
* when the CDI AfterDeploymentValidation event is reached.
|
|
||||||
*
|
|
||||||
* @param lifecycleListener Note: Caller (BeanManagerAfterDeploymentValidation) is expected to synchronize calls to
|
|
||||||
* registerLifecycleListener() + beanManagerIsAvailableForUse(), which protects
|
|
||||||
* HibernateExtendedBeanManager.lifecycleListeners from being read/written from multiple concurrent threads.
|
|
||||||
* There are many writer threads (one per deployed persistence unit) and one reader/writer thread expected
|
|
||||||
* to be triggered by one AfterDeploymentValidation event per deployment.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void registerLifecycleListener(LifecycleListener lifecycleListener) {
|
|
||||||
lifecycleListeners.add( lifecycleListener );
|
|
||||||
}
|
|
||||||
|
|
||||||
public void beanManagerIsAvailableForUse() {
|
|
||||||
for ( LifecycleListener hibernateCallback : lifecycleListeners ) {
|
|
||||||
hibernateCallback.beanManagerInitialized( beanManager );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,221 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Properties;
|
|
||||||
import javax.enterprise.inject.spi.BeanManager;
|
|
||||||
import javax.persistence.SharedCacheMode;
|
|
||||||
import javax.persistence.spi.PersistenceUnitInfo;
|
|
||||||
|
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
|
||||||
|
|
||||||
import org.jboss.as.jpa.hibernate5.management.HibernateManagementAdaptor;
|
|
||||||
|
|
||||||
import org.jipijapa.cache.spi.Classification;
|
|
||||||
import org.jipijapa.event.impl.internal.Notification;
|
|
||||||
import org.jipijapa.plugin.spi.EntityManagerFactoryBuilder;
|
|
||||||
import org.jipijapa.plugin.spi.JtaManager;
|
|
||||||
import org.jipijapa.plugin.spi.ManagementAdaptor;
|
|
||||||
import org.jipijapa.plugin.spi.PersistenceProviderAdaptor;
|
|
||||||
import org.jipijapa.plugin.spi.PersistenceUnitMetadata;
|
|
||||||
import org.jipijapa.plugin.spi.Platform;
|
|
||||||
import org.jipijapa.plugin.spi.TwoPhaseBootstrapCapable;
|
|
||||||
|
|
||||||
import static org.jboss.as.jpa.hibernate5.JpaLogger.JPA_LOGGER;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implements the PersistenceProviderAdaptor for Hibernate
|
|
||||||
*
|
|
||||||
* @author Scott Marlow
|
|
||||||
* @author Steve Ebersole
|
|
||||||
*/
|
|
||||||
public class HibernatePersistenceProviderAdaptor implements PersistenceProviderAdaptor, TwoPhaseBootstrapCapable {
|
|
||||||
|
|
||||||
@SuppressWarnings("WeakerAccess")
|
|
||||||
public static final String NAMING_STRATEGY_JPA_COMPLIANT_IMPL = "org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl";
|
|
||||||
|
|
||||||
@SuppressWarnings("WeakerAccess")
|
|
||||||
public static final String HIBERNATE_EXTENDED_BEANMANAGER = "org.hibernate.resource.beans.container.spi.ExtendedBeanManager";
|
|
||||||
|
|
||||||
private volatile Platform platform;
|
|
||||||
private static final String NONE = SharedCacheMode.NONE.name();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void injectJtaManager(JtaManager jtaManager) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void injectPlatform(Platform platform) {
|
|
||||||
if ( this.platform != platform ) {
|
|
||||||
this.platform = platform;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@SuppressWarnings({"deprecation", "unchecked"})
|
|
||||||
public void addProviderProperties(Map properties, PersistenceUnitMetadata pu) {
|
|
||||||
putPropertyIfAbsent( pu, properties, AvailableSettings.USE_NEW_ID_GENERATOR_MAPPINGS, "true" );
|
|
||||||
putPropertyIfAbsent( pu, properties, AvailableSettings.KEYWORD_AUTO_QUOTING_ENABLED, "false" );
|
|
||||||
putPropertyIfAbsent(
|
|
||||||
pu,
|
|
||||||
properties,
|
|
||||||
AvailableSettings.IMPLICIT_NAMING_STRATEGY,
|
|
||||||
NAMING_STRATEGY_JPA_COMPLIANT_IMPL
|
|
||||||
);
|
|
||||||
putPropertyIfAbsent( pu, properties, AvailableSettings.SCANNER, HibernateArchiveScanner.class );
|
|
||||||
properties.put( AvailableSettings.APP_CLASSLOADER, pu.getClassLoader() );
|
|
||||||
putPropertyIfAbsent(
|
|
||||||
pu,
|
|
||||||
properties,
|
|
||||||
org.hibernate.ejb.AvailableSettings.ENTITY_MANAGER_FACTORY_NAME,
|
|
||||||
pu.getScopedPersistenceUnitName()
|
|
||||||
);
|
|
||||||
putPropertyIfAbsent(
|
|
||||||
pu,
|
|
||||||
properties,
|
|
||||||
AvailableSettings.SESSION_FACTORY_NAME,
|
|
||||||
pu.getScopedPersistenceUnitName()
|
|
||||||
);
|
|
||||||
if ( !pu.getProperties().containsKey( AvailableSettings.SESSION_FACTORY_NAME ) ) {
|
|
||||||
putPropertyIfAbsent( pu, properties, AvailableSettings.SESSION_FACTORY_NAME_IS_JNDI, Boolean.FALSE );
|
|
||||||
}
|
|
||||||
// the following properties were added to Hibernate ORM 5.3, for JPA 2.2 spec compliance.
|
|
||||||
putPropertyIfAbsent( pu, properties, AvailableSettings.PREFER_GENERATOR_NAME_AS_DEFAULT_SEQUENCE_NAME, true );
|
|
||||||
putPropertyIfAbsent( pu, properties, AvailableSettings.JPA_TRANSACTION_COMPLIANCE, true );
|
|
||||||
putPropertyIfAbsent( pu, properties, AvailableSettings.JPA_CLOSED_COMPLIANCE, true );
|
|
||||||
putPropertyIfAbsent( pu, properties, AvailableSettings.JPA_QUERY_COMPLIANCE, true );
|
|
||||||
putPropertyIfAbsent( pu, properties, AvailableSettings.JPA_LIST_COMPLIANCE, true );
|
|
||||||
putPropertyIfAbsent( pu, properties, AvailableSettings.JPA_CACHING_COMPLIANCE, true );
|
|
||||||
// end of properties added for JPA 2.2 spec compliance.
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addProviderDependencies(PersistenceUnitMetadata pu) {
|
|
||||||
final Properties properties = pu.getProperties();
|
|
||||||
final String sharedCacheMode = properties.getProperty( AvailableSettings.JPA_SHARED_CACHE_MODE );
|
|
||||||
|
|
||||||
if ( Classification.NONE.equals( platform.defaultCacheClassification() ) ) {
|
|
||||||
if ( !SharedCacheMode.NONE.equals( pu.getSharedCacheMode() ) ) {
|
|
||||||
JPA_LOGGER.trace( "second level cache is not supported in platform, ignoring shared cache mode" );
|
|
||||||
}
|
|
||||||
pu.setSharedCacheMode( SharedCacheMode.NONE );
|
|
||||||
}
|
|
||||||
// check if 2lc is explicitly disabled which takes precedence over other settings
|
|
||||||
boolean sharedCacheDisabled = SharedCacheMode.NONE.equals( pu.getSharedCacheMode() )
|
|
||||||
||
|
|
||||||
NONE.equals( sharedCacheMode );
|
|
||||||
|
|
||||||
if ( !sharedCacheDisabled &&
|
|
||||||
Boolean.parseBoolean( properties.getProperty( AvailableSettings.USE_SECOND_LEVEL_CACHE ) )
|
|
||||||
||
|
|
||||||
( sharedCacheMode != null && ( !NONE.equals( sharedCacheMode ) ) )
|
|
||||||
|| ( !SharedCacheMode.NONE.equals( pu.getSharedCacheMode() ) && ( !SharedCacheMode.UNSPECIFIED.equals(
|
|
||||||
pu.getSharedCacheMode() ) ) ) ) {
|
|
||||||
// HibernateSecondLevelCache.addSecondLevelCacheDependencies(pu.getProperties(), pu.getScopedPersistenceUnitName());
|
|
||||||
JPA_LOGGER.tracef( "second level cache enabled for %s", pu.getScopedPersistenceUnitName() );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ( JPA_LOGGER.isTraceEnabled() ) {
|
|
||||||
JPA_LOGGER.tracef(
|
|
||||||
"second level cache disabled for %s, pu %s property = %s, pu.getSharedCacheMode = %s",
|
|
||||||
pu.getScopedPersistenceUnitName(),
|
|
||||||
AvailableSettings.JPA_SHARED_CACHE_MODE,
|
|
||||||
sharedCacheMode,
|
|
||||||
pu.getSharedCacheMode().toString()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
private void putPropertyIfAbsent(PersistenceUnitMetadata pu, Map properties, String property, Object value) {
|
|
||||||
if ( !pu.getProperties().containsKey( property ) ) {
|
|
||||||
properties.put( property, value );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void beforeCreateContainerEntityManagerFactory(PersistenceUnitMetadata pu) {
|
|
||||||
Notification.beforeEntityManagerFactoryCreate( Classification.INFINISPAN, pu );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterCreateContainerEntityManagerFactory(PersistenceUnitMetadata pu) {
|
|
||||||
Notification.afterEntityManagerFactoryCreate( Classification.INFINISPAN, pu );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ManagementAdaptor getManagementAdaptor() {
|
|
||||||
return HibernateManagementAdaptor.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* determine if management console can display the second level cache entries
|
|
||||||
*
|
|
||||||
* @return false if a custom AvailableSettings.CACHE_REGION_PREFIX property is specified.
|
|
||||||
* true if the scoped persistence unit name is used to prefix cache entries.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public boolean doesScopedPersistenceUnitNameIdentifyCacheRegionName(PersistenceUnitMetadata pu) {
|
|
||||||
String cacheRegionPrefix = pu.getProperties().getProperty( AvailableSettings.CACHE_REGION_PREFIX );
|
|
||||||
|
|
||||||
return cacheRegionPrefix == null || cacheRegionPrefix.equals( pu.getScopedPersistenceUnitName() );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void cleanup(PersistenceUnitMetadata pu) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object beanManagerLifeCycle(BeanManager beanManager) {
|
|
||||||
|
|
||||||
if ( isHibernateExtendedBeanManagerSupported() ) {
|
|
||||||
return new HibernateExtendedBeanManager( beanManager );
|
|
||||||
}
|
|
||||||
// for ORM 5.0, return null to indicate that the org.hibernate.jpa.event.spi.jpa.ExtendedBeanManager extension should not be used.
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void markPersistenceUnitAvailable(Object wrapperBeanManagerLifeCycle) {
|
|
||||||
if ( isHibernateExtendedBeanManagerSupported() ) {
|
|
||||||
HibernateExtendedBeanManager hibernateExtendedBeanManager = (HibernateExtendedBeanManager) wrapperBeanManagerLifeCycle;
|
|
||||||
// notify Hibernate ORM ExtendedBeanManager extension that the entity listener(s) can now be registered.
|
|
||||||
hibernateExtendedBeanManager.beanManagerIsAvailableForUse();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* org.hibernate.jpa.event.spi.jpa.ExtendedBeanManager is added to Hibernate 5.1 as an extension for delaying registration
|
|
||||||
* of entity listeners until the CDI AfterDeploymentValidation event is triggered.
|
|
||||||
* This allows entity listener classes to reference the (origin) persistence unit (WFLY-2387).
|
|
||||||
* <p>
|
|
||||||
* return true for Hibernate ORM 5.1+, which should contain the ExtendedBeanManager contract
|
|
||||||
*/
|
|
||||||
private boolean isHibernateExtendedBeanManagerSupported() {
|
|
||||||
try {
|
|
||||||
Class.forName( HIBERNATE_EXTENDED_BEANMANAGER );
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch (ClassNotFoundException | NoClassDefFoundError ignore) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* start of TwoPhaseBootstrapCapable methods */
|
|
||||||
|
|
||||||
public EntityManagerFactoryBuilder getBootstrap(final PersistenceUnitInfo info, final Map map) {
|
|
||||||
return new TwoPhaseBootstrapImpl( info, map );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* end of TwoPhaseBootstrapCapable methods */
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5;
|
|
||||||
|
|
||||||
|
|
||||||
import javax.transaction.TransactionManager;
|
|
||||||
import javax.transaction.TransactionSynchronizationRegistry;
|
|
||||||
|
|
||||||
import org.hibernate.engine.transaction.jta.platform.internal.JtaSynchronizationStrategy;
|
|
||||||
import org.hibernate.engine.transaction.jta.platform.internal.SynchronizationRegistryAccess;
|
|
||||||
import org.hibernate.engine.transaction.jta.platform.internal.SynchronizationRegistryBasedSynchronizationStrategy;
|
|
||||||
|
|
||||||
import org.jipijapa.plugin.spi.JtaManager;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Steve Ebersole
|
|
||||||
*/
|
|
||||||
@SuppressWarnings({"unused", "WeakerAccess"})
|
|
||||||
public class JBossAppServerJtaPlatform
|
|
||||||
extends org.hibernate.engine.transaction.jta.platform.internal.JBossAppServerJtaPlatform {
|
|
||||||
|
|
||||||
private final JtaSynchronizationStrategy synchronizationStrategy;
|
|
||||||
|
|
||||||
protected JtaManager getJtaManager() {
|
|
||||||
return jtaManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
private final JtaManager jtaManager;
|
|
||||||
|
|
||||||
public JBossAppServerJtaPlatform(final JtaManager jtaManager) {
|
|
||||||
this.jtaManager = jtaManager;
|
|
||||||
this.synchronizationStrategy = new SynchronizationRegistryBasedSynchronizationStrategy( new SynchronizationRegistryAccess() {
|
|
||||||
@Override
|
|
||||||
public TransactionSynchronizationRegistry getSynchronizationRegistry() {
|
|
||||||
return jtaManager.getSynchronizationRegistry();
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean canCacheTransactionManager() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected TransactionManager locateTransactionManager() {
|
|
||||||
return jtaManager.locateTransactionManager();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected JtaSynchronizationStrategy getSynchronizationStrategy() {
|
|
||||||
return synchronizationStrategy;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5;
|
|
||||||
|
|
||||||
import org.jboss.logging.BasicLogger;
|
|
||||||
import org.jboss.logging.Logger;
|
|
||||||
import org.jboss.logging.annotations.MessageLogger;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* JipiJapa message range is 20200-20299
|
|
||||||
* note: keep duplicate messages in sync between different sub-projects that use the same messages
|
|
||||||
*
|
|
||||||
* @author <a href="mailto:jperkins@redhat.com">James R. Perkins</a>
|
|
||||||
* @author Scott Marlow
|
|
||||||
*/
|
|
||||||
@MessageLogger(projectCode = "JIPI")
|
|
||||||
public interface JpaLogger extends BasicLogger {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A logger with the category {@code org.jboss.jpa}.
|
|
||||||
*/
|
|
||||||
JpaLogger JPA_LOGGER = Logger.getMessageLogger( JpaLogger.class, "org.jipijapa" );
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,50 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.persistence.EntityManagerFactory;
|
|
||||||
import javax.persistence.spi.PersistenceUnitInfo;
|
|
||||||
|
|
||||||
import org.hibernate.jpa.boot.spi.Bootstrap;
|
|
||||||
|
|
||||||
import org.jipijapa.plugin.spi.EntityManagerFactoryBuilder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TwoPhaseBootstrapImpl
|
|
||||||
*
|
|
||||||
* @author Scott Marlow
|
|
||||||
*/
|
|
||||||
public class TwoPhaseBootstrapImpl implements EntityManagerFactoryBuilder {
|
|
||||||
|
|
||||||
private final org.hibernate.jpa.boot.spi.EntityManagerFactoryBuilder entityManagerFactoryBuilder;
|
|
||||||
|
|
||||||
@SuppressWarnings("WeakerAccess")
|
|
||||||
public TwoPhaseBootstrapImpl(final PersistenceUnitInfo info, final Map map) {
|
|
||||||
entityManagerFactoryBuilder =
|
|
||||||
Bootstrap.getEntityManagerFactoryBuilder( info, map );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public EntityManagerFactory build() {
|
|
||||||
return entityManagerFactoryBuilder.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void cancel() {
|
|
||||||
entityManagerFactoryBuilder.cancel();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public EntityManagerFactoryBuilder withValidatorFactory(Object validatorFactory) {
|
|
||||||
entityManagerFactoryBuilder.withValidatorFactory( validatorFactory );
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
|
|
||||||
import org.hibernate.boot.archive.spi.ArchiveException;
|
|
||||||
import org.hibernate.boot.archive.spi.InputStreamAccess;
|
|
||||||
|
|
||||||
import org.jboss.vfs.VirtualFile;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* InputStreamAccess provides Hibernate with lazy, on-demand access to InputStreams for the various
|
|
||||||
* types of resources found during archive scanning.
|
|
||||||
*
|
|
||||||
* @author Steve Ebersole
|
|
||||||
*/
|
|
||||||
public class VirtualFileInputStreamAccess implements InputStreamAccess {
|
|
||||||
private final String name;
|
|
||||||
private final VirtualFile virtualFile;
|
|
||||||
|
|
||||||
@SuppressWarnings("WeakerAccess")
|
|
||||||
public VirtualFileInputStreamAccess(String name, VirtualFile virtualFile) {
|
|
||||||
this.name = name;
|
|
||||||
this.virtualFile = virtualFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getStreamName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InputStream accessInputStream() {
|
|
||||||
try {
|
|
||||||
return virtualFile.openStream();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
throw new ArchiveException( "Unable to open VirtualFile-based InputStream", e );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,89 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5;
|
|
||||||
|
|
||||||
import org.hibernate.boot.archive.spi.ArchiveContext;
|
|
||||||
import org.hibernate.boot.archive.spi.ArchiveDescriptor;
|
|
||||||
import org.hibernate.boot.archive.spi.ArchiveEntry;
|
|
||||||
import org.hibernate.boot.archive.spi.InputStreamAccess;
|
|
||||||
|
|
||||||
import org.jboss.vfs.VirtualFile;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Representation of an archive in the JBoss VirtualFileSystem API in terms of how to walk entries.
|
|
||||||
*
|
|
||||||
* @author Steve Ebersole
|
|
||||||
*/
|
|
||||||
public class VirtualFileSystemArchiveDescriptor implements ArchiveDescriptor {
|
|
||||||
private final VirtualFile root;
|
|
||||||
|
|
||||||
@SuppressWarnings("WeakerAccess")
|
|
||||||
public VirtualFileSystemArchiveDescriptor(VirtualFile archiveRoot, String entryBase) {
|
|
||||||
if ( entryBase != null && entryBase.length() > 0 && !"/".equals( entryBase ) ) {
|
|
||||||
this.root = archiveRoot.getChild( entryBase );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
this.root = archiveRoot;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public VirtualFile getRoot() {
|
|
||||||
return root;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visitArchive(ArchiveContext archiveContext) {
|
|
||||||
processVirtualFile( root, null, archiveContext );
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processVirtualFile(VirtualFile virtualFile, String path, ArchiveContext archiveContext) {
|
|
||||||
if ( path == null ) {
|
|
||||||
path = "";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ( !path.endsWith( "/'" ) ) {
|
|
||||||
path = path + "/";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( VirtualFile child : virtualFile.getChildren() ) {
|
|
||||||
if ( !child.exists() ) {
|
|
||||||
// should never happen conceptually, but...
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( child.isDirectory() ) {
|
|
||||||
processVirtualFile( child, path + child.getName(), archiveContext );
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
final String name = child.getPathName();
|
|
||||||
final String relativeName = path + child.getName();
|
|
||||||
final InputStreamAccess inputStreamAccess = new VirtualFileInputStreamAccess( name, child );
|
|
||||||
|
|
||||||
final ArchiveEntry entry = new ArchiveEntry() {
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getNameWithinArchive() {
|
|
||||||
return relativeName;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InputStreamAccess getStreamAccess() {
|
|
||||||
return inputStreamAccess;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
archiveContext.obtainArchiveEntryHandler( entry ).handleEntry( entry, archiveContext );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,37 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5;
|
|
||||||
|
|
||||||
import java.net.URISyntaxException;
|
|
||||||
import java.net.URL;
|
|
||||||
|
|
||||||
import org.hibernate.boot.archive.internal.StandardArchiveDescriptorFactory;
|
|
||||||
import org.hibernate.boot.archive.spi.ArchiveDescriptor;
|
|
||||||
|
|
||||||
import org.jboss.vfs.VFS;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* In Hibernate terms, the ArchiveDescriptorFactory contract is used to plug in handling for how to deal
|
|
||||||
* with archives in various systems. For JBoss, that means its VirtualFileSystem API.
|
|
||||||
*
|
|
||||||
* @author Steve Ebersole
|
|
||||||
*/
|
|
||||||
public class VirtualFileSystemArchiveDescriptorFactory extends StandardArchiveDescriptorFactory {
|
|
||||||
@SuppressWarnings("WeakerAccess")
|
|
||||||
public static final VirtualFileSystemArchiveDescriptorFactory INSTANCE = new VirtualFileSystemArchiveDescriptorFactory();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ArchiveDescriptor buildArchiveDescriptor(URL url, String entryBase) {
|
|
||||||
try {
|
|
||||||
return new VirtualFileSystemArchiveDescriptor( VFS.getChild( url.toURI() ), entryBase );
|
|
||||||
}
|
|
||||||
catch (URISyntaxException e) {
|
|
||||||
throw new IllegalArgumentException( e );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,171 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5.management;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import javax.persistence.EntityManagerFactory;
|
|
||||||
|
|
||||||
import org.jipijapa.management.spi.EntityManagerFactoryAccess;
|
|
||||||
import org.jipijapa.management.spi.Operation;
|
|
||||||
import org.jipijapa.management.spi.PathAddress;
|
|
||||||
import org.jipijapa.management.spi.StatisticName;
|
|
||||||
import org.jipijapa.management.spi.Statistics;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* HibernateAbstractStatistics
|
|
||||||
*
|
|
||||||
* @author Scott Marlow
|
|
||||||
*/
|
|
||||||
@SuppressWarnings({"WeakerAccess", "unused"})
|
|
||||||
public abstract class HibernateAbstractStatistics implements Statistics {
|
|
||||||
|
|
||||||
private static final String RESOURCE_BUNDLE = HibernateAbstractStatistics.class.getPackage()
|
|
||||||
.getName() + ".LocalDescriptions";
|
|
||||||
private static final String RESOURCE_BUNDLE_KEY_PREFIX = "hibernate";
|
|
||||||
private Map<String, Operation> operations = new HashMap<>();
|
|
||||||
private Set<String> childrenNames = new HashSet<>();
|
|
||||||
private Set<String> writeableNames = new HashSet<>();
|
|
||||||
private Map<String, Class> types = new HashMap<>();
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getResourceBundleName() {
|
|
||||||
return RESOURCE_BUNDLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getResourceBundleKeyPrefix() {
|
|
||||||
return RESOURCE_BUNDLE_KEY_PREFIX;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected EntityManagerFactory getEntityManagerFactory(Object[] args) {
|
|
||||||
PathAddress pathAddress = getPathAddress( args );
|
|
||||||
for ( Object arg : args ) {
|
|
||||||
if ( arg instanceof EntityManagerFactoryAccess ) {
|
|
||||||
EntityManagerFactoryAccess entityManagerFactoryAccess = (EntityManagerFactoryAccess) arg;
|
|
||||||
return entityManagerFactoryAccess.entityManagerFactory( pathAddress.getValue( HibernateStatistics.PROVIDER_LABEL ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<String> getNames() {
|
|
||||||
return Collections.unmodifiableSet( getOperations().keySet() );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class getType(String name) {
|
|
||||||
return getTypes().get( name );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isOperation(String name) {
|
|
||||||
return Operation.class.equals( getType( name ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isAttribute(String name) {
|
|
||||||
return !isOperation( name );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isWriteable(String name) {
|
|
||||||
return getWriteableNames().contains( name );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object getValue(
|
|
||||||
String name,
|
|
||||||
EntityManagerFactoryAccess entityManagerFactoryAccess,
|
|
||||||
StatisticName statisticName,
|
|
||||||
PathAddress pathAddress) {
|
|
||||||
return getOperations().get( name ).invoke( entityManagerFactoryAccess, statisticName, pathAddress );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setValue(
|
|
||||||
String name,
|
|
||||||
Object newValue,
|
|
||||||
EntityManagerFactoryAccess entityManagerFactoryAccess,
|
|
||||||
StatisticName statisticName,
|
|
||||||
PathAddress pathAddress) {
|
|
||||||
getOperations().get( name ).invoke( newValue, entityManagerFactoryAccess, statisticName, pathAddress );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected EntityManagerFactoryAccess getEntityManagerFactoryAccess(Object[] args) {
|
|
||||||
for ( Object arg : args ) {
|
|
||||||
if ( arg instanceof EntityManagerFactoryAccess ) {
|
|
||||||
return (EntityManagerFactoryAccess) arg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected PathAddress getPathAddress(Object[] args) {
|
|
||||||
for ( Object arg : args ) {
|
|
||||||
if ( arg instanceof PathAddress ) {
|
|
||||||
return (PathAddress) arg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String getStatisticName(Object[] args) {
|
|
||||||
for ( Object arg : args ) {
|
|
||||||
if ( arg instanceof StatisticName ) {
|
|
||||||
StatisticName name = (StatisticName) arg;
|
|
||||||
return name.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<String> getChildrenNames() {
|
|
||||||
return Collections.unmodifiableSet( childrenNames );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Statistics getChild(String childName) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, Operation> getOperations() {
|
|
||||||
return operations;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOperations(Map<String, Operation> operations) {
|
|
||||||
this.operations = operations;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setChildrenNames(Set<String> childrenNames) {
|
|
||||||
this.childrenNames = childrenNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Set<String> getWriteableNames() {
|
|
||||||
return writeableNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setWriteableNames(Set<String> writeableNames) {
|
|
||||||
this.writeableNames = writeableNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, Class> getTypes() {
|
|
||||||
return types;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTypes(Map<String, Class> types) {
|
|
||||||
this.types = types;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,154 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5.management;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import javax.persistence.EntityManagerFactory;
|
|
||||||
|
|
||||||
import org.hibernate.SessionFactory;
|
|
||||||
import org.hibernate.stat.CollectionStatistics;
|
|
||||||
|
|
||||||
import org.jipijapa.management.spi.EntityManagerFactoryAccess;
|
|
||||||
import org.jipijapa.management.spi.Operation;
|
|
||||||
import org.jipijapa.management.spi.PathAddress;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hibernate collection statistics
|
|
||||||
*
|
|
||||||
* @author Scott Marlow
|
|
||||||
*/
|
|
||||||
public class HibernateCollectionStatistics extends HibernateAbstractStatistics {
|
|
||||||
|
|
||||||
private static final String ATTRIBUTE_COLLECTION_NAME = "collection-name";
|
|
||||||
public static final String OPERATION_COLLECTION_LOAD_COUNT = "collection-load-count";
|
|
||||||
public static final String OPERATION_COLLECTION_FETCH_COUNT = "collection-fetch-count";
|
|
||||||
public static final String OPERATION_COLLECTION_UPDATE_COUNT = "collection-update-count";
|
|
||||||
public static final String OPERATION_COLLECTION_REMOVE_COUNT = "collection-remove-count";
|
|
||||||
public static final String OPERATION_COLLECTION_RECREATED_COUNT = "collection-recreated-count";
|
|
||||||
|
|
||||||
public HibernateCollectionStatistics() {
|
|
||||||
/**
|
|
||||||
* specify the different operations
|
|
||||||
*/
|
|
||||||
getOperations().put( ATTRIBUTE_COLLECTION_NAME, showCollectionName );
|
|
||||||
getTypes().put( ATTRIBUTE_COLLECTION_NAME, String.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_COLLECTION_LOAD_COUNT, collectionLoadCount );
|
|
||||||
getTypes().put( OPERATION_COLLECTION_LOAD_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_COLLECTION_FETCH_COUNT, collectionFetchCount );
|
|
||||||
getTypes().put( OPERATION_COLLECTION_FETCH_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_COLLECTION_UPDATE_COUNT, collectionUpdateCount );
|
|
||||||
getTypes().put( OPERATION_COLLECTION_UPDATE_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_COLLECTION_REMOVE_COUNT, collectionRemoveCount );
|
|
||||||
getTypes().put( OPERATION_COLLECTION_REMOVE_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_COLLECTION_RECREATED_COUNT, collectionRecreatedCount );
|
|
||||||
getTypes().put( OPERATION_COLLECTION_RECREATED_COUNT, Long.class );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> getDynamicChildrenNames(
|
|
||||||
EntityManagerFactoryAccess entityManagerFactoryLookup,
|
|
||||||
PathAddress pathAddress) {
|
|
||||||
org.hibernate.stat.Statistics stats = getBaseStatistics( entityManagerFactoryLookup.entityManagerFactory(
|
|
||||||
pathAddress.getValue( HibernateStatistics.PROVIDER_LABEL ) ) );
|
|
||||||
if ( stats == null ) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
return Collections.unmodifiableCollection( Arrays.asList( stats.getCollectionRoleNames() ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
private org.hibernate.stat.Statistics getBaseStatistics(EntityManagerFactory entityManagerFactory) {
|
|
||||||
if ( entityManagerFactory == null ) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
SessionFactory sessionFactory = entityManagerFactory.unwrap( SessionFactory.class );
|
|
||||||
if ( sessionFactory != null ) {
|
|
||||||
return sessionFactory.getStatistics();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private CollectionStatistics getStatistics(final EntityManagerFactory entityManagerFactory, String collectionName) {
|
|
||||||
if ( entityManagerFactory == null ) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
SessionFactory sessionFactory = entityManagerFactory.unwrap( SessionFactory.class );
|
|
||||||
if ( sessionFactory != null ) {
|
|
||||||
return sessionFactory.getStatistics().getCollectionStatistics( collectionName );
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Operation showCollectionName = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
return getStatisticName( args );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation collectionUpdateCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
CollectionStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getStatisticName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getUpdateCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation collectionRemoveCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
CollectionStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getStatisticName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getRemoveCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation collectionRecreatedCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
CollectionStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getStatisticName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getRemoveCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation collectionLoadCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
CollectionStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getStatisticName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getLoadCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation collectionFetchCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
CollectionStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getStatisticName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getFetchCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,151 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5.management;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import javax.persistence.EntityManagerFactory;
|
|
||||||
|
|
||||||
import org.hibernate.SessionFactory;
|
|
||||||
|
|
||||||
import org.jipijapa.management.spi.EntityManagerFactoryAccess;
|
|
||||||
import org.jipijapa.management.spi.Operation;
|
|
||||||
import org.jipijapa.management.spi.PathAddress;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hibernate entity cache (SecondLevelCacheStatistics) statistics
|
|
||||||
*
|
|
||||||
* @author Scott Marlow
|
|
||||||
*/
|
|
||||||
public class HibernateEntityCacheStatistics extends HibernateAbstractStatistics {
|
|
||||||
|
|
||||||
public static final String ATTRIBUTE_ENTITY_CACHE_REGION_NAME = "entity-cache-region-name";
|
|
||||||
public static final String OPERATION_SECOND_LEVEL_CACHE_HIT_COUNT = "second-level-cache-hit-count";
|
|
||||||
public static final String OPERATION_SECOND_LEVEL_CACHE_MISS_COUNT = "second-level-cache-miss-count";
|
|
||||||
public static final String OPERATION_SECOND_LEVEL_CACHE_PUT_COUNT = "second-level-cache-put-count";
|
|
||||||
public static final String OPERATION_SECOND_LEVEL_CACHE_COUNT_IN_MEMORY = "second-level-cache-count-in-memory";
|
|
||||||
public static final String OPERATION_SECOND_LEVEL_CACHE_SIZE_IN_MEMORY = "second-level-cache-size-in-memory";
|
|
||||||
|
|
||||||
public HibernateEntityCacheStatistics() {
|
|
||||||
/**
|
|
||||||
* specify the different operations
|
|
||||||
*/
|
|
||||||
getOperations().put( ATTRIBUTE_ENTITY_CACHE_REGION_NAME, getEntityCacheRegionName );
|
|
||||||
getTypes().put( ATTRIBUTE_ENTITY_CACHE_REGION_NAME, String.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_SECOND_LEVEL_CACHE_HIT_COUNT, entityCacheHitCount );
|
|
||||||
getTypes().put( OPERATION_SECOND_LEVEL_CACHE_HIT_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_SECOND_LEVEL_CACHE_MISS_COUNT, entityCacheMissCount );
|
|
||||||
getTypes().put( OPERATION_SECOND_LEVEL_CACHE_MISS_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_SECOND_LEVEL_CACHE_PUT_COUNT, entityCachePutCount );
|
|
||||||
getTypes().put( OPERATION_SECOND_LEVEL_CACHE_PUT_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_SECOND_LEVEL_CACHE_COUNT_IN_MEMORY, entityCacheCountInMemory );
|
|
||||||
getTypes().put( OPERATION_SECOND_LEVEL_CACHE_COUNT_IN_MEMORY, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_SECOND_LEVEL_CACHE_SIZE_IN_MEMORY, entityCacheSizeInMemory );
|
|
||||||
getTypes().put( OPERATION_SECOND_LEVEL_CACHE_SIZE_IN_MEMORY, Long.class );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> getDynamicChildrenNames(
|
|
||||||
EntityManagerFactoryAccess entityManagerFactoryLookup,
|
|
||||||
PathAddress pathAddress) {
|
|
||||||
org.hibernate.stat.Statistics stats = getBaseStatistics( entityManagerFactoryLookup.entityManagerFactory(
|
|
||||||
pathAddress.getValue( HibernateStatistics.PROVIDER_LABEL ) ) );
|
|
||||||
if ( stats == null ) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
return Collections.unmodifiableCollection( Arrays.asList( stats.getEntityNames() ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
private org.hibernate.stat.Statistics getBaseStatistics(EntityManagerFactory entityManagerFactory) {
|
|
||||||
if ( entityManagerFactory == null ) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
SessionFactory sessionFactory = entityManagerFactory.unwrap( SessionFactory.class );
|
|
||||||
if ( sessionFactory != null ) {
|
|
||||||
return sessionFactory.getStatistics();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
org.hibernate.stat.SecondLevelCacheStatistics getStatistics(
|
|
||||||
EntityManagerFactoryAccess entityManagerFactoryaccess,
|
|
||||||
PathAddress pathAddress) {
|
|
||||||
String scopedPersistenceUnitName = pathAddress.getValue( HibernateStatistics.PROVIDER_LABEL );
|
|
||||||
SessionFactory sessionFactory = entityManagerFactoryaccess.entityManagerFactory( scopedPersistenceUnitName )
|
|
||||||
.unwrap( SessionFactory.class );
|
|
||||||
if ( sessionFactory != null ) {
|
|
||||||
// The entity class name is prefixed by the application scoped persistence unit name
|
|
||||||
|
|
||||||
return sessionFactory.getStatistics().getSecondLevelCacheStatistics(
|
|
||||||
scopedPersistenceUnitName + "." + pathAddress.getValue( HibernateStatistics.ENTITYCACHE )
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Operation getEntityCacheRegionName = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
return getStatisticName( args );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
private Operation entityCacheHitCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.SecondLevelCacheStatistics statistics = getStatistics( getEntityManagerFactoryAccess(
|
|
||||||
args ), getPathAddress( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getHitCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation entityCacheMissCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.SecondLevelCacheStatistics statistics = getStatistics( getEntityManagerFactoryAccess(
|
|
||||||
args ), getPathAddress( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getMissCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation entityCachePutCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.SecondLevelCacheStatistics statistics = getStatistics( getEntityManagerFactoryAccess(
|
|
||||||
args ), getPathAddress( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getPutCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation entityCacheSizeInMemory = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.SecondLevelCacheStatistics statistics = getStatistics( getEntityManagerFactoryAccess(
|
|
||||||
args ), getPathAddress( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getSizeInMemory() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation entityCacheCountInMemory = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.SecondLevelCacheStatistics statistics = getStatistics( getEntityManagerFactoryAccess(
|
|
||||||
args ), getPathAddress( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getElementCountInMemory() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,167 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5.management;
|
|
||||||
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Set;
|
|
||||||
import javax.persistence.EntityManagerFactory;
|
|
||||||
|
|
||||||
import org.hibernate.SessionFactory;
|
|
||||||
|
|
||||||
import org.jipijapa.management.spi.EntityManagerFactoryAccess;
|
|
||||||
import org.jipijapa.management.spi.Operation;
|
|
||||||
import org.jipijapa.management.spi.PathAddress;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hibernate entity statistics
|
|
||||||
*
|
|
||||||
* @author Scott Marlow
|
|
||||||
*/
|
|
||||||
public class HibernateEntityStatistics extends HibernateAbstractStatistics {
|
|
||||||
|
|
||||||
public static final String OPERATION_ENTITY_DELETE_COUNT = "entity-delete-count";
|
|
||||||
public static final String OPERATION_ENTITY_INSERT_COUNT = "entity-insert-count";
|
|
||||||
public static final String OPERATION_ENTITY_LOAD_COUNT = "entity-load-count";
|
|
||||||
public static final String OPERATION_ENTITY_FETCH_COUNT = "entity-fetch-count";
|
|
||||||
public static final String OPERATION_ENTITY_UPDATE_COUNT = "entity-update-count";
|
|
||||||
public static final String OPERATION_OPTIMISTIC_FAILURE_COUNT = "optimistic-failure-count";
|
|
||||||
|
|
||||||
public HibernateEntityStatistics() {
|
|
||||||
/**
|
|
||||||
* specify the different operations
|
|
||||||
*/
|
|
||||||
getOperations().put( OPERATION_ENTITY_DELETE_COUNT, entityDeleteCount );
|
|
||||||
getTypes().put( OPERATION_ENTITY_DELETE_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_ENTITY_INSERT_COUNT, entityInsertCount );
|
|
||||||
getTypes().put( OPERATION_ENTITY_INSERT_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_ENTITY_LOAD_COUNT, entityLoadCount );
|
|
||||||
getTypes().put( OPERATION_ENTITY_LOAD_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_ENTITY_FETCH_COUNT, entityFetchCount );
|
|
||||||
getTypes().put( OPERATION_ENTITY_FETCH_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_ENTITY_UPDATE_COUNT, entityUpdateCount );
|
|
||||||
getTypes().put( OPERATION_ENTITY_UPDATE_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_OPTIMISTIC_FAILURE_COUNT, optimisticFailureCount );
|
|
||||||
getTypes().put( OPERATION_OPTIMISTIC_FAILURE_COUNT, Long.class );
|
|
||||||
}
|
|
||||||
|
|
||||||
private org.hibernate.stat.Statistics getBaseStatistics(EntityManagerFactory entityManagerFactory) {
|
|
||||||
if ( entityManagerFactory == null ) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
SessionFactory sessionFactory = entityManagerFactory.unwrap( SessionFactory.class );
|
|
||||||
if ( sessionFactory != null ) {
|
|
||||||
return sessionFactory.getStatistics();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private org.hibernate.stat.EntityStatistics getStatistics(
|
|
||||||
EntityManagerFactory entityManagerFactory,
|
|
||||||
String entityName) {
|
|
||||||
if ( entityManagerFactory == null ) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
SessionFactory sessionFactory = entityManagerFactory.unwrap( SessionFactory.class );
|
|
||||||
if ( sessionFactory != null ) {
|
|
||||||
return sessionFactory.getStatistics().getEntityStatistics( entityName );
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Operation entityDeleteCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.EntityStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getStatisticName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getDeleteCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation entityFetchCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.EntityStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getStatisticName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getFetchCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation entityInsertCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.EntityStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getStatisticName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getInsertCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation entityLoadCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.EntityStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getStatisticName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getLoadCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation entityUpdateCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.EntityStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getStatisticName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getUpdateCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation optimisticFailureCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.EntityStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getStatisticName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getOptimisticFailureCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<String> getNames() {
|
|
||||||
|
|
||||||
return Collections.unmodifiableSet( getOperations().keySet() );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> getDynamicChildrenNames(
|
|
||||||
EntityManagerFactoryAccess entityManagerFactoryLookup,
|
|
||||||
PathAddress pathAddress) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getBaseStatistics( entityManagerFactoryLookup.entityManagerFactory(
|
|
||||||
pathAddress.getValue( HibernateStatistics.PROVIDER_LABEL ) ) );
|
|
||||||
return statistics != null ?
|
|
||||||
Collections.unmodifiableCollection( Arrays.asList( statistics.getEntityNames() ) ) :
|
|
||||||
Collections.EMPTY_LIST;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5.management;
|
|
||||||
|
|
||||||
import org.jipijapa.management.spi.Statistics;
|
|
||||||
import org.jipijapa.plugin.spi.ManagementAdaptor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contains management support for Hibernate
|
|
||||||
*
|
|
||||||
* @author Scott Marlow
|
|
||||||
*/
|
|
||||||
public class HibernateManagementAdaptor implements ManagementAdaptor {
|
|
||||||
|
|
||||||
// shared (per classloader) instance for all Hibernate 4.3 JPA deployments
|
|
||||||
private static final HibernateManagementAdaptor INSTANCE = new HibernateManagementAdaptor();
|
|
||||||
|
|
||||||
private final Statistics statistics = new HibernateStatistics();
|
|
||||||
|
|
||||||
private static final String PROVIDER_LABEL = "hibernate-persistence-unit";
|
|
||||||
private static final String VERSION = "Hibernate ORM 4.3.x";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The management statistics are shared across all Hibernate 4 JPA deployments
|
|
||||||
*
|
|
||||||
* @return shared instance for all Hibernate 4 JPA deployments
|
|
||||||
*/
|
|
||||||
public static HibernateManagementAdaptor getInstance() {
|
|
||||||
return INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getIdentificationLabel() {
|
|
||||||
return PROVIDER_LABEL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getVersion() {
|
|
||||||
return VERSION;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Statistics getStatistics() {
|
|
||||||
return statistics;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,242 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5.management;
|
|
||||||
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import javax.persistence.EntityManagerFactory;
|
|
||||||
|
|
||||||
import org.hibernate.SessionFactory;
|
|
||||||
|
|
||||||
import org.jipijapa.management.spi.EntityManagerFactoryAccess;
|
|
||||||
import org.jipijapa.management.spi.Operation;
|
|
||||||
import org.jipijapa.management.spi.PathAddress;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hibernate query cache statistics
|
|
||||||
*
|
|
||||||
* @author Scott Marlow
|
|
||||||
*/
|
|
||||||
public class HibernateQueryCacheStatistics extends HibernateAbstractStatistics {
|
|
||||||
|
|
||||||
public static final String ATTRIBUTE_QUERY_NAME = "query-name";
|
|
||||||
public static final String OPERATION_QUERY_EXECUTION_COUNT = "query-execution-count";
|
|
||||||
public static final String OPERATION_QUERY_EXECUTION_ROW_COUNT = "query-execution-row-count";
|
|
||||||
public static final String OPERATION_QUERY_EXECUTION_AVG_TIME = "query-execution-average-time";
|
|
||||||
public static final String OPERATION_QUERY_EXECUTION_MAX_TIME = "query-execution-max-time";
|
|
||||||
public static final String OPERATION_QUERY_EXECUTION_MIN_TIME = "query-execution-min-time";
|
|
||||||
public static final String OPERATION_QUERY_CACHE_HIT_COUNT = "query-cache-hit-count";
|
|
||||||
public static final String OPERATION_QUERY_CACHE_MISS_COUNT = "query-cache-miss-count";
|
|
||||||
public static final String OPERATION_QUERY_CACHE_PUT_COUNT = "query-cache-put-count";
|
|
||||||
|
|
||||||
public HibernateQueryCacheStatistics() {
|
|
||||||
/**
|
|
||||||
* specify the different operations
|
|
||||||
*/
|
|
||||||
getOperations().put( ATTRIBUTE_QUERY_NAME, showQueryName );
|
|
||||||
getTypes().put( ATTRIBUTE_QUERY_NAME, String.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_QUERY_EXECUTION_COUNT, queryExecutionCount );
|
|
||||||
getTypes().put( OPERATION_QUERY_EXECUTION_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_QUERY_EXECUTION_ROW_COUNT, queryExecutionRowCount );
|
|
||||||
getTypes().put( OPERATION_QUERY_EXECUTION_ROW_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_QUERY_EXECUTION_AVG_TIME, queryExecutionAverageTime );
|
|
||||||
getTypes().put( OPERATION_QUERY_EXECUTION_AVG_TIME, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_QUERY_EXECUTION_MAX_TIME, queryExecutionMaximumTime );
|
|
||||||
getTypes().put( OPERATION_QUERY_EXECUTION_MAX_TIME, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_QUERY_EXECUTION_MIN_TIME, queryExecutionMinimumTime );
|
|
||||||
getTypes().put( OPERATION_QUERY_EXECUTION_MIN_TIME, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_QUERY_CACHE_HIT_COUNT, queryCacheHitCount );
|
|
||||||
getTypes().put( OPERATION_QUERY_CACHE_HIT_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_QUERY_CACHE_MISS_COUNT, queryCacheMissCount );
|
|
||||||
getTypes().put( OPERATION_QUERY_CACHE_MISS_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_QUERY_CACHE_PUT_COUNT, queryCachePutCount );
|
|
||||||
getTypes().put( OPERATION_QUERY_CACHE_PUT_COUNT, Long.class );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> getDynamicChildrenNames(
|
|
||||||
EntityManagerFactoryAccess entityManagerFactoryLookup,
|
|
||||||
PathAddress pathAddress) {
|
|
||||||
Set<String> result = new HashSet<>();
|
|
||||||
org.hibernate.stat.Statistics stats = getBaseStatistics( entityManagerFactoryLookup.entityManagerFactory(
|
|
||||||
pathAddress.getValue( HibernateStatistics.PROVIDER_LABEL ) ) );
|
|
||||||
if ( stats != null ) {
|
|
||||||
String[] queries = stats.getQueries();
|
|
||||||
if ( queries != null ) {
|
|
||||||
for ( String query : queries ) {
|
|
||||||
result.add( QueryName.queryName( query ).getDisplayName() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private org.hibernate.stat.Statistics getBaseStatistics(EntityManagerFactory entityManagerFactory) {
|
|
||||||
if ( entityManagerFactory == null ) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
SessionFactory sessionFactory = entityManagerFactory.unwrap( SessionFactory.class );
|
|
||||||
if ( sessionFactory != null ) {
|
|
||||||
return sessionFactory.getStatistics();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private org.hibernate.stat.QueryStatistics getStatistics(
|
|
||||||
EntityManagerFactory entityManagerFactory,
|
|
||||||
String displayQueryName) {
|
|
||||||
if ( entityManagerFactory == null ) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
SessionFactory sessionFactory = entityManagerFactory.unwrap( SessionFactory.class );
|
|
||||||
// convert displayed (transformed by QueryNames) query name to original query name to look up query statistics
|
|
||||||
if ( sessionFactory != null ) {
|
|
||||||
String[] originalQueryNames = sessionFactory.getStatistics().getQueries();
|
|
||||||
if ( originalQueryNames != null ) {
|
|
||||||
for ( String originalQueryName : originalQueryNames ) {
|
|
||||||
if ( QueryName.queryName( originalQueryName ).getDisplayName().equals( displayQueryName ) ) {
|
|
||||||
return sessionFactory.getStatistics().getQueryStatistics( originalQueryName );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Operation queryExecutionCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.QueryStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getQueryName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getExecutionCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation queryExecutionMaximumTime = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.QueryStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getQueryName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getExecutionMaxTime() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation queryExecutionRowCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.QueryStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getQueryName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getExecutionRowCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation queryExecutionAverageTime = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.QueryStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getQueryName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getExecutionAvgTime() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation queryExecutionMinimumTime = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.QueryStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getQueryName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getExecutionMinTime() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation queryCacheHitCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.QueryStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getQueryName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getCacheHitCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation queryCacheMissCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.QueryStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getQueryName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getCacheMissCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation queryCachePutCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.QueryStatistics statistics = getStatistics(
|
|
||||||
getEntityManagerFactory( args ),
|
|
||||||
getQueryName( args )
|
|
||||||
);
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getCachePutCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation showQueryName = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
String displayQueryName = getQueryName( args );
|
|
||||||
EntityManagerFactory entityManagerFactory = getEntityManagerFactory( args );
|
|
||||||
if ( displayQueryName != null && entityManagerFactory != null ) {
|
|
||||||
SessionFactory sessionFactory = entityManagerFactory.unwrap( SessionFactory.class );
|
|
||||||
// convert displayed (transformed by QueryNames) query name to original query name
|
|
||||||
if ( sessionFactory != null ) {
|
|
||||||
String[] originalQueryNames = sessionFactory.getStatistics().getQueries();
|
|
||||||
if ( originalQueryNames != null ) {
|
|
||||||
for ( String originalQueryName : originalQueryNames ) {
|
|
||||||
if ( QueryName.queryName( originalQueryName )
|
|
||||||
.getDisplayName()
|
|
||||||
.equals( displayQueryName ) ) {
|
|
||||||
return originalQueryName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private String getQueryName(Object... args) {
|
|
||||||
PathAddress pathAddress = getPathAddress( args );
|
|
||||||
if ( pathAddress != null ) {
|
|
||||||
return pathAddress.getValue( HibernateStatistics.QUERYCACHE );
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,495 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5.management;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import javax.persistence.Cache;
|
|
||||||
import javax.persistence.EntityManagerFactory;
|
|
||||||
|
|
||||||
import org.hibernate.SessionFactory;
|
|
||||||
|
|
||||||
import org.jipijapa.management.spi.EntityManagerFactoryAccess;
|
|
||||||
import org.jipijapa.management.spi.Operation;
|
|
||||||
import org.jipijapa.management.spi.PathAddress;
|
|
||||||
import org.jipijapa.management.spi.Statistics;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* HibernateStatistics
|
|
||||||
*
|
|
||||||
* @author Scott Marlow
|
|
||||||
*/
|
|
||||||
public class HibernateStatistics extends HibernateAbstractStatistics {
|
|
||||||
|
|
||||||
public static final String PROVIDER_LABEL = "hibernate-persistence-unit";
|
|
||||||
public static final String OPERATION_CLEAR = "clear";
|
|
||||||
public static final String OPERATION_EVICTALL = "evict-all";
|
|
||||||
public static final String OPERATION_SUMMARY = "summary";
|
|
||||||
public static final String OPERATION_STATISTICS_ENABLED_DEPRECATED = "enabled"; // deprecated by JIPI-28
|
|
||||||
public static final String OPERATION_STATISTICS_ENABLED = "statistics-enabled";
|
|
||||||
public static final String OPERATION_ENTITY_DELETE_COUNT = "entity-delete-count";
|
|
||||||
public static final String OPERATION_ENTITY_INSERT_COUNT = "entity-insert-count";
|
|
||||||
public static final String OPERATION_ENTITY_LOAD_COUNT = "entity-load-count";
|
|
||||||
public static final String OPERATION_ENTITY_FETCH_COUNT = "entity-fetch-count";
|
|
||||||
public static final String OPERATION_ENTITY_UPDATE_COUNT = "entity-update-count";
|
|
||||||
public static final String OPERATION_COLLECTION_FETCH_COUNT = "collection-fetch-count";
|
|
||||||
public static final String OPERATION_COLLECTION_LOAD_COUNT = "collection-load-count";
|
|
||||||
public static final String OPERATION_COLLECTION_RECREATED_COUNT = "collection-recreated-count";
|
|
||||||
public static final String OPERATION_COLLECTION_REMOVE_COUNT = "collection-remove-count";
|
|
||||||
public static final String OPERATION_COLLECTION_UPDATE_COUNT = "collection-update-count";
|
|
||||||
public static final String OPERATION_QUERYCACHE_HIT_COUNT = "query-cache-hit-count";
|
|
||||||
public static final String OPERATION_QUERYCACHE_MISS_COUNT = "query-cache-miss-count";
|
|
||||||
public static final String OPERATION_QUERYQUERYCACHE_PUT_COUNT = "query-cache-put-count";
|
|
||||||
public static final String OPERATION_QUERYEXECUTION_COUNT = "query-execution-count";
|
|
||||||
public static final String OPERATION_QUERYEXECUTION_MAX_TIME = "query-execution-max-time";
|
|
||||||
public static final String OPERATION_QUERYEXECUTION_MAX_TIME_STRING = "query-execution-max-time-query-string";
|
|
||||||
public static final String OPERATION_SECONDLEVELCACHE_HIT_COUNT = "second-level-cache-hit-count";
|
|
||||||
public static final String OPERATION_SECONDLEVELCACHE_MISS_COUNT = "second-level-cache-miss-count";
|
|
||||||
public static final String OPERATION_SECONDLEVELCACHE_PUT_COUNT = "second-level-cache-put-count";
|
|
||||||
|
|
||||||
public static final String OPERATION_FLUSH_COUNT = "flush-count";
|
|
||||||
public static final String OPERATION_CONNECT_COUNT = "connect-count";
|
|
||||||
public static final String OPERATION_SESSION_CLOSE_COUNT = "session-close-count";
|
|
||||||
public static final String OPERATION_SESSION_OPEN_COUNT = "session-open-count";
|
|
||||||
public static final String OPERATION_SUCCESSFUL_TRANSACTION_COUNT = "successful-transaction-count";
|
|
||||||
public static final String OPERATION_COMPLETED_TRANSACTION_COUNT = "completed-transaction-count";
|
|
||||||
public static final String OPERATION_PREPARED_STATEMENT_COUNT = "prepared-statement-count";
|
|
||||||
public static final String OPERATION_CLOSE_STATEMENT_COUNT = "close-statement-count";
|
|
||||||
public static final String OPERATION_OPTIMISTIC_FAILURE_COUNT = "optimistic-failure-count";
|
|
||||||
public static final String ENTITYCACHE = "entity-cache";
|
|
||||||
public static final String COLLECTION = "collection";
|
|
||||||
public static final String ENTITY = "entity";
|
|
||||||
public static final String QUERYCACHE = "query-cache";
|
|
||||||
|
|
||||||
private final Map<String, Statistics> childrenStatistics = new HashMap<String, Statistics>();
|
|
||||||
|
|
||||||
public HibernateStatistics() {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* specify the different operations
|
|
||||||
*/
|
|
||||||
getOperations().put( PROVIDER_LABEL, label );
|
|
||||||
getTypes().put( PROVIDER_LABEL, String.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_CLEAR, clear );
|
|
||||||
getTypes().put( OPERATION_CLEAR, Operation.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_EVICTALL, evictAll );
|
|
||||||
getTypes().put( OPERATION_EVICTALL, Operation.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_SUMMARY, summary );
|
|
||||||
getTypes().put( OPERATION_SUMMARY, Operation.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_STATISTICS_ENABLED, statisticsEnabled );
|
|
||||||
getTypes().put( OPERATION_STATISTICS_ENABLED, Boolean.class );
|
|
||||||
getWriteableNames().add( OPERATION_STATISTICS_ENABLED ); // make 'enabled' writeable
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_STATISTICS_ENABLED_DEPRECATED, statisticsEnabled );
|
|
||||||
getTypes().put( OPERATION_STATISTICS_ENABLED_DEPRECATED, Boolean.class );
|
|
||||||
getWriteableNames().add( OPERATION_STATISTICS_ENABLED_DEPRECATED ); // make 'enabled' writeable
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_ENTITY_DELETE_COUNT, entityDeleteCount );
|
|
||||||
getTypes().put( OPERATION_ENTITY_DELETE_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_COLLECTION_FETCH_COUNT, collectionFetchCount );
|
|
||||||
getTypes().put( OPERATION_COLLECTION_FETCH_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_COLLECTION_LOAD_COUNT, collectionLoadCount );
|
|
||||||
getTypes().put( OPERATION_COLLECTION_LOAD_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_COLLECTION_RECREATED_COUNT, collectionRecreatedCount );
|
|
||||||
getTypes().put( OPERATION_COLLECTION_RECREATED_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_COLLECTION_REMOVE_COUNT, collectionRemoveCount );
|
|
||||||
getTypes().put( OPERATION_COLLECTION_REMOVE_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_COLLECTION_UPDATE_COUNT, collectionUpdateCount );
|
|
||||||
getTypes().put( OPERATION_COLLECTION_UPDATE_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_QUERYCACHE_HIT_COUNT, queryCacheHitCount );
|
|
||||||
getTypes().put( OPERATION_QUERYCACHE_HIT_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_QUERYCACHE_MISS_COUNT, queryCacheMissCount );
|
|
||||||
getTypes().put( OPERATION_QUERYCACHE_MISS_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_QUERYQUERYCACHE_PUT_COUNT, queryCachePutCount );
|
|
||||||
getTypes().put( OPERATION_QUERYQUERYCACHE_PUT_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_QUERYEXECUTION_COUNT, queryExecutionCount );
|
|
||||||
getTypes().put( OPERATION_QUERYEXECUTION_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_QUERYEXECUTION_MAX_TIME, queryExecutionMaxTime );
|
|
||||||
getTypes().put( OPERATION_QUERYEXECUTION_MAX_TIME, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_QUERYEXECUTION_MAX_TIME_STRING, queryExecutionMaxTimeString );
|
|
||||||
getTypes().put( OPERATION_QUERYEXECUTION_MAX_TIME_STRING, String.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_ENTITY_INSERT_COUNT, entityInsertCount );
|
|
||||||
getTypes().put( OPERATION_ENTITY_INSERT_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_ENTITY_LOAD_COUNT, entityLoadCount );
|
|
||||||
getTypes().put( OPERATION_ENTITY_LOAD_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_ENTITY_FETCH_COUNT, entityFetchCount );
|
|
||||||
getTypes().put( OPERATION_ENTITY_FETCH_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_ENTITY_UPDATE_COUNT, entityUpdateCount );
|
|
||||||
getTypes().put( OPERATION_ENTITY_UPDATE_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_FLUSH_COUNT, flushCount );
|
|
||||||
getTypes().put( OPERATION_FLUSH_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_CONNECT_COUNT, connectCount );
|
|
||||||
getTypes().put( OPERATION_CONNECT_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_SESSION_CLOSE_COUNT, sessionCloseCount );
|
|
||||||
getTypes().put( OPERATION_SESSION_CLOSE_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_SESSION_OPEN_COUNT, sessionOpenCount );
|
|
||||||
getTypes().put( OPERATION_SESSION_OPEN_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_SUCCESSFUL_TRANSACTION_COUNT, transactionCount );
|
|
||||||
getTypes().put( OPERATION_SUCCESSFUL_TRANSACTION_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_COMPLETED_TRANSACTION_COUNT, transactionCompletedCount );
|
|
||||||
getTypes().put( OPERATION_COMPLETED_TRANSACTION_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_PREPARED_STATEMENT_COUNT, preparedStatementCount );
|
|
||||||
getTypes().put( OPERATION_PREPARED_STATEMENT_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_CLOSE_STATEMENT_COUNT, closedStatementCount );
|
|
||||||
getTypes().put( OPERATION_CLOSE_STATEMENT_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_OPTIMISTIC_FAILURE_COUNT, optimisticFailureCount );
|
|
||||||
getTypes().put( OPERATION_OPTIMISTIC_FAILURE_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_SECONDLEVELCACHE_HIT_COUNT, secondLevelCacheHitCount );
|
|
||||||
getTypes().put( OPERATION_SECONDLEVELCACHE_HIT_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_SECONDLEVELCACHE_MISS_COUNT, secondLevelCacheMissCount );
|
|
||||||
getTypes().put( OPERATION_SECONDLEVELCACHE_MISS_COUNT, Long.class );
|
|
||||||
|
|
||||||
getOperations().put( OPERATION_SECONDLEVELCACHE_PUT_COUNT, secondLevelCachePutCount );
|
|
||||||
getTypes().put( OPERATION_SECONDLEVELCACHE_PUT_COUNT, Long.class );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Specify the children statistics
|
|
||||||
*/
|
|
||||||
getChildrenNames().add( ENTITY );
|
|
||||||
childrenStatistics.put( ENTITY, new HibernateEntityStatistics() );
|
|
||||||
|
|
||||||
getChildrenNames().add( ENTITYCACHE );
|
|
||||||
childrenStatistics.put( ENTITYCACHE, new HibernateEntityCacheStatistics() );
|
|
||||||
|
|
||||||
getChildrenNames().add( COLLECTION );
|
|
||||||
childrenStatistics.put( COLLECTION, new HibernateCollectionStatistics() );
|
|
||||||
|
|
||||||
getChildrenNames().add( QUERYCACHE );
|
|
||||||
childrenStatistics.put( QUERYCACHE, new HibernateQueryCacheStatistics() );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Statistics getChild(String childName) {
|
|
||||||
return childrenStatistics.get( childName );
|
|
||||||
}
|
|
||||||
|
|
||||||
static final org.hibernate.stat.Statistics getStatistics(final EntityManagerFactory entityManagerFactory) {
|
|
||||||
if ( entityManagerFactory == null ) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
SessionFactory sessionFactory = entityManagerFactory.unwrap( SessionFactory.class );
|
|
||||||
if ( sessionFactory != null ) {
|
|
||||||
return sessionFactory.getStatistics();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> getDynamicChildrenNames(
|
|
||||||
EntityManagerFactoryAccess entityManagerFactoryLookup,
|
|
||||||
PathAddress pathAddress) {
|
|
||||||
|
|
||||||
return Collections.EMPTY_LIST;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Operation clear = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
getStatistics( getEntityManagerFactory( args ) ).clear();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation label = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
PathAddress pathAddress = getPathAddress( args );
|
|
||||||
if ( pathAddress != null ) {
|
|
||||||
return pathAddress.getValue( PROVIDER_LABEL );
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation evictAll = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
Cache secondLevelCache = getEntityManagerFactory( args ).getCache();
|
|
||||||
if ( secondLevelCache != null ) {
|
|
||||||
secondLevelCache.evictAll();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation summary = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
getStatistics( getEntityManagerFactory( args ) ).logSummary();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation statisticsEnabled = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
if ( statistics != null ) {
|
|
||||||
if ( args.length > 0 && args[0] instanceof Boolean ) {
|
|
||||||
Boolean newValue = (Boolean) args[0];
|
|
||||||
statistics.setStatisticsEnabled( newValue.booleanValue() );
|
|
||||||
}
|
|
||||||
return Boolean.valueOf( statistics.isStatisticsEnabled() );
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation entityDeleteCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getEntityDeleteCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation collectionLoadCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getCollectionLoadCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation collectionFetchCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getCollectionFetchCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation collectionRecreatedCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getCollectionRecreateCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation collectionRemoveCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getCollectionRemoveCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation collectionUpdateCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getCollectionUpdateCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation queryCacheHitCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getQueryCacheHitCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
private Operation queryCacheMissCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getQueryCacheMissCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
private Operation queryCachePutCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getQueryCachePutCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
private Operation queryExecutionCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getQueryExecutionCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
private Operation queryExecutionMaxTime = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getQueryExecutionMaxTime() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
private Operation queryExecutionMaxTimeString = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return String.valueOf( statistics != null ? statistics.getQueryExecutionMaxTimeQueryString() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation entityFetchCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getEntityFetchCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation entityInsertCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getEntityInsertCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation entityLoadCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getEntityLoadCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation entityUpdateCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getEntityUpdateCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation flushCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getFlushCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation connectCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getConnectCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation sessionCloseCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getSessionCloseCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation sessionOpenCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getSessionOpenCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation transactionCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getTransactionCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation transactionCompletedCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getSuccessfulTransactionCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation preparedStatementCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getPrepareStatementCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation closedStatementCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getCloseStatementCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation optimisticFailureCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getOptimisticFailureCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation secondLevelCacheHitCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getSecondLevelCacheHitCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation secondLevelCacheMissCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getSecondLevelCacheMissCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private Operation secondLevelCachePutCount = new Operation() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object... args) {
|
|
||||||
org.hibernate.stat.Statistics statistics = getStatistics( getEntityManagerFactory( args ) );
|
|
||||||
return Long.valueOf( statistics != null ? statistics.getSecondLevelCachePutCount() : 0 );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,208 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5.management;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents the Hibernate query name which is passed in as a parameter. The displayQuery can be obtained which
|
|
||||||
* has spaces and other symbols replaced with a textual description (which shouldn't be changed or localized.
|
|
||||||
* The localization rule is so that one set of admin scripts will work against any back end system. If it becomes
|
|
||||||
* more important to localize the textual descriptions, care should be taken to avoid duplicate values when doing so.
|
|
||||||
*
|
|
||||||
* @author Scott Marlow
|
|
||||||
*/
|
|
||||||
public class QueryName {
|
|
||||||
|
|
||||||
// query name as returned from hibernate Statistics.getQueries()
|
|
||||||
private final String hibernateQuery;
|
|
||||||
|
|
||||||
// query name transformed for display use (allowed to be ugly but should be unique)
|
|
||||||
private final String displayQuery;
|
|
||||||
|
|
||||||
// HQL symbol or operators
|
|
||||||
private static final String SQL_NE = "<>";
|
|
||||||
private static final String NE_BANG = "!=";
|
|
||||||
private static final String NE_HAT = "^=";
|
|
||||||
private static final String LE = "<=";
|
|
||||||
private static final String GE = ">=";
|
|
||||||
private static final String CONCAT = "||";
|
|
||||||
private static final String LT = "<";
|
|
||||||
private static final String EQ = "=";
|
|
||||||
private static final String GT = ">";
|
|
||||||
private static final String OPEN = "(";
|
|
||||||
private static final String CLOSE = ")";
|
|
||||||
private static final String OPEN_BRACKET = "[";
|
|
||||||
private static final String CLOSE_BRACKET = "]";
|
|
||||||
private static final String PLUS = "+";
|
|
||||||
private static final String MINUS = "-";
|
|
||||||
private static final String STAR = "*";
|
|
||||||
private static final String DIV = "/";
|
|
||||||
private static final String MOD = "%";
|
|
||||||
private static final String COLON = ":";
|
|
||||||
private static final String PARAM = "?";
|
|
||||||
private static final String COMMA = ",";
|
|
||||||
private static final String SPACE = " ";
|
|
||||||
private static final String TAB = "\t";
|
|
||||||
private static final String NEWLINE = "\n";
|
|
||||||
private static final String LINEFEED = "\r";
|
|
||||||
private static final String QUOTE = "'";
|
|
||||||
private static final String DQUOTE = "\"";
|
|
||||||
private static final String TICK = "`";
|
|
||||||
private static final String OPEN_BRACE = "{";
|
|
||||||
private static final String CLOSE_BRACE = "}";
|
|
||||||
private static final String HAT = "^";
|
|
||||||
private static final String AMPERSAND = "&";
|
|
||||||
|
|
||||||
// textual representation (not to be localized as we don't won't duplication between any of the values)
|
|
||||||
private static final String NOT_EQUAL__ = "_not_equal_";
|
|
||||||
private static final String BANG_NOT_EQUAL__ = "_bang_not_equal_";
|
|
||||||
private static final String HAT_NOT_EQUAL__ = "_hat_not_equal_";
|
|
||||||
private static final String LESS_THAN_EQUAL__ = "_less_than_equal_";
|
|
||||||
private static final String GREATER_THAN_EQUAL__ = "_greater_than_equal_";
|
|
||||||
private static final String CONCAT__ = "_concat_";
|
|
||||||
private static final String LESS_THAN__ = "_less_than_";
|
|
||||||
private static final String EQUAL__ = "_equal_";
|
|
||||||
private static final String GREATER__ = "_greater_";
|
|
||||||
private static final String LEFT_PAREN__ = "_left_paren_";
|
|
||||||
private static final String RIGHT_PAREN__ = "_right_paren_";
|
|
||||||
private static final String LEFT_BRACKET__ = "_left_bracket_";
|
|
||||||
private static final String RIGHT_BRACKET__ = "_right_bracket_";
|
|
||||||
private static final String PLUS__ = "_plus_";
|
|
||||||
private static final String MINUS__ = "_minus_";
|
|
||||||
private static final String STAR__ = "_star_";
|
|
||||||
private static final String DIVIDE__ = "_divide_";
|
|
||||||
private static final String MODULUS__ = "_modulus_";
|
|
||||||
private static final String COLON__ = "_colon_";
|
|
||||||
private static final String PARAM__ = "_param_";
|
|
||||||
private static final String COMMA__ = "_comma_";
|
|
||||||
private static final String SPACE__ = "_space_";
|
|
||||||
private static final String TAB__ = "_tab_";
|
|
||||||
private static final String NEWLINE__ = "_newline_";
|
|
||||||
private static final String LINEFEED__ = "_linefeed_";
|
|
||||||
private static final String QUOTE__ = "_quote_";
|
|
||||||
private static final String DQUOTE__ = "_double_quote_";
|
|
||||||
private static final String TICK__ = "_tick_";
|
|
||||||
private static final String OPEN_BRACE__ = "_left_brace_";
|
|
||||||
private static final String CLOSE_BRACE__ = "_right_brace_";
|
|
||||||
private static final String HAT__ = "_hat_";
|
|
||||||
private static final String AMPERSAND__ = "_ampersand_";
|
|
||||||
|
|
||||||
public static QueryName queryName(String query) {
|
|
||||||
return new QueryName( query );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct
|
|
||||||
*/
|
|
||||||
public QueryName(String query) {
|
|
||||||
hibernateQuery = query;
|
|
||||||
displayQuery = displayable( query );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDisplayName() {
|
|
||||||
return displayQuery;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if ( this == o ) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if ( o == null || getClass() != o.getClass() ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
QueryName queryName = (QueryName) o;
|
|
||||||
|
|
||||||
if ( displayQuery != null ? !displayQuery.equals( queryName.displayQuery ) : queryName.displayQuery != null ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ( hibernateQuery != null ?
|
|
||||||
!hibernateQuery.equals( queryName.hibernateQuery ) :
|
|
||||||
queryName.hibernateQuery != null ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
int result = hibernateQuery != null ? hibernateQuery.hashCode() : 0;
|
|
||||||
result = 31 * result + ( displayQuery != null ? displayQuery.hashCode() : 0 );
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* transform a Hibernate HQL query into something that can be displayed/used for management operations
|
|
||||||
*/
|
|
||||||
private String displayable(String query) {
|
|
||||||
if ( query == null ||
|
|
||||||
query.length() == 0 ) {
|
|
||||||
return query;
|
|
||||||
}
|
|
||||||
|
|
||||||
StringBuilder buff = new StringBuilder( query );
|
|
||||||
|
|
||||||
// handle two character transforms first
|
|
||||||
subst( buff, SQL_NE, NOT_EQUAL__ );
|
|
||||||
subst( buff, NE_BANG, BANG_NOT_EQUAL__ );
|
|
||||||
subst( buff, NE_HAT, HAT_NOT_EQUAL__ );
|
|
||||||
subst( buff, LE, LESS_THAN_EQUAL__ );
|
|
||||||
subst( buff, GE, GREATER_THAN_EQUAL__ );
|
|
||||||
subst( buff, CONCAT, CONCAT__ );
|
|
||||||
subst( buff, LT, LESS_THAN__ );
|
|
||||||
subst( buff, EQ, EQUAL__ );
|
|
||||||
subst( buff, GT, GREATER__ );
|
|
||||||
subst( buff, OPEN, LEFT_PAREN__ );
|
|
||||||
subst( buff, CLOSE, RIGHT_PAREN__ );
|
|
||||||
subst( buff, OPEN_BRACKET, LEFT_BRACKET__ );
|
|
||||||
subst( buff, CLOSE_BRACKET, RIGHT_BRACKET__ );
|
|
||||||
subst( buff, PLUS, PLUS__ );
|
|
||||||
subst( buff, MINUS, MINUS__ );
|
|
||||||
subst( buff, STAR, STAR__ );
|
|
||||||
subst( buff, DIV, DIVIDE__ );
|
|
||||||
subst( buff, MOD, MODULUS__ );
|
|
||||||
subst( buff, COLON, COLON__ );
|
|
||||||
subst( buff, PARAM, PARAM__ );
|
|
||||||
subst( buff, COMMA, COMMA__ );
|
|
||||||
subst( buff, SPACE, SPACE__ );
|
|
||||||
subst( buff, TAB, TAB__ );
|
|
||||||
subst( buff, NEWLINE, NEWLINE__ );
|
|
||||||
subst( buff, LINEFEED, LINEFEED__ );
|
|
||||||
subst( buff, QUOTE, QUOTE__ );
|
|
||||||
subst( buff, DQUOTE, DQUOTE__ );
|
|
||||||
subst( buff, TICK, TICK__ );
|
|
||||||
subst( buff, OPEN_BRACE, OPEN_BRACE__ );
|
|
||||||
subst( buff, CLOSE_BRACE, CLOSE_BRACE__ );
|
|
||||||
subst( buff, HAT, HAT__ );
|
|
||||||
subst( buff, AMPERSAND, AMPERSAND__ );
|
|
||||||
return buff.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Substitute sub-strings inside of a string.
|
|
||||||
*
|
|
||||||
* @param stringBuilder String buffer to use for substitution (buffer is not reset)
|
|
||||||
* @param from String to substitute from
|
|
||||||
* @param to String to substitute to
|
|
||||||
*/
|
|
||||||
private static void subst(final StringBuilder stringBuilder, final String from, final String to) {
|
|
||||||
int begin = 0, end = 0;
|
|
||||||
|
|
||||||
while ( ( end = stringBuilder.indexOf( from, end ) ) != -1 ) {
|
|
||||||
stringBuilder.delete( end, end + from.length() );
|
|
||||||
stringBuilder.insert( end, to );
|
|
||||||
|
|
||||||
// update positions
|
|
||||||
begin = end + to.length();
|
|
||||||
end = begin;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5.service;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator;
|
|
||||||
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
|
|
||||||
import org.hibernate.service.spi.ServiceRegistryImplementor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom JtaPlatform initiator for use inside WildFly picking an appropriate
|
|
||||||
* fallback JtaPlatform.
|
|
||||||
*
|
|
||||||
* @author Steve Ebersole
|
|
||||||
*/
|
|
||||||
public class CustomJtaPlatformInitiator extends JtaPlatformInitiator {
|
|
||||||
@Override
|
|
||||||
protected JtaPlatform getFallbackProvider(Map configurationValues, ServiceRegistryImplementor registry) {
|
|
||||||
return new org.hibernate.engine.transaction.jta.platform.internal.JBossAppServerJtaPlatform();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5.service;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.hibernate.cache.internal.NoCachingRegionFactory;
|
|
||||||
import org.hibernate.cache.internal.RegionFactoryInitiator;
|
|
||||||
import org.hibernate.cache.spi.RegionFactory;
|
|
||||||
import org.hibernate.service.spi.ServiceRegistryImplementor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Steve Ebersole
|
|
||||||
*/
|
|
||||||
public class CustomRegionFactoryInitiator extends RegionFactoryInitiator {
|
|
||||||
@Override
|
|
||||||
protected RegionFactory getFallback(Map configurationValues, ServiceRegistryImplementor registry) {
|
|
||||||
return NoCachingRegionFactory.INSTANCE;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5.service;
|
|
||||||
|
|
||||||
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
|
||||||
import org.hibernate.service.spi.ServiceContributor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contribute specialized Hibernate Service impls
|
|
||||||
*
|
|
||||||
* @author Steve Ebersole
|
|
||||||
*/
|
|
||||||
public class ServiceContributorImpl implements ServiceContributor {
|
|
||||||
@Override
|
|
||||||
public void contribute(StandardServiceRegistryBuilder serviceRegistryBuilder) {
|
|
||||||
serviceRegistryBuilder.addInitiator( new CustomJtaPlatformInitiator() );
|
|
||||||
serviceRegistryBuilder.addInitiator( new CustomRegionFactoryInitiator() );
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
#
|
|
||||||
# Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
#
|
|
||||||
# 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
|
|
||||||
|
|
||||||
org.jboss.as.jpa.hibernate5.service.ServiceContributorImpl
|
|
|
@ -1,8 +0,0 @@
|
||||||
#
|
|
||||||
# Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
#
|
|
||||||
# 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>.
|
|
||||||
#
|
|
||||||
|
|
||||||
org.jboss.as.jpa.hibernate5.HibernatePersistenceProviderAdaptor
|
|
|
@ -1,106 +0,0 @@
|
||||||
#
|
|
||||||
# Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
#
|
|
||||||
# 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>.
|
|
||||||
#
|
|
||||||
hibernate=Contains Hibernate statistics
|
|
||||||
#
|
|
||||||
# top-level Hibernate statistics
|
|
||||||
#
|
|
||||||
hibernate.hibernate-persistence-unit=Contains Hibernate statistics
|
|
||||||
hibernate.statistics.collection=Statistics for individual collections.
|
|
||||||
hibernate.clear.clear=Clear statistics.
|
|
||||||
hibernate.evict-all.evict-all=Evict all entities from second level cache.
|
|
||||||
hibernate.summary.summary=Log the statistics.
|
|
||||||
hibernate.flush-count=Get the number of flushes executed by sessions (either implicit or explicit).
|
|
||||||
hibernate.connect-count=Get the number of connections asked for by the sessions.
|
|
||||||
hibernate.session-close-count=Number of sessions closed.
|
|
||||||
hibernate.session-open-count=Number of sessions opened.
|
|
||||||
hibernate.enabled=Determine if statistics are enabled.
|
|
||||||
hibernate.enabled.deprecated=Use statistics-enabled.
|
|
||||||
hibernate.statistics-enabled=Determine if statistics are enabled.
|
|
||||||
hibernate.successful-transaction-count=Number of successful transactions.
|
|
||||||
hibernate.completed-transaction-count=Number of completed transactions.
|
|
||||||
hibernate.prepared-statement-count=Number of acquired prepared statements.
|
|
||||||
hibernate.close-statement-count=Number of released prepared statements.
|
|
||||||
hibernate.optimistic-failure-count=Number of optimistic lock exceptions.
|
|
||||||
hibernate.clear=Clear statistics.
|
|
||||||
hibernate.evict-all=Evict all entities from second level cache.
|
|
||||||
hibernate.statistics.enable=Enable the statistics.
|
|
||||||
hibernate.statistics.enable.enable=True will enable the statistics.
|
|
||||||
hibernate.statistics.enable.reply=Return whether statistics were previously enabled.
|
|
||||||
hibernate.summary=Log the statistics.
|
|
||||||
hibernate.entity-delete-count=Get number of entity deletes.
|
|
||||||
hibernate.entity-insert-count=Get number of entity inserts.
|
|
||||||
hibernate.entity-load-count=Get number of entity loads.
|
|
||||||
hibernate.entity-fetch-count=Get number of entity fetches.
|
|
||||||
hibernate.entity-update-count=Get number of entity updates.
|
|
||||||
hibernate.collection-load-count=Number of times collection was loaded.
|
|
||||||
hibernate.collection-fetch-count=Number of times collection was fetched.
|
|
||||||
hibernate.collection-recreated-count=Number of times collection was recreated.
|
|
||||||
hibernate.collection-remove-count=Number of times collection was removed.
|
|
||||||
hibernate.collection-update-count=Number of times collection was updated.
|
|
||||||
hibernate.query-cache-hit-count=Get the number of times query was retrieved from cache.
|
|
||||||
hibernate.query-cache-miss-count=Get the number of times query was not found in cache.
|
|
||||||
hibernate.query-cache-put-count=Get the number of times query was put in cache.
|
|
||||||
hibernate.query-execution-max-time-query-string=Longest running query.
|
|
||||||
hibernate.query=Statistics for individual queries.
|
|
||||||
hibernate.query-execution-count=Get number of times query has been executed.
|
|
||||||
hibernate.query-execution-row-count=Get number of rows returned from executions of query.
|
|
||||||
hibernate.query-execution-max-time=Get the time in milliseconds of the query.
|
|
||||||
hibernate.query-execution-min-time=Get the minimum time in milliseconds of the query.
|
|
||||||
hibernate.query-execution-average-time=Get the average time in milliseconds of the query.
|
|
||||||
hibernate.query-name=Query name.
|
|
||||||
hibernate.second-level-cache-hit-count=Number of cacheable entities/collections successfully retrieved from the cache.
|
|
||||||
hibernate.second-level-cache-miss-count=Number of cacheable entities/collections not found in the cache and loaded.
|
|
||||||
hibernate.second-level-cache-put-count=Number of cacheable entities/collections put in the cache.
|
|
||||||
#
|
|
||||||
# per entity class statistics
|
|
||||||
#
|
|
||||||
hibernate.entity=Per entity class statistics.
|
|
||||||
entity=Statistics for individual entities.
|
|
||||||
entity.entity-delete-count=Get number of entity deletes.
|
|
||||||
entity.entity-insert-count=Get number of entity inserts.
|
|
||||||
entity.entity-load-count=Get number of entity loads.
|
|
||||||
entity.entity-fetch-count=Get number of entity fetches.
|
|
||||||
entity.entity-update-count=Get number of entity updates.
|
|
||||||
entity.optimistic-failure-count=Number of optimistic lock exceptions.
|
|
||||||
#
|
|
||||||
# query cache statistics
|
|
||||||
#
|
|
||||||
hibernate.query-cache=Query cache.
|
|
||||||
query-cache=Query cache.
|
|
||||||
query-cache.query-cache-hit-count=Get the number of times query was retrieved from cache.
|
|
||||||
query-cache.query-cache-miss-count=Get the number of times query was not found in cache.
|
|
||||||
query-cache.query-cache-put-count=Get the number of times query was put in cache.
|
|
||||||
query-cache.query-execution-count=Get number of times query has been executed.
|
|
||||||
query-cache.query-execution-row-count=Get number of rows returned from executions of query.
|
|
||||||
query-cache.query-execution-max-time=Get the time in milliseconds of the query.
|
|
||||||
query-cache.query-execution-min-time=Get the minimum time in milliseconds of the query.
|
|
||||||
query-cache.query-execution-average-time=Get the average time in milliseconds of the query.
|
|
||||||
query-cache.query-name=Query name.
|
|
||||||
#
|
|
||||||
# collection statistics
|
|
||||||
#
|
|
||||||
collection=Statistics for individual collections.
|
|
||||||
collection.collection-name=Name of collection.
|
|
||||||
hibernate.collection=Statistics for individual collections.
|
|
||||||
collection.collection-load-count=Number of times collection was loaded.
|
|
||||||
collection.collection-fetch-count=Number of times collection was fetched.
|
|
||||||
collection.collection-recreated-count=Number of times collection was recreated.
|
|
||||||
collection.collection-remove-count=Number of times collection was removed.
|
|
||||||
collection.collection-update-count=Number of times collection was updated.
|
|
||||||
#
|
|
||||||
# second level entity cache statistics
|
|
||||||
#
|
|
||||||
entity-cache=Statistics for a Hibernate Second Level Cache region.
|
|
||||||
hibernate.entity-cache=Statistics for a Hibernate Second Level Cache region.
|
|
||||||
hibernate.entity-cache-region-name=Region name used to identity the cached entity class.
|
|
||||||
entity-cache.entity-cache-region-name=Region name used to identity the cached entity class.
|
|
||||||
entity-cache.second-level-cache-hit-count=Number of cacheable entities/collections successfully retrieved from the cache.
|
|
||||||
entity-cache.second-level-cache-miss-count=Number of cacheable entities/collections not found in the cache and loaded.
|
|
||||||
entity-cache.second-level-cache-put-count=Number of cacheable entities/collections put in the cache.
|
|
||||||
entity-cache.second-level-cache-size-in-memory=Memory size of cacheable entities.
|
|
||||||
entity-cache.second-level-cache-count-in-memory=Number of cacheable entities/collections currently stored in memory.
|
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- example of reference to a cfg.xml file -->
|
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
|
|
||||||
version="1.0">
|
|
||||||
<persistence-unit name="cfgxmlpar" transaction-type="RESOURCE_LOCAL">
|
|
||||||
<provider>org.hibernate.ejb.HibernatePersistence</provider>
|
|
||||||
<properties>
|
|
||||||
<property name="hibernate.ejb.cfgfile" value="/org/hibernate/jpa/test/pack/cfgxmlpar/hibernate.cfg.xml"/>
|
|
||||||
</properties>
|
|
||||||
</persistence-unit>
|
|
||||||
</persistence>
|
|
|
@ -1,37 +0,0 @@
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!DOCTYPE hibernate-configuration PUBLIC
|
|
||||||
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
|
|
||||||
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
|
|
||||||
|
|
||||||
<hibernate-configuration>
|
|
||||||
<session-factory>
|
|
||||||
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
|
|
||||||
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
|
|
||||||
<property name="hibernate.connection.username">sa</property>
|
|
||||||
<property name="hibernate.connection.password"></property>
|
|
||||||
<property name="hibernate.connection.url">jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;MVCC=TRUE</property>
|
|
||||||
<property name="hibernate.cache.use_query_cache">true</property>
|
|
||||||
<property name="hibernate.cache.region_prefix">hibernate.test</property>
|
|
||||||
<property name="hibernate.jdbc.use_streams_for_binary">true</property>
|
|
||||||
<property name="hibernate.jdbc.batch_size">0</property>
|
|
||||||
<property name="hibernate.max_fetch_depth">3</property>
|
|
||||||
<property name="hibernate.hbm2ddl.auto">create-drop</property>
|
|
||||||
<property name="hibernate.generate_statistics">true</property>
|
|
||||||
<property name="test-assertable-setting">value</property>
|
|
||||||
<property name="hibernate.cache.region.factory_class">org.hibernate.testing.cache.CachingRegionFactory
|
|
||||||
</property>
|
|
||||||
<mapping class="org.hibernate.jpa.test.Item"/>
|
|
||||||
<mapping class="org.hibernate.jpa.test.Cat"/>
|
|
||||||
<mapping class="org.hibernate.jpa.test.Kitten"/>
|
|
||||||
<mapping class="org.hibernate.jpa.test.Distributor"/>
|
|
||||||
<class-cache class="org.hibernate.jpa.test.Item" usage="read-write"/>
|
|
||||||
<collection-cache collection="org.hibernate.jpa.test.Item.distributors" usage="read-write" region="RegionName"/>
|
|
||||||
<event type="pre-insert"/>
|
|
||||||
</session-factory>
|
|
||||||
</hibernate-configuration>
|
|
|
@ -1,40 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
|
|
||||||
version="2.0"
|
|
||||||
>
|
|
||||||
<persistence-unit-metadata>
|
|
||||||
<persistence-unit-defaults>
|
|
||||||
<entity-listeners>
|
|
||||||
<entity-listener class="org.hibernate.jpa.test.pack.defaultpar.IncrementListener">
|
|
||||||
<pre-persist method-name="increment"/>
|
|
||||||
</entity-listener>
|
|
||||||
</entity-listeners>
|
|
||||||
</persistence-unit-defaults>
|
|
||||||
</persistence-unit-metadata>
|
|
||||||
<package>org.hibernate.jpa.test.pack.defaultpar</package>
|
|
||||||
<entity class="Lighter" access="FIELD" metadata-complete="true">
|
|
||||||
<attributes>
|
|
||||||
<id name="name">
|
|
||||||
<column name="fld_id"/>
|
|
||||||
</id>
|
|
||||||
<basic name="power"></basic>
|
|
||||||
</attributes>
|
|
||||||
</entity>
|
|
||||||
<entity class="ApplicationServer">
|
|
||||||
<entity-listeners>
|
|
||||||
<entity-listener class="OtherIncrementListener">
|
|
||||||
<pre-persist method-name="increment"/>
|
|
||||||
</entity-listener>
|
|
||||||
</entity-listeners>
|
|
||||||
</entity>
|
|
||||||
</entity-mappings>
|
|
|
@ -1,28 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- example of a default persistence.xml -->
|
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
|
||||||
version="2.0">
|
|
||||||
<persistence-unit name="defaultpar">
|
|
||||||
<class>org.hibernate.jpa.test.pack.defaultpar.Lighter</class>
|
|
||||||
<validation-mode>CALLBACK</validation-mode>
|
|
||||||
<properties>
|
|
||||||
<property name="hibernate.dialect" value="@db.dialect@"/>
|
|
||||||
<property name="hibernate.connection.driver_class" value="@jdbc.driver@"/>
|
|
||||||
<property name="hibernate.connection.username" value="@jdbc.user@"/>
|
|
||||||
<property name="hibernate.connection.password" value="@jdbc.pass@"/>
|
|
||||||
<property name="hibernate.connection.url" value="@jdbc.url@"/>
|
|
||||||
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
|
|
||||||
<property name="hibernate.cache.region.factory_class"
|
|
||||||
value="org.hibernate.testing.cache.CachingRegionFactory"/>
|
|
||||||
</properties>
|
|
||||||
</persistence-unit>
|
|
||||||
</persistence>
|
|
|
@ -1,26 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!DOCTYPE hibernate-mapping PUBLIC
|
|
||||||
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
|
||||||
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
|
|
||||||
|
|
||||||
<hibernate-mapping
|
|
||||||
package="org.hibernate.jpa.test.pack.defaultpar"
|
|
||||||
>
|
|
||||||
|
|
||||||
<class name="Mouse">
|
|
||||||
|
|
||||||
<id name="id">
|
|
||||||
<generator class="native"/>
|
|
||||||
</id>
|
|
||||||
<property name="name"/>
|
|
||||||
|
|
||||||
</class>
|
|
||||||
|
|
||||||
</hibernate-mapping>
|
|
|
@ -1,41 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
|
|
||||||
version="1.0"
|
|
||||||
>
|
|
||||||
<!-- use orm_1_0 on purpose (backward compatibility test -->
|
|
||||||
<persistence-unit-metadata>
|
|
||||||
<persistence-unit-defaults>
|
|
||||||
<entity-listeners>
|
|
||||||
<entity-listener class="org.hibernate.jpa.test.pack.defaultpar_1_0.IncrementListener1">
|
|
||||||
<pre-persist method-name="increment"/>
|
|
||||||
</entity-listener>
|
|
||||||
</entity-listeners>
|
|
||||||
</persistence-unit-defaults>
|
|
||||||
</persistence-unit-metadata>
|
|
||||||
<package>org.hibernate.jpa.test.pack.defaultpar_1_0</package>
|
|
||||||
<entity class="org.hibernate.jpa.test.pack.defaultpar_1_0.Lighter1" access="FIELD" metadata-complete="true">
|
|
||||||
<attributes>
|
|
||||||
<id name="name">
|
|
||||||
<column name="fld_id"/>
|
|
||||||
</id>
|
|
||||||
<basic name="power"></basic>
|
|
||||||
</attributes>
|
|
||||||
</entity>
|
|
||||||
<entity class="org.hibernate.jpa.test.pack.defaultpar_1_0.ApplicationServer1">
|
|
||||||
<entity-listeners>
|
|
||||||
<entity-listener class="OtherIncrementListener1">
|
|
||||||
<pre-persist method-name="increment"/>
|
|
||||||
</entity-listener>
|
|
||||||
</entity-listeners>
|
|
||||||
</entity>
|
|
||||||
</entity-mappings>
|
|
|
@ -1,27 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- example of a default persistence.xml -->
|
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
|
|
||||||
version="1.0">
|
|
||||||
<persistence-unit name="defaultpar_1_0">
|
|
||||||
<class>org.hibernate.jpa.test.pack.defaultpar.Lighter</class>
|
|
||||||
<properties>
|
|
||||||
<property name="hibernate.dialect" value="@db.dialect@"/>
|
|
||||||
<property name="hibernate.connection.driver_class" value="@jdbc.driver@"/>
|
|
||||||
<property name="hibernate.connection.username" value="@jdbc.user@"/>
|
|
||||||
<property name="hibernate.connection.password" value="@jdbc.pass@"/>
|
|
||||||
<property name="hibernate.connection.url" value="@jdbc.url@"/>
|
|
||||||
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
|
|
||||||
<property name="hibernate.cache.region.factory_class"
|
|
||||||
value="org.hibernate.testing.cache.CachingRegionFactory"/>
|
|
||||||
</properties>
|
|
||||||
</persistence-unit>
|
|
||||||
</persistence>
|
|
|
@ -1,26 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!DOCTYPE hibernate-mapping PUBLIC
|
|
||||||
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
|
||||||
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
|
|
||||||
|
|
||||||
<hibernate-mapping
|
|
||||||
package="org.hibernate.jpa.test.pack.defaultpar_1_0"
|
|
||||||
>
|
|
||||||
|
|
||||||
<class name="Mouse1">
|
|
||||||
|
|
||||||
<id name="id">
|
|
||||||
<generator class="native"/>
|
|
||||||
</id>
|
|
||||||
<property name="name"/>
|
|
||||||
|
|
||||||
</class>
|
|
||||||
|
|
||||||
</hibernate-mapping>
|
|
|
@ -1,24 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
|
|
||||||
version="2.0"
|
|
||||||
>
|
|
||||||
<package>org.hibernate.jpa.test.xml</package>
|
|
||||||
<entity class="Light" access="FIELD" metadata-complete="true">
|
|
||||||
<attributes>
|
|
||||||
<id name="name">
|
|
||||||
<column name="fld_id"/>
|
|
||||||
</id>
|
|
||||||
<basic name="power"></basic>
|
|
||||||
</attributes>
|
|
||||||
</entity>
|
|
||||||
</entity-mappings>
|
|
|
@ -1,28 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- example of a default persistence.xml -->
|
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
|
||||||
version="2.0">
|
|
||||||
<persistence-unit name="excludehbmpar" transaction-type="RESOURCE_LOCAL">
|
|
||||||
<mapping-file>META-INF/orm2.xml</mapping-file>
|
|
||||||
<properties>
|
|
||||||
<property name="hibernate.dialect" value="@db.dialect@"/>
|
|
||||||
<property name="hibernate.connection.driver_class" value="@jdbc.driver@"/>
|
|
||||||
<property name="hibernate.connection.username" value="@jdbc.user@"/>
|
|
||||||
<property name="hibernate.connection.password" value="@jdbc.pass@"/>
|
|
||||||
<property name="hibernate.connection.url" value="@jdbc.url@"/>
|
|
||||||
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
|
|
||||||
<property name="hibernate.cache.region.factory_class"
|
|
||||||
value="org.hibernate.testing.cache.CachingRegionFactory"/>
|
|
||||||
<property name="hibernate.archive.autodetection" value="class"/>
|
|
||||||
</properties>
|
|
||||||
</persistence-unit>
|
|
||||||
</persistence>
|
|
|
@ -1,26 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!DOCTYPE hibernate-mapping PUBLIC
|
|
||||||
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
|
||||||
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
|
|
||||||
|
|
||||||
<hibernate-mapping
|
|
||||||
package="org.hibernate.jpa.test.pack.excludehbmpar"
|
|
||||||
>
|
|
||||||
|
|
||||||
<class name="Mouse">
|
|
||||||
|
|
||||||
<id name="id">
|
|
||||||
<generator class="native"/>
|
|
||||||
</id>
|
|
||||||
<property name="name"/>
|
|
||||||
|
|
||||||
</class>
|
|
||||||
|
|
||||||
</hibernate-mapping>
|
|
|
@ -1,23 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
|
|
||||||
version="2.0"
|
|
||||||
>
|
|
||||||
<package>org.hibernate.jpa.test.pack.various</package>
|
|
||||||
<entity class="Seat" access="PROPERTY" metadata-complete="true">
|
|
||||||
<attributes>
|
|
||||||
<id name="number">
|
|
||||||
<column name="`number`"/>
|
|
||||||
</id>
|
|
||||||
</attributes>
|
|
||||||
</entity>
|
|
||||||
</entity-mappings>
|
|
|
@ -1,55 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
|
||||||
version="2.0">
|
|
||||||
<persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL">
|
|
||||||
<jar-file>@buildDirName@/packages/externaljar.jar</jar-file>
|
|
||||||
<class>org.hibernate.jpa.test.Cat</class>
|
|
||||||
<class>org.hibernate.jpa.test.Kitten</class>
|
|
||||||
<class>org.hibernate.jpa.test.Distributor</class>
|
|
||||||
<class>org.hibernate.jpa.test.Item</class>
|
|
||||||
<exclude-unlisted-classes>true</exclude-unlisted-classes>
|
|
||||||
<properties>
|
|
||||||
<!-- custom scanner test -->
|
|
||||||
<property name="hibernate.ejb.resource_scanner" value="org.hibernate.jpa.test.packaging.CustomScanner"/>
|
|
||||||
|
|
||||||
<property name="hibernate.dialect" value="@db.dialect@"/>
|
|
||||||
<property name="hibernate.connection.driver_class" value="@jdbc.driver@"/>
|
|
||||||
<property name="hibernate.connection.username" value="@jdbc.user@"/>
|
|
||||||
<property name="hibernate.connection.password" value="@jdbc.pass@"/>
|
|
||||||
<property name="hibernate.connection.url" value="@jdbc.url@"/>
|
|
||||||
<property name="hibernate.cache.use_query_cache" value="true"/>
|
|
||||||
<property name="hibernate.cache.region_prefix" value="hibernate.test"/>
|
|
||||||
<property name="hibernate.jdbc.use_streams_for_binary" value="true"/>
|
|
||||||
<property name="hibernate.jdbc.batch_size" value="0"/>
|
|
||||||
<property name="hibernate.max_fetch_depth" value="3"/>
|
|
||||||
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
|
|
||||||
<property name="hibernate.generate_statistics" value="true"/>
|
|
||||||
<property name="hibernate.cache.region.factory_class"
|
|
||||||
value="org.hibernate.testing.cache.CachingRegionFactory"/>
|
|
||||||
<property name="hibernate.ejb.naming_strategy" value="org.hibernate.jpa.test.MyNamingStrategy"/>
|
|
||||||
<!-- test naming strategy and fall back to element content -->
|
|
||||||
<!-- property name="hibernate.ejb.naming_strategy">MyNamingStrategy</property -->
|
|
||||||
|
|
||||||
<!-- cache configuration -->
|
|
||||||
<property name="hibernate.ejb.classcache.org.hibernate.jpa.test.Item" value="read-write"/>
|
|
||||||
<property name="hibernate.ejb.collectioncache.org.hibernate.jpa.test.Item.distributors"
|
|
||||||
value="read-write, RegionName"/>
|
|
||||||
|
|
||||||
<!-- event overriding -->
|
|
||||||
<property name="hibernate.ejb.event.pre-insert" value="org.hibernate.jpa.test.NoOpListener"/>
|
|
||||||
<!-- remove JACC and validator -->
|
|
||||||
|
|
||||||
<!-- alternatively to <class> and <property> declarations, you can use a regular hibernate.cfg.xml file -->
|
|
||||||
<!-- property name="hibernate.ejb.cfgfile" value="/resource-path/to/hibernate.cfg.xml"/ -->
|
|
||||||
</properties>
|
|
||||||
</persistence-unit>
|
|
||||||
</persistence>
|
|
|
@ -1,26 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- example of a default persistence.xml -->
|
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
|
||||||
version="2.0">
|
|
||||||
<persistence-unit name="explodedpar" transaction-type="RESOURCE_LOCAL">
|
|
||||||
<properties>
|
|
||||||
<property name="hibernate.dialect" value="@db.dialect@"/>
|
|
||||||
<property name="hibernate.connection.driver_class" value="@jdbc.driver@"/>
|
|
||||||
<property name="hibernate.connection.username" value="@jdbc.user@"/>
|
|
||||||
<property name="hibernate.connection.password" value="@jdbc.pass@"/>
|
|
||||||
<property name="hibernate.connection.url" value="@jdbc.url@"/>
|
|
||||||
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
|
|
||||||
<property name="hibernate.cache.region.factory_class"
|
|
||||||
value="org.hibernate.testing.cache.CachingRegionFactory"/>
|
|
||||||
</properties>
|
|
||||||
</persistence-unit>
|
|
||||||
</persistence>
|
|
|
@ -1,20 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!DOCTYPE hibernate-mapping PUBLIC
|
|
||||||
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
|
||||||
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
|
|
||||||
|
|
||||||
<hibernate-mapping package="org.hibernate.jpa.test.pack.explodedpar">
|
|
||||||
<class name="Elephant">
|
|
||||||
<id name="id">
|
|
||||||
<generator class="native"/>
|
|
||||||
</id>
|
|
||||||
<property name="name"/>
|
|
||||||
</class>
|
|
||||||
</hibernate-mapping>
|
|
|
@ -1,21 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
|
|
||||||
version="2.0"
|
|
||||||
>
|
|
||||||
<package>org.hibernate.jpa.test.pack.various</package>
|
|
||||||
<entity class="Airplane" metadata-complete="true" access="PROPERTY">
|
|
||||||
<attributes>
|
|
||||||
<id name="serialNumber"/>
|
|
||||||
</attributes>
|
|
||||||
</entity>
|
|
||||||
</entity-mappings>
|
|
|
@ -1,22 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
|
||||||
version="2.0">
|
|
||||||
<persistence-unit name="overridenpar">
|
|
||||||
<jta-data-source>java:/unreachableDS</jta-data-source>
|
|
||||||
<properties>
|
|
||||||
<property name="hibernate.dialect" value="@db.dialect@"/>
|
|
||||||
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
|
|
||||||
<property name="hibernate.cache.region.factory_class"
|
|
||||||
value="org.hibernate.testing.cache.CachingRegionFactory"/>
|
|
||||||
</properties>
|
|
||||||
</persistence-unit>
|
|
||||||
</persistence>
|
|
|
@ -1,10 +0,0 @@
|
||||||
#
|
|
||||||
# Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
#
|
|
||||||
# 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>.
|
|
||||||
#
|
|
||||||
hibernate.connection.driver_class @jdbc.driver@
|
|
||||||
hibernate.connection.url @jdbc.url@
|
|
||||||
hibernate.connection.username @jdbc.user@
|
|
||||||
hibernate.connection.password @jdbc.pass@
|
|
|
@ -1,26 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- example of a default persistence.xml -->
|
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
|
||||||
version="2.0">
|
|
||||||
<persistence-unit name="space par">
|
|
||||||
<properties>
|
|
||||||
<property name="hibernate.dialect" value="@db.dialect@"/>
|
|
||||||
<property name="hibernate.connection.driver_class" value="@jdbc.driver@"/>
|
|
||||||
<property name="hibernate.connection.username" value="@jdbc.user@"/>
|
|
||||||
<property name="hibernate.connection.password" value="@jdbc.pass@"/>
|
|
||||||
<property name="hibernate.connection.url" value="@jdbc.url@"/>
|
|
||||||
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
|
|
||||||
<property name="hibernate.cache.region.factory_class"
|
|
||||||
value="org.hibernate.testing.cache.CachingRegionFactory"/>
|
|
||||||
</properties>
|
|
||||||
</persistence-unit>
|
|
||||||
</persistence>
|
|
|
@ -1,43 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
|
|
||||||
version="2.0"
|
|
||||||
>
|
|
||||||
<persistence-unit-metadata>
|
|
||||||
<persistence-unit-defaults>
|
|
||||||
<entity-listeners>
|
|
||||||
<entity-listener class="org.hibernate.jpa.test.pack.defaultpar.IncrementListener">
|
|
||||||
<pre-persist method-name="increment"/>
|
|
||||||
</entity-listener>
|
|
||||||
</entity-listeners>
|
|
||||||
|
|
||||||
</persistence-unit-defaults>
|
|
||||||
</persistence-unit-metadata>
|
|
||||||
<package>org.hibernate.jpa.test.pack.defaultpar</package>
|
|
||||||
<entity class="Lighter" access="FIELD" metadata-complete="true">
|
|
||||||
<attributes>
|
|
||||||
<id name="name">
|
|
||||||
<column name="fld_id"/>
|
|
||||||
</id>
|
|
||||||
|
|
||||||
<basic name="power"></basic>
|
|
||||||
</attributes>
|
|
||||||
</entity>
|
|
||||||
<entity class="ApplicationServer">
|
|
||||||
<entity-listeners>
|
|
||||||
<entity-listener class="OtherIncrementListener">
|
|
||||||
<pre-persist method-name="increment"/>
|
|
||||||
</entity-listener>
|
|
||||||
</entity-listeners>
|
|
||||||
|
|
||||||
</entity>
|
|
||||||
</entity-mappings>
|
|
|
@ -1,28 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- example of a default persistence.xml -->
|
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
|
||||||
version="2.0">
|
|
||||||
<persistence-unit name="defaultpar">
|
|
||||||
<class>org.hibernate.jpa.test.pack.defaultpar.Lighter</class>
|
|
||||||
<properties>
|
|
||||||
<property name="hibernate.dialect" value="@db.dialect@"/>
|
|
||||||
<property name="hibernate.connection.driver_class" value="@jdbc.driver@"/>
|
|
||||||
<property name="hibernate.connection.username" value="@jdbc.user@"/>
|
|
||||||
<property name="hibernate.connection.password" value="@jdbc.pass@"/>
|
|
||||||
<property name="hibernate.connection.url" value="@jdbc.url@"/>
|
|
||||||
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
|
|
||||||
<property name="hibernate.cache.region.factory_class"
|
|
||||||
value="org.hibernate.testing.cache.CachingRegionFactory"/>
|
|
||||||
</properties>
|
|
||||||
</persistence-unit>
|
|
||||||
</persistence>
|
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ 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>.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!DOCTYPE hibernate-mapping PUBLIC
|
|
||||||
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
|
||||||
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
|
|
||||||
|
|
||||||
<hibernate-mapping package="org.hibernate.jpa.test.pack.war">
|
|
||||||
|
|
||||||
<class name="Mouse">
|
|
||||||
<id name="id">
|
|
||||||
<generator class="native"/>
|
|
||||||
</id>
|
|
||||||
<property name="name"/>
|
|
||||||
|
|
||||||
</class>
|
|
||||||
|
|
||||||
</hibernate-mapping>
|
|
||||||
|
|
|
@ -1,180 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.GregorianCalendar;
|
|
||||||
import java.util.List;
|
|
||||||
import javax.persistence.Basic;
|
|
||||||
import javax.persistence.CascadeType;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.EntityListeners;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
import javax.persistence.OneToMany;
|
|
||||||
import javax.persistence.PostLoad;
|
|
||||||
import javax.persistence.PostPersist;
|
|
||||||
import javax.persistence.PostUpdate;
|
|
||||||
import javax.persistence.Temporal;
|
|
||||||
import javax.persistence.TemporalType;
|
|
||||||
import javax.persistence.Transient;
|
|
||||||
|
|
||||||
import org.jboss.logging.Logger;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@SuppressWarnings({"unchecked", "serial"})
|
|
||||||
@Entity
|
|
||||||
@EntityListeners(LastUpdateListener.class)
|
|
||||||
public class Cat implements Serializable {
|
|
||||||
private static final Logger log = Logger.getLogger( Cat.class );
|
|
||||||
|
|
||||||
private static final List ids = new ArrayList(); // used for assertions
|
|
||||||
public static int postVersion = 0; // used for assertions
|
|
||||||
|
|
||||||
private Integer id;
|
|
||||||
private String name;
|
|
||||||
private Date dateOfBirth;
|
|
||||||
private int age;
|
|
||||||
private long length;
|
|
||||||
private Date lastUpdate;
|
|
||||||
private int manualVersion = 0;
|
|
||||||
private List<Kitten> kittens;
|
|
||||||
|
|
||||||
public static synchronized List getIdList() {
|
|
||||||
return Collections.unmodifiableList( ids );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Integer id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getDateOfBirth() {
|
|
||||||
return dateOfBirth;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDateOfBirth(Date dateOfBirth) {
|
|
||||||
this.dateOfBirth = dateOfBirth;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getManualVersion() {
|
|
||||||
return manualVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setManualVersion(int manualVersion) {
|
|
||||||
this.manualVersion = manualVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transient
|
|
||||||
public int getAge() {
|
|
||||||
return age;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAge(int age) {
|
|
||||||
this.age = age;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Basic
|
|
||||||
@Temporal(TemporalType.TIMESTAMP)
|
|
||||||
public Date getLastUpdate() {
|
|
||||||
return lastUpdate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLastUpdate(Date lastUpdate) {
|
|
||||||
this.lastUpdate = lastUpdate;
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostUpdate
|
|
||||||
private void someLateUpdateWorking() {
|
|
||||||
log.debug( "PostUpdate for: " + this.toString() );
|
|
||||||
postVersion++;
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostLoad
|
|
||||||
public void calculateAge() {
|
|
||||||
Calendar birth = new GregorianCalendar();
|
|
||||||
birth.setTime( dateOfBirth );
|
|
||||||
Calendar now = new GregorianCalendar();
|
|
||||||
now.setTime( new Date() );
|
|
||||||
int adjust = 0;
|
|
||||||
if ( now.get( Calendar.DAY_OF_YEAR ) - birth.get( Calendar.DAY_OF_YEAR ) < 0 ) {
|
|
||||||
adjust = -1;
|
|
||||||
}
|
|
||||||
age = now.get( Calendar.YEAR ) - birth.get( Calendar.YEAR ) + adjust;
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostPersist
|
|
||||||
public synchronized void addIdsToList() {
|
|
||||||
ids.add( getId() );
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getLength() {
|
|
||||||
return length;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLength(long length) {
|
|
||||||
this.length = length;
|
|
||||||
}
|
|
||||||
|
|
||||||
@OneToMany(cascade = CascadeType.ALL)
|
|
||||||
public List<Kitten> getKittens() {
|
|
||||||
return kittens;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setKittens(List<Kitten> kittens) {
|
|
||||||
this.kittens = kittens;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a <code>String</code> with all attributes
|
|
||||||
* in name = value format.
|
|
||||||
*
|
|
||||||
* @return a <code>String</code> representation
|
|
||||||
* of this object.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
final String TAB = " ";
|
|
||||||
|
|
||||||
String retValue = "";
|
|
||||||
|
|
||||||
retValue = "Cat ( "
|
|
||||||
+ super.toString() + TAB
|
|
||||||
+ "id = " + this.id + TAB
|
|
||||||
+ "name = " + this.name + TAB
|
|
||||||
+ "dateOfBirth = " + this.dateOfBirth + TAB
|
|
||||||
+ "age = " + this.age + TAB
|
|
||||||
+ "length = " + this.length + TAB
|
|
||||||
+ "lastUpdate = " + this.lastUpdate + TAB
|
|
||||||
+ "manualVersion = " + this.manualVersion + TAB
|
|
||||||
+ "postVersion = " + Cat.postVersion + TAB
|
|
||||||
+ "kittens = " + this.kittens + TAB
|
|
||||||
+ " )";
|
|
||||||
|
|
||||||
return retValue;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,61 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
public class Distributor implements Serializable {
|
|
||||||
private Integer id;
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Integer id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if ( this == o ) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if ( !( o instanceof Distributor ) ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Distributor distributor = (Distributor) o;
|
|
||||||
|
|
||||||
if ( !name.equals( distributor.name ) ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int hashCode() {
|
|
||||||
return name.hashCode();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,115 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import javax.persistence.Column;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.EntityResult;
|
|
||||||
import javax.persistence.FieldResult;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
import javax.persistence.LockModeType;
|
|
||||||
import javax.persistence.NamedNativeQueries;
|
|
||||||
import javax.persistence.NamedNativeQuery;
|
|
||||||
import javax.persistence.NamedQueries;
|
|
||||||
import javax.persistence.NamedQuery;
|
|
||||||
import javax.persistence.OneToMany;
|
|
||||||
import javax.persistence.QueryHint;
|
|
||||||
import javax.persistence.SqlResultSetMapping;
|
|
||||||
|
|
||||||
import org.hibernate.annotations.QueryHints;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Gavin King
|
|
||||||
*/
|
|
||||||
@Entity(name = "Item")
|
|
||||||
@SqlResultSetMapping(name = "getItem", entities =
|
|
||||||
@EntityResult(entityClass = Item.class, fields = {
|
|
||||||
@FieldResult(name = "name", column = "itemname"),
|
|
||||||
@FieldResult(name = "descr", column = "itemdescription")
|
|
||||||
})
|
|
||||||
)
|
|
||||||
@NamedNativeQueries({
|
|
||||||
@NamedNativeQuery(
|
|
||||||
name = "nativeItem1",
|
|
||||||
query = "select name as itemname, descr as itemdescription from Item",
|
|
||||||
resultSetMapping = "getItem"
|
|
||||||
),
|
|
||||||
@NamedNativeQuery(
|
|
||||||
name = "nativeItem2",
|
|
||||||
query = "select * from Item",
|
|
||||||
resultClass = Item.class
|
|
||||||
)
|
|
||||||
})
|
|
||||||
@NamedQueries({
|
|
||||||
@NamedQuery(
|
|
||||||
name = "itemJpaQueryWithLockModeAndHints",
|
|
||||||
query = "select i from Item i",
|
|
||||||
lockMode = LockModeType.PESSIMISTIC_WRITE,
|
|
||||||
hints = {
|
|
||||||
@QueryHint(name = QueryHints.TIMEOUT_JPA, value = "3000"),
|
|
||||||
@QueryHint(name = QueryHints.CACHE_MODE, value = "ignore"),
|
|
||||||
@QueryHint(name = QueryHints.CACHEABLE, value = "true"),
|
|
||||||
@QueryHint(name = QueryHints.READ_ONLY, value = "true"),
|
|
||||||
@QueryHint(name = QueryHints.COMMENT, value = "custom static comment"),
|
|
||||||
@QueryHint(name = QueryHints.FETCH_SIZE, value = "512"),
|
|
||||||
@QueryHint(name = QueryHints.FLUSH_MODE, value = "manual")
|
|
||||||
}
|
|
||||||
),
|
|
||||||
@NamedQuery(name = "query-construct", query = "select new Item(i.name,i.descr) from Item i")
|
|
||||||
})
|
|
||||||
public class Item implements Serializable {
|
|
||||||
|
|
||||||
private String name;
|
|
||||||
private String descr;
|
|
||||||
private Set<Distributor> distributors = new HashSet<Distributor>();
|
|
||||||
|
|
||||||
public Item() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public Item(String name, String desc) {
|
|
||||||
this.name = name;
|
|
||||||
this.descr = desc;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Column(length = 200)
|
|
||||||
public String getDescr() {
|
|
||||||
return descr;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDescr(String desc) {
|
|
||||||
this.descr = desc;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@Column(length = 30)
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@OneToMany
|
|
||||||
public Set<Distributor> getDistributors() {
|
|
||||||
return distributors;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDistributors(Set<Distributor> distributors) {
|
|
||||||
this.distributors = distributors;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addDistributor(Distributor d) {
|
|
||||||
if ( distributors == null ) {
|
|
||||||
distributors = new HashSet();
|
|
||||||
}
|
|
||||||
distributors.add( d );
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,61 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack;
|
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Hardy Ferentschik
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("serial")
|
|
||||||
@Entity
|
|
||||||
public class Kitten {
|
|
||||||
|
|
||||||
private Integer id;
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Integer id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a <code>String</code> with all attributes
|
|
||||||
* in name = value format.
|
|
||||||
*
|
|
||||||
* @return a <code>String</code> representation
|
|
||||||
* of this object.
|
|
||||||
*/
|
|
||||||
public String toString() {
|
|
||||||
final String TAB = " ";
|
|
||||||
|
|
||||||
String retValue = "";
|
|
||||||
|
|
||||||
retValue = "Kitten ( "
|
|
||||||
+ super.toString() + TAB
|
|
||||||
+ "id = " + this.id + TAB
|
|
||||||
+ "name = " + this.name + TAB
|
|
||||||
+ " )";
|
|
||||||
|
|
||||||
return retValue;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import javax.persistence.PrePersist;
|
|
||||||
import javax.persistence.PreUpdate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
public class LastUpdateListener {
|
|
||||||
@PreUpdate
|
|
||||||
@PrePersist
|
|
||||||
public void setLastUpdate(Cat o) {
|
|
||||||
o.setLastUpdate( new Date() );
|
|
||||||
o.setManualVersion( o.getManualVersion() + 1 );
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.cfgxmlpar;
|
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
public class Morito {
|
|
||||||
private Integer id;
|
|
||||||
private String power;
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Integer id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPower() {
|
|
||||||
return power;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPower(String power) {
|
|
||||||
this.power = power;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,47 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.defaultpar;
|
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
public class ApplicationServer {
|
|
||||||
private Integer id;
|
|
||||||
private String name;
|
|
||||||
private Version version;
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Integer id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Version getVersion() {
|
|
||||||
return version;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVersion(Version version) {
|
|
||||||
this.version = version;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.defaultpar;
|
|
||||||
|
|
||||||
import javax.persistence.PrePersist;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
public class IncrementListener {
|
|
||||||
private static int increment;
|
|
||||||
|
|
||||||
public static int getIncrement() {
|
|
||||||
return increment;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void reset() {
|
|
||||||
increment = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@PrePersist
|
|
||||||
public void increment(Object entity) {
|
|
||||||
increment++;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.defaultpar;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
public class Lighter {
|
|
||||||
public String name;
|
|
||||||
public String power;
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.defaultpar;
|
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
public class Money {
|
|
||||||
private Integer id;
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Integer id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.defaultpar;
|
|
||||||
|
|
||||||
import javax.persistence.ExcludeDefaultListeners;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@ExcludeDefaultListeners
|
|
||||||
public class Mouse {
|
|
||||||
private Integer id;
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Integer id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.defaultpar;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
public class OtherIncrementListener {
|
|
||||||
private static int increment;
|
|
||||||
|
|
||||||
public static int getIncrement() {
|
|
||||||
return OtherIncrementListener.increment;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void reset() {
|
|
||||||
increment = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void increment(Object entity) {
|
|
||||||
OtherIncrementListener.increment++;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.defaultpar;
|
|
||||||
|
|
||||||
import javax.persistence.Embeddable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@Embeddable
|
|
||||||
public class Version {
|
|
||||||
private static final String DOT = ".";
|
|
||||||
private int major;
|
|
||||||
private int minor;
|
|
||||||
private int micro;
|
|
||||||
|
|
||||||
public int getMajor() {
|
|
||||||
return major;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMajor(int major) {
|
|
||||||
this.major = major;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMinor() {
|
|
||||||
return minor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMinor(int minor) {
|
|
||||||
this.minor = minor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMicro() {
|
|
||||||
return micro;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMicro(int micro) {
|
|
||||||
this.micro = micro;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString() {
|
|
||||||
return new StringBuffer( major ).append( DOT ).append( minor ).append( DOT ).append( micro ).toString();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
@NamedQuery(name = "allMouse",
|
|
||||||
query = "select m from ApplicationServer m")
|
|
||||||
package org.hibernate.jpa.test.pack.defaultpar;
|
|
||||||
|
|
||||||
import org.hibernate.annotations.NamedQuery;
|
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.excludehbmpar;
|
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
public class Caipirinha {
|
|
||||||
private Integer id;
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
public Caipirinha() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public Caipirinha(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Integer id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.explicitpar;
|
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
public class Washer {
|
|
||||||
//No @id so picking it up should fail
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.explodedpar;
|
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
public class Carpet {
|
|
||||||
private Integer id;
|
|
||||||
private String country;
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Integer id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCountry() {
|
|
||||||
return country;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCountry(String country) {
|
|
||||||
this.country = country;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.explodedpar;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
public class Elephant {
|
|
||||||
private Integer id;
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Integer id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
@NamedQuery(name = "allCarpet", query = "select c from Carpet c")
|
|
||||||
package org.hibernate.jpa.test.pack.explodedpar;
|
|
||||||
|
|
||||||
import org.hibernate.annotations.NamedQuery;
|
|
|
@ -1,36 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.externaljar;
|
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
public class Scooter {
|
|
||||||
private String model;
|
|
||||||
private Long speed;
|
|
||||||
|
|
||||||
@Id
|
|
||||||
public String getModel() {
|
|
||||||
return model;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setModel(String model) {
|
|
||||||
this.model = model;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getSpeed() {
|
|
||||||
return speed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSpeed(Long speed) {
|
|
||||||
this.speed = speed;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.overridenpar;
|
|
||||||
|
|
||||||
import javax.persistence.Column;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
public class Bug {
|
|
||||||
@Id
|
|
||||||
@GeneratedValue
|
|
||||||
private Long id;
|
|
||||||
private String subject;
|
|
||||||
@Column(name = "`comment`")
|
|
||||||
private String comment;
|
|
||||||
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSubject() {
|
|
||||||
return subject;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSubject(String subject) {
|
|
||||||
this.subject = subject;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getComment() {
|
|
||||||
return comment;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setComment(String comment) {
|
|
||||||
this.comment = comment;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.spacepar;
|
|
||||||
|
|
||||||
import javax.persistence.Column;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
public class Bug {
|
|
||||||
@Id
|
|
||||||
@GeneratedValue
|
|
||||||
private Long id;
|
|
||||||
private String subject;
|
|
||||||
@Column(name = "`comment`")
|
|
||||||
private String comment;
|
|
||||||
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSubject() {
|
|
||||||
return subject;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSubject(String subject) {
|
|
||||||
this.subject = subject;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getComment() {
|
|
||||||
return comment;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setComment(String comment) {
|
|
||||||
this.comment = comment;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.various;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
public class Airplane {
|
|
||||||
private String serialNumber;
|
|
||||||
|
|
||||||
public String getSerialNumber() {
|
|
||||||
return serialNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSerialNumber(String serialNumber) {
|
|
||||||
this.serialNumber = serialNumber;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.various;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
public class Seat {
|
|
||||||
private String number;
|
|
||||||
|
|
||||||
public String getNumber() {
|
|
||||||
return number;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNumber(String number) {
|
|
||||||
this.number = number;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,47 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.war;
|
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
public class ApplicationServer {
|
|
||||||
private Integer id;
|
|
||||||
private String name;
|
|
||||||
private Version version;
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Integer id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Version getVersion() {
|
|
||||||
return version;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVersion(Version version) {
|
|
||||||
this.version = version;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.war;
|
|
||||||
|
|
||||||
import javax.persistence.PrePersist;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
public class IncrementListener {
|
|
||||||
private static int increment;
|
|
||||||
|
|
||||||
public static int getIncrement() {
|
|
||||||
return increment;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void reset() {
|
|
||||||
increment = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@PrePersist
|
|
||||||
public void increment(Object entity) {
|
|
||||||
increment++;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.war;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
public class Lighter {
|
|
||||||
public String name;
|
|
||||||
public String power;
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.war;
|
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
public class Money {
|
|
||||||
private Integer id;
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Integer id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.war;
|
|
||||||
|
|
||||||
import javax.persistence.ExcludeDefaultListeners;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@ExcludeDefaultListeners
|
|
||||||
public class Mouse {
|
|
||||||
private Integer id;
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
public Integer getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Integer id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.war;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
public class OtherIncrementListener {
|
|
||||||
private static int increment;
|
|
||||||
|
|
||||||
public static int getIncrement() {
|
|
||||||
return OtherIncrementListener.increment;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void reset() {
|
|
||||||
increment = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void increment(Object entity) {
|
|
||||||
OtherIncrementListener.increment++;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jpa.test.pack.war;
|
|
||||||
|
|
||||||
import javax.persistence.Embeddable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
@Embeddable
|
|
||||||
public class Version {
|
|
||||||
private static final String DOT = ".";
|
|
||||||
private int major;
|
|
||||||
private int minor;
|
|
||||||
private int micro;
|
|
||||||
|
|
||||||
public int getMajor() {
|
|
||||||
return major;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMajor(int major) {
|
|
||||||
this.major = major;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMinor() {
|
|
||||||
return minor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMinor(int minor) {
|
|
||||||
this.minor = minor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMicro() {
|
|
||||||
return micro;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMicro(int micro) {
|
|
||||||
this.micro = micro;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString() {
|
|
||||||
return new StringBuffer( major ).append( DOT ).append( minor ).append( DOT ).append( micro ).toString();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
@NamedQuery(name = "allMouse",
|
|
||||||
query = "select m from ApplicationServer m")
|
|
||||||
package org.hibernate.jpa.test.pack.war;
|
|
||||||
|
|
||||||
import org.hibernate.annotations.NamedQuery;
|
|
|
@ -1,173 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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.jboss.as.jpa.hibernate5.scan;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.fail;
|
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.net.URLClassLoader;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
|
||||||
|
|
||||||
import org.hibernate.boot.archive.internal.ArchiveHelper;
|
|
||||||
import org.jboss.shrinkwrap.api.ArchivePath;
|
|
||||||
import org.jboss.shrinkwrap.api.ArchivePaths;
|
|
||||||
import org.jboss.shrinkwrap.api.ShrinkWrap;
|
|
||||||
import org.jboss.shrinkwrap.api.exporter.ZipExporter;
|
|
||||||
import org.jboss.shrinkwrap.api.spec.JavaArchive;
|
|
||||||
import org.jboss.vfs.TempFileProvider;
|
|
||||||
import org.junit.After;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Steve Ebersole
|
|
||||||
*/
|
|
||||||
public class ScannerTests {
|
|
||||||
protected static ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
|
|
||||||
protected static ClassLoader bundleClassLoader;
|
|
||||||
|
|
||||||
protected static TempFileProvider tempFileProvider;
|
|
||||||
|
|
||||||
protected static File testSrcDirectory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Directory where shrink-wrap built archives are written
|
|
||||||
*/
|
|
||||||
protected static File shrinkwrapArchiveDirectory;
|
|
||||||
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
tempFileProvider = TempFileProvider.create( "test", new ScheduledThreadPoolExecutor( 2 ) );
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
throw new RuntimeException( e );
|
|
||||||
}
|
|
||||||
|
|
||||||
// we make an assumption here that the directory which holds compiled classes (nested) also holds
|
|
||||||
// sources. We therefore look for our module directory name, and use that to locate bundles
|
|
||||||
final URL scannerTestsClassFileUrl = originalClassLoader.getResource(
|
|
||||||
ScannerTests.class.getName().replace( '.', '/' ) + ".class"
|
|
||||||
);
|
|
||||||
if ( scannerTestsClassFileUrl == null ) {
|
|
||||||
// blow up
|
|
||||||
fail( "Could not find ScannerTests class file url" );
|
|
||||||
}
|
|
||||||
|
|
||||||
// look for the module name in that url
|
|
||||||
final int position = scannerTestsClassFileUrl.getFile().lastIndexOf( "/hibernate5/" );
|
|
||||||
|
|
||||||
if ( position == -1 ) {
|
|
||||||
fail( "Unable to setup packaging test" );
|
|
||||||
}
|
|
||||||
|
|
||||||
final String moduleDirectoryPath = scannerTestsClassFileUrl.getFile().substring(
|
|
||||||
0,
|
|
||||||
position + "/hibernate5".length()
|
|
||||||
);
|
|
||||||
final File moduleDirectory = new File( moduleDirectoryPath );
|
|
||||||
|
|
||||||
testSrcDirectory = new File( new File( moduleDirectory, "src" ), "test" );
|
|
||||||
final File bundlesDirectory = new File( testSrcDirectory, "bundles" );
|
|
||||||
try {
|
|
||||||
bundleClassLoader = new URLClassLoader( new URL[] {bundlesDirectory.toURL()}, originalClassLoader );
|
|
||||||
}
|
|
||||||
catch (MalformedURLException e) {
|
|
||||||
fail( "Unable to build custom class loader" );
|
|
||||||
}
|
|
||||||
|
|
||||||
shrinkwrapArchiveDirectory = new File( moduleDirectory, "target/packages" );
|
|
||||||
shrinkwrapArchiveDirectory.mkdirs();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void prepareTCCL() {
|
|
||||||
// add the bundle class loader in order for ShrinkWrap to build the test package
|
|
||||||
Thread.currentThread().setContextClassLoader( bundleClassLoader );
|
|
||||||
}
|
|
||||||
|
|
||||||
@After
|
|
||||||
public void resetTCCL() throws Exception {
|
|
||||||
// reset the classloader
|
|
||||||
Thread.currentThread().setContextClassLoader( originalClassLoader );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected File buildLargeJar() throws Exception {
|
|
||||||
final String fileName = "large.jar";
|
|
||||||
final JavaArchive archive = ShrinkWrap.create( JavaArchive.class, fileName );
|
|
||||||
|
|
||||||
// Build a large jar by adding a lorem ipsum file repeatedly.
|
|
||||||
final Path loremipsumTxtFile = Paths.get( ScannerTests.class.getResource(
|
|
||||||
"/org/hibernate/jpa/test/packaging/loremipsum.txt" ).toURI() );
|
|
||||||
for ( int i = 0; i < 100; i++ ) {
|
|
||||||
ArchivePath path = ArchivePaths.create( "META-INF/file" + i );
|
|
||||||
archive.addAsResource( loremipsumTxtFile.toFile(), path );
|
|
||||||
}
|
|
||||||
|
|
||||||
File testPackage = new File( shrinkwrapArchiveDirectory, fileName );
|
|
||||||
archive.as( ZipExporter.class ).exportTo( testPackage, true );
|
|
||||||
return testPackage;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testGetBytesFromInputStream() throws Exception {
|
|
||||||
File file = buildLargeJar();
|
|
||||||
|
|
||||||
InputStream stream = new BufferedInputStream(
|
|
||||||
new FileInputStream( file ) );
|
|
||||||
int oldLength = getBytesFromInputStream( stream ).length;
|
|
||||||
stream.close();
|
|
||||||
|
|
||||||
stream = new BufferedInputStream( new FileInputStream( file ) );
|
|
||||||
int newLength = ArchiveHelper.getBytesFromInputStream( stream ).length;
|
|
||||||
stream.close();
|
|
||||||
|
|
||||||
assertEquals( oldLength, newLength );
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is the old getBytesFromInputStream from JarVisitorFactory before
|
|
||||||
// it was changed by HHH-7835. Use it as a regression test.
|
|
||||||
private byte[] getBytesFromInputStream(InputStream inputStream) throws IOException {
|
|
||||||
int size;
|
|
||||||
|
|
||||||
byte[] entryBytes = new byte[0];
|
|
||||||
for ( ; ; ) {
|
|
||||||
byte[] tmpByte = new byte[4096];
|
|
||||||
size = inputStream.read( tmpByte );
|
|
||||||
if ( size == -1 ) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
byte[] current = new byte[entryBytes.length + size];
|
|
||||||
System.arraycopy( entryBytes, 0, current, 0, entryBytes.length );
|
|
||||||
System.arraycopy( tmpByte, 0, current, entryBytes.length, size );
|
|
||||||
entryBytes = current;
|
|
||||||
}
|
|
||||||
return entryBytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testGetBytesFromZeroInputStream() throws Exception {
|
|
||||||
// Ensure that JarVisitorFactory#getBytesFromInputStream
|
|
||||||
// can handle 0 length streams gracefully.
|
|
||||||
URL emptyTxtUrl = getClass().getResource( "/org/hibernate/jpa/test/packaging/empty.txt" );
|
|
||||||
if ( emptyTxtUrl == null ) {
|
|
||||||
throw new RuntimeException( "Bah!" );
|
|
||||||
}
|
|
||||||
InputStream emptyStream = new BufferedInputStream( emptyTxtUrl.openStream() );
|
|
||||||
int length = ArchiveHelper.getBytesFromInputStream( emptyStream ).length;
|
|
||||||
assertEquals( length, 0 );
|
|
||||||
emptyStream.close();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,201 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi massa dui, venenatis ac semper sed, pellentesque eget mi. Maecenas a neque purus, sed vehicula justo. Donec sit amet elit eget nunc porta aliquet vel et libero. Cras ut sem sem. In porta, quam sit amet fringilla molestie, mi turpis molestie dui, vulputate ullamcorper sem nunc in justo. Sed tempor lectus ac justo lobortis a dictum odio malesuada. Praesent a odio sapien. Donec ut nisl mi, ut molestie leo. In at odio nisl, vel luctus elit. Quisque vel odio ut turpis adipiscing venenatis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;
|
|
||||||
|
|
||||||
Aenean sagittis, ligula vitae semper gravida, elit justo pulvinar magna, in condimentum ipsum magna non diam. Quisque sodales, quam sed convallis scelerisque, erat metus ultricies diam, a varius nunc lectus id dolor. Duis sed magna accumsan augue ornare egestas a quis arcu. Quisque tempor ligula id ipsum mollis dapibus. Fusce vitae mi sapien. Aliquam tincidunt est quis enim lobortis sed pharetra tortor consequat. Sed congue est at tortor suscipit pellentesque. Aliquam libero purus, mattis vitae porttitor ac, ullamcorper in tellus.
|
|
||||||
|
|
||||||
Etiam vitae elit sit amet dolor aliquet volutpat. Pellentesque condimentum quam non mauris mollis rhoncus. Fusce sed ante nisl, et elementum sapien. Morbi blandit est vitae mi viverra malesuada. Integer at pharetra neque. Aliquam vitae diam tellus. Nullam tincidunt laoreet placerat. Sed commodo tempor mauris, ac imperdiet mi elementum at. Aliquam erat volutpat. Etiam sem neque, dictum quis faucibus nec, convallis ut nisi. Ut a justo nulla, ac fringilla ante. Suspendisse pellentesque varius tincidunt. Vivamus non leo eu sem euismod aliquet at ut urna. Mauris auctor cursus mi, vel placerat tortor rhoncus sed. Quisque varius tortor in quam commodo in dictum tortor aliquam.
|
|
||||||
|
|
||||||
Nullam adipiscing turpis in mauris consequat eu fermentum leo varius. Donec sed elit sed sem lacinia tincidunt. Nam eleifend velit eu neque egestas luctus. Suspendisse pellentesque ultrices consectetur. Integer blandit facilisis mattis. Nunc a accumsan nisi. Phasellus urna eros, pretium eget fringilla vel, tincidunt quis leo. Morbi sem arcu, fringilla facilisis posuere sed, rhoncus et felis. Duis in tortor sed justo tempus elementum. Pellentesque tincidunt dolor aliquet tortor accumsan condimentum. Nunc volutpat, lacus a rhoncus bibendum, dolor augue consequat lorem, cursus venenatis felis ante vitae turpis. Maecenas nec nunc sit amet nunc tempor laoreet. Praesent semper mi tincidunt quam suscipit vitae congue diam bibendum.
|
|
||||||
|
|
||||||
Proin eget leo vitae erat consectetur vulputate quis eu quam. Sed nulla velit, dignissim eu viverra quis, mattis cursus est. Vestibulum consequat, tortor ut consectetur venenatis, ipsum neque pharetra mi, et fringilla velit purus pellentesque erat. Nunc congue varius condimentum. Aliquam ornare mattis dignissim. Fusce leo nulla, tempus et sagittis vitae, sodales eget leo. Morbi lacinia, justo interdum scelerisque tristique, ante mi pulvinar mauris, at hendrerit nibh nunc ut mauris. Curabitur sit amet diam nec libero vestibulum iaculis in ac nunc. Quisque dictum sapien malesuada quam mattis facilisis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla sed velit a ipsum hendrerit pulvinar. Nam dolor ipsum, iaculis imperdiet imperdiet id, condimentum quis sapien. Vivamus nec mauris metus, non rhoncus odio. Fusce ut hendrerit nisi.
|
|
||||||
|
|
||||||
Phasellus ipsum velit, suscipit nec fringilla et, commodo in velit. Fusce eu odio mi. Curabitur a gravida libero. Vestibulum egestas rutrum ligula, eget suscipit est consequat non. Pellentesque sollicitudin pretium ante, vitae auctor velit vulputate ac. Cras sit amet purus quis est vestibulum sollicitudin. Donec faucibus nunc id velit pulvinar quis ultricies lacus accumsan. Ut vel ante risus. Morbi vel sem tortor.
|
|
||||||
|
|
||||||
Pellentesque vestibulum vestibulum urna et lacinia. Proin interdum gravida pulvinar. Aliquam erat volutpat. Vivamus vel odio lacus. Nullam quis odio nec libero mattis fermentum in non arcu. In egestas, diam vitae porta porttitor, nisi mi vulputate neque, ac tristique nisl massa vel enim. Aenean tortor nunc, accumsan ut luctus volutpat, congue non tellus.
|
|
||||||
|
|
||||||
Donec laoreet sem eu neque tincidunt viverra. Nullam nec velit at ante suscipit auctor sit amet non augue. Mauris dignissim tortor et nunc venenatis faucibus tempus purus mollis. Morbi suscipit iaculis elit ac faucibus. Pellentesque eget massa orci. Phasellus at est odio. Ut tempor justo et orci porttitor lacinia. Phasellus neque dolor, condimentum at fermentum tincidunt, porta vel eros. Maecenas eu felis nec orci rutrum porta.
|
|
||||||
|
|
||||||
Proin sollicitudin cursus bibendum. Praesent vehicula augue id arcu feugiat at semper mi cursus. Cras sodales nulla at lectus consequat feugiat. Aliquam ultrices, massa eget pretium adipiscing, erat ligula ornare nulla, sed convallis purus nunc sed libero. Aliquam enim ante, ultrices sit amet aliquam at, fringilla non nibh. Suspendisse tincidunt, massa ac facilisis porta, quam lacus aliquam neque, ut volutpat velit neque sit amet libero. Mauris nec purus eget ipsum suscipit ullamcorper a vitae mauris. Integer vitae mattis ligula. Etiam dictum dui ut eros gravida nec mollis sem elementum. In auctor varius mauris, vitae ullamcorper erat convallis et. Proin tincidunt, ligula sed ullamcorper imperdiet, urna mauris tincidunt felis, ac posuere est nisi et leo. Aenean a justo id massa egestas luctus eget eget orci. Pellentesque viverra, enim in laoreet fermentum, leo lorem fermentum nibh, ac tempor nisi enim ac ligula.
|
|
||||||
|
|
||||||
Vivamus a enim eu justo euismod convallis eget eu mi. Vestibulum non lectus tristique quam aliquet blandit et eu nibh. In orci sapien, venenatis vel malesuada vitae, tempor in magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi vel nisi nulla. Aenean pharetra feugiat congue. Quisque auctor, odio sit amet venenatis lobortis, tortor tortor hendrerit mauris, et elementum odio lorem a arcu. Morbi commodo consectetur augue quis vestibulum. Cras dictum orci et lorem cursus aliquet. In urna metus, tristique cursus convallis sit amet, condimentum sed est. Morbi dapibus ullamcorper ipsum, id scelerisque nunc scelerisque id. Ut vel justo neque, sit amet venenatis arcu. Praesent faucibus facilisis tellus, nec placerat enim viverra quis. Suspendisse potenti. Vivamus placerat sagittis sapien, ac ultricies diam fermentum at. Duis enim elit, fringilla a venenatis a, feugiat at augue.
|
|
||||||
|
|
||||||
Curabitur tortor tortor, rutrum sit amet fringilla vel, dignissim nec ligula. Nam ipsum eros, consequat eu consectetur id, sollicitudin vel dolor. Cras fringilla ornare nulla quis dictum. Nunc porttitor rutrum purus ut tempor. Sed aliquet, mauris at ultricies viverra, nisl ipsum aliquet ligula, eu pharetra orci est ac ipsum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur imperdiet luctus ultricies. Quisque rutrum scelerisque consequat. Morbi semper aliquet sapien. Sed a purus eget risus volutpat viverra nec sit amet diam. Sed dapibus, nisi in commodo tempus, libero risus feugiat diam, ac sagittis tellus odio non metus. Donec quis augue et neque laoreet suscipit sed ut dui. Mauris massa ligula, lobortis id egestas accumsan, adipiscing mattis mauris. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut eleifend est semper augue elementum tempor.
|
|
||||||
|
|
||||||
Phasellus eget lorem quis neque iaculis adipiscing sed non orci. Vivamus tincidunt auctor malesuada. Pellentesque vitae ante nisi, iaculis egestas ligula. Maecenas pellentesque orci sed arcu euismod vehicula. Nullam rutrum hendrerit est eu dapibus. Morbi scelerisque sem a turpis interdum venenatis. Proin congue sapien enim, ac convallis sem. Curabitur ornare accumsan ullamcorper. Curabitur convallis nulla at est dignissim ut scelerisque nulla ultrices. Mauris mauris urna, auctor at mattis vel, venenatis at diam. Donec fermentum varius magna, vitae suscipit velit suscipit vel. Nullam justo eros, sollicitudin a malesuada vel, ultrices nec justo. Aliquam sapien turpis, facilisis vel venenatis id, vulputate euismod tellus. Sed metus neque, facilisis quis cursus quis, convallis id elit.
|
|
||||||
|
|
||||||
Nullam a dolor erat. Vivamus id mauris in libero hendrerit mollis eget eget massa. Quisque gravida massa ut erat molestie sed pulvinar eros feugiat. Aenean id purus et purus ultricies condimentum id aliquam enim. Vivamus rhoncus nibh nec dolor blandit eleifend. Curabitur sollicitudin urna vitae mi blandit vehicula. Nunc nec leo sed nisl lobortis condimentum. Nunc ultricies ullamcorper aliquet. In sit amet erat dolor, sit amet luctus orci. Sed placerat, urna ut faucibus convallis, lorem nisl placerat nisi, eget viverra mauris arcu nec dui. Duis dictum, risus sit amet aliquet eleifend, nibh elit laoreet nulla, ac gravida justo nisl vel sem. Sed ac lacus lacus. In venenatis malesuada massa non porta. Sed tortor nibh, volutpat ut hendrerit vel, facilisis eget velit.
|
|
||||||
|
|
||||||
Sed quis erat vel massa blandit convallis at et nibh. Vivamus viverra lorem ac metus condimentum auctor. In volutpat massa nec elit sollicitudin porttitor. Praesent eu est eros. Nulla cursus risus id tellus malesuada tincidunt. Nam mattis, mi at ornare fermentum, lorem nunc eleifend lacus, ut lobortis est elit et justo. Aliquam egestas venenatis tempus. Donec a augue vel nisl sollicitudin gravida eget eu ligula. Sed id turpis nisi. Maecenas vel augue libero, sed facilisis risus. Vivamus a augue in justo feugiat auctor. Maecenas vel nisi vitae lectus lacinia tincidunt. Nam suscipit erat id elit tincidunt condimentum tincidunt est aliquam. Proin at mauris sed felis interdum aliquet sed id neque.
|
|
||||||
|
|
||||||
Nullam nisi dui, aliquam sed venenatis quis, rhoncus non orci. Integer congue pulvinar mi, id vestibulum dolor bibendum eu. Nulla eu ligula sit amet orci aliquet bibendum eu quis augue. Suspendisse potenti. Quisque hendrerit vestibulum risus ut sodales. Donec enim orci, cursus eget sodales id, mattis non tortor. Sed in velit dolor, vel pretium ligula. Ut vel auctor lacus. Duis vitae odio nec augue vestibulum bibendum at in eros. Phasellus nec dolor mauris. Quisque a felis tortor, non sollicitudin enim. Fusce ut erat pellentesque mauris malesuada bibendum quis ut lorem. Proin ut ante sit amet eros laoreet auctor in eget erat. Fusce neque tortor, eleifend in consequat vitae, scelerisque a libero. Sed eget euismod neque.
|
|
||||||
|
|
||||||
Pellentesque rutrum, orci a scelerisque porta, urna dolor rutrum eros, ac varius mauris nulla eget lorem. Etiam suscipit faucibus ipsum vitae facilisis. Integer varius ultrices nisi in porttitor. Nulla facilisi. Nam vitae accumsan urna. Aliquam vehicula, dui nec molestie lacinia, tellus sem malesuada tellus, molestie interdum magna nibh non enim. Cras ultrices, elit nec vestibulum facilisis, massa dolor luctus tortor, ut consectetur erat arcu tincidunt lorem.
|
|
||||||
|
|
||||||
Integer et nibh vel mi vulputate scelerisque vitae ac velit. Suspendisse potenti. Aliquam vestibulum facilisis felis, et semper massa rutrum et. Cras ac enim metus. Ut ultricies, mauris ac mattis hendrerit, augue metus accumsan purus, in gravida velit lectus ut sapien. Proin tristique justo et velit vestibulum vel adipiscing lorem sodales. Fusce ultricies diam sit amet dolor imperdiet sit amet vestibulum augue dictum. Integer sit amet tortor purus. Aenean sagittis eros convallis urna iaculis porttitor. Duis posuere pharetra purus eu tristique. Aenean nec dolor leo, sit amet lobortis purus. Donec tempus molestie convallis. In hac habitasse platea dictumst.
|
|
||||||
|
|
||||||
Donec sollicitudin, nisi sit amet scelerisque malesuada, ipsum tortor ullamcorper mi, porta bibendum quam augue a lorem. Nulla fermentum venenatis turpis non pretium. Vestibulum eleifend, nisi facilisis placerat ultricies, justo massa ultricies turpis, quis dapibus nunc arcu a lorem. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In hac habitasse platea dictumst. Phasellus eleifend, odio ac facilisis facilisis, nulla magna porttitor metus, id scelerisque augue magna in eros. Curabitur consequat egestas justo eget iaculis. Nulla consequat, nisi aliquet mattis faucibus, dolor lectus malesuada tortor, sit amet mollis eros sem non lorem.
|
|
||||||
|
|
||||||
Vestibulum vitae velit lectus, a luctus massa. Donec et diam purus. Aliquam erat volutpat. Fusce ut auctor quam. Phasellus iaculis, nulla sit amet pretium blandit, est turpis ultricies nunc, sit amet tempor nisi tortor luctus nibh. Nam sit amet justo leo. In pellentesque, magna sed lacinia faucibus, ipsum ipsum adipiscing ipsum, sit amet ultrices lorem massa ut massa.
|
|
||||||
|
|
||||||
Donec pulvinar lacus at metus aliquam rutrum. Pellentesque quis dignissim tortor. Maecenas ut ultricies urna. Mauris rhoncus molestie mollis. Phasellus sagittis velit sed risus tempus scelerisque. Ut id purus eget nunc placerat sodales. Praesent at vehicula enim. Vivamus molestie tincidunt dolor, id tristique est vulputate non. Proin feugiat diam sed elit tincidunt nec eleifend eros malesuada. Duis tristique leo a neque vestibulum vel mattis libero dignissim. Vestibulum placerat tristique ante eu volutpat. Etiam auctor interdum mauris, a consequat libero ullamcorper a. Mauris dignissim metus sit amet lectus vehicula quis sodales diam fermentum. Nullam non lobortis tortor.
|
|
||||||
|
|
||||||
Morbi mattis magna sed felis suscipit a porta massa sollicitudin. Integer ut magna diam, vitae posuere est. Nunc rhoncus dui et sapien dapibus a congue lectus auctor. Etiam ullamcorper enim in purus faucibus sollicitudin. Pellentesque sit amet velit et mi fermentum iaculis vel et neque. Mauris lacinia feugiat est et sollicitudin. In laoreet, magna in malesuada interdum, nisl tellus placerat massa, non dignissim nunc nisl vitae mauris. Maecenas vitae varius elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur lorem eros, sollicitudin et accumsan ac, rutrum ut nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent elit ipsum, imperdiet a lobortis nec, pulvinar vel magna.
|
|
||||||
|
|
||||||
Proin dapibus porta nisi eget ultrices. Nullam sed nisl eu odio scelerisque dignissim ut nec nibh. Nulla vitae risus dolor, interdum semper nisi. Pellentesque porttitor turpis vitae est scelerisque bibendum. Integer malesuada blandit adipiscing. Suspendisse potenti. Suspendisse at pretium velit. Ut felis nibh, pulvinar id sollicitudin non, dictum non dui. Aliquam bibendum orci vitae dui scelerisque bibendum. Etiam blandit diam eu nunc congue tristique. Proin sit amet rhoncus ante. Aliquam et magna in tellus condimentum tempor ac in orci. Sed facilisis facilisis nisl vel tincidunt. Etiam mauris augue, tincidunt at pretium nec, aliquam sed massa.
|
|
||||||
|
|
||||||
Etiam libero ligula, feugiat nec blandit in, eleifend et lacus. Nulla commodo eleifend consectetur. Cras convallis, nisl vitae volutpat elementum, neque diam pharetra orci, at varius eros justo a augue. Aenean vitae bibendum erat. Aliquam ligula tortor, aliquet a pharetra non, aliquam eu quam. Aliquam molestie lacus vel augue laoreet non porta leo faucibus. Morbi placerat, risus vel viverra luctus, metus tellus adipiscing mauris, et malesuada elit est ut tortor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla nec ultrices erat. Etiam nec sapien eros, et eleifend mauris. Nam sem ante, elementum quis scelerisque vel, elementum sed est. Phasellus scelerisque, dolor elementum consectetur luctus, massa est commodo velit, posuere fermentum sem nisl vel augue.
|
|
||||||
|
|
||||||
Aenean vel tortor ante. Quisque id turpis id ligula dignissim dictum ac eget lectus. Cras consectetur elit id diam vestibulum feugiat. Aliquam accumsan rhoncus orci, a elementum libero egestas sed. Morbi fringilla arcu non justo venenatis id elementum dolor adipiscing. Morbi porttitor, ligula eget sodales ultricies, urna neque lobortis ligula, non convallis turpis risus et sem. Maecenas feugiat lectus in mauris feugiat imperdiet. Ut justo urna, faucibus ut fermentum eu, sagittis ac nunc. Nullam at lacus at lacus molestie pharetra. Donec nunc dolor, ullamcorper sed molestie nec, tristique at neque. Vestibulum sagittis pharetra lorem, et tempus turpis accumsan nec. Morbi velit velit, auctor sed fermentum sed, pharetra a felis. Pellentesque lacus eros, molestie id mattis eu, tempus vitae felis. Mauris ac nisi a neque sagittis congue. Nullam id lectus ut tortor malesuada mollis imperdiet ut dolor.
|
|
||||||
|
|
||||||
Duis ac nunc velit, tincidunt elementum nisi. Aenean volutpat venenatis justo, malesuada rhoncus sapien cursus egestas. Morbi consectetur adipiscing nulla, eu adipiscing nibh feugiat eget. Vestibulum lacinia dignissim felis, et fermentum arcu pulvinar ac. Sed nisl nulla, fringilla id tristique vitae, elementum porttitor ante. Nunc in metus magna. Etiam gravida rutrum lectus, sit amet dignissim orci condimentum vitae. Nulla eget sem nec est ultricies luctus. Maecenas porttitor cursus lobortis. Integer imperdiet iaculis lectus, eu rutrum risus viverra quis. Nullam volutpat elementum hendrerit. Vestibulum accumsan hendrerit rutrum.
|
|
||||||
|
|
||||||
Nullam blandit pellentesque magna, id iaculis metus ultricies nec. Maecenas ipsum diam, vestibulum a gravida nec, sollicitudin vel arcu. Pellentesque nec odio in risus vulputate iaculis nec sed nunc. Quisque facilisis consequat nulla et tempus. Morbi suscipit ligula nec augue faucibus accumsan. Donec id mi arcu, eget viverra lectus. Curabitur in tellus augue, nec tristique mi. Cras elit leo, iaculis vel aliquet ac, adipiscing elementum dui. Fusce est nisl, luctus et ornare non, posuere at dui. Vivamus ligula mi, lobortis non suscipit vel, vulputate eget diam. Vestibulum tincidunt pulvinar leo, sed pellentesque leo sagittis sit amet. Nam luctus fermentum porttitor. Donec eu fringilla tellus.
|
|
||||||
|
|
||||||
Nullam velit justo, faucibus ac accumsan quis, porta ut leo. Fusce dui nunc, hendrerit eu porta sit amet, ultricies et metus. Vivamus nisl eros, tempus lacinia volutpat et, vestibulum id lorem. In vitae quam et ligula ultricies ultrices. Proin varius sagittis metus non vehicula. Integer vulputate urna quis mauris eleifend sed vulputate ipsum dapibus. Nam varius, eros at tincidunt auctor, lacus neque feugiat sem, pulvinar pharetra velit lacus sed nisi. Cras nunc urna, pellentesque ac posuere ac, feugiat molestie dolor. Quisque fermentum mi ut orci consequat posuere. In dui tortor, convallis nec sagittis quis, pretium quis leo. Nullam et sapien justo, id ultrices orci.
|
|
||||||
|
|
||||||
Mauris molestie, sapien nec laoreet fringilla, metus quam viverra nibh, quis venenatis felis sem eget sem. In at quam id libero viverra luctus. Aenean sit amet sem turpis, sit amet tincidunt tortor. Nam bibendum, ante vel vestibulum sodales, erat elit tempor mauris, ac rutrum neque elit eu nulla. Etiam aliquam, nisi lacinia cursus imperdiet, mi tellus gravida odio, eget vestibulum leo lectus et lectus. Mauris commodo quam eget odio ultricies imperdiet. Pellentesque fermentum risus quis enim tincidunt fringilla. Sed nulla massa, suscipit commodo lobortis eu, luctus sit amet lectus. Sed tellus metus, interdum mattis aliquet id, fringilla id dolor. Nam fermentum vulputate magna eget feugiat. Praesent mattis justo at mauris tempus dapibus. Nunc et risus eu felis molestie vulputate non eleifend lectus.
|
|
||||||
|
|
||||||
Pellentesque facilisis cursus justo, eu auctor nibh vestibulum sit amet. Proin vitae urna eget felis cursus luctus. Morbi justo enim, dictum ac lacinia non, blandit at eros. Donec mauris mauris, iaculis nec feugiat eu, porta eget sapien. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla eu imperdiet elit. Aenean congue imperdiet est vel tempus. Integer ipsum velit, sagittis nec feugiat a, rhoncus eget ante. Proin vehicula mattis dui non varius. Ut in risus non nunc lobortis tempor gravida eget velit.
|
|
||||||
|
|
||||||
Duis lobortis, massa a tincidunt sodales, quam dui sodales felis, id pulvinar velit augue ut massa. Mauris auctor augue consectetur sem euismod vestibulum. Curabitur vitae lacus sed quam vehicula iaculis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec in lectus felis, et dapibus magna. Nam pulvinar lectus vel lacus vehicula ornare pretium neque pretium. Duis dignissim dolor in libero egestas ultricies. Nullam vestibulum euismod tortor vitae cursus. Vestibulum volutpat, nulla id pharetra tempor, nisi nunc lobortis massa, at sollicitudin lorem lectus eget tellus. Aenean dictum ipsum eget dolor molestie ullamcorper. Sed nec nisi ut velit elementum convallis eget ut enim. Quisque tempus quam vitae nisi faucibus gravida. Etiam et nunc libero.
|
|
||||||
|
|
||||||
Fusce varius nunc eget risus blandit et fringilla massa pulvinar. Duis odio felis, tempor commodo placerat non, fringilla a est. Phasellus velit nulla, vehicula non mollis semper, sodales non turpis. Cras eu erat dui, vitae feugiat magna. Donec et augue nulla. Sed ac velit ac eros interdum commodo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
|
|
||||||
|
|
||||||
Nam pellentesque adipiscing dolor consectetur ornare. Donec libero risus, laoreet nec suscipit et, elementum sit amet risus. Praesent vitae velit at augue pellentesque posuere. Quisque eget massa libero. Pellentesque libero elit, consectetur et faucibus eu, pretium volutpat metus. Quisque leo diam, pulvinar ac eleifend sit amet, porta ac lorem. Integer non diam id lacus luctus tristique. Praesent ipsum enim, auctor vitae laoreet et, volutpat quis arcu. Nunc in augue lorem. Aenean vitae purus risus. Aenean vulputate odio sed enim fringilla eu euismod ipsum pulvinar. Nulla facilisi. Etiam leo diam, tristique ut ultrices id, feugiat semper nisl. Sed ligula justo, aliquet non suscipit non, porta elementum tortor. Quisque sed tortor nisl, nec molestie libero.
|
|
||||||
|
|
||||||
Sed pellentesque, augue nec dictum fermentum, erat dui aliquet lorem, at luctus sapien lorem sit amet eros. Sed molestie, tortor vel varius congue, libero nulla semper velit, a feugiat eros urna non urna. Quisque vestibulum fringilla lectus in lacinia. Fusce eu augue nibh, ut dapibus ligula. Suspendisse potenti. Cras porttitor risus eget justo vulputate faucibus. Phasellus sed imperdiet felis. Aenean varius, libero a vestibulum varius, velit est volutpat erat, ut accumsan enim mauris vel odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque lacinia, eros quis luctus molestie, felis nulla consequat metus, eu tincidunt elit ante et sem. Curabitur accumsan rutrum elit, id pellentesque odio sagittis ac.
|
|
||||||
|
|
||||||
Donec rutrum sem et ligula ornare vestibulum. Ut ultrices mi vel libero placerat mattis. Phasellus pretium purus a est tempor iaculis pretium risus rutrum. Sed porttitor urna bibendum dui dapibus interdum. Ut sit amet nisi at est iaculis euismod nec placerat sem. Phasellus congue pulvinar semper. Cras gravida imperdiet erat, vitae venenatis sem vestibulum quis. Nulla a lectus ut turpis aliquam commodo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce blandit velit eu lectus fermentum aliquam. Phasellus feugiat, est vel tincidunt tristique, erat libero viverra mauris, vitae mollis felis massa sed velit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Fusce leo diam, feugiat vel mattis id, tincidunt ac enim. Ut justo dui, mollis mollis vehicula eu, luctus porta purus.
|
|
||||||
|
|
||||||
Sed in odio sed nunc ultrices blandit eget ut enim. Praesent blandit, tortor vitae cursus ultrices, magna nunc congue arcu, luctus aliquet ligula est vestibulum ipsum. Sed pulvinar varius nulla, sit amet consequat erat vehicula volutpat. Ut sit amet diam a lorem posuere mattis. Maecenas vel convallis dui. Quisque ipsum tellus, condimentum eu cursus non, auctor eu turpis. Phasellus dictum, nibh non facilisis condimentum, nisl mi bibendum neque, eget elementum turpis diam vitae tortor. Suspendisse potenti. Ut varius magna in tortor laoreet ut posuere mauris fermentum.
|
|
||||||
|
|
||||||
Sed interdum mauris quis nibh eleifend elementum. Nulla vel pharetra tortor. Suspendisse ornare imperdiet mi, vitae consectetur tortor pulvinar at. Sed orci est, semper non ultricies semper, lacinia vitae justo. Pellentesque eu diam ligula. Ut ut risus est. Praesent augue neque, vestibulum rhoncus aliquet et, facilisis vitae turpis. Nullam et nibh nisl, et consequat neque. Fusce justo tortor, tempus quis cursus non, varius id nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed facilisis interdum diam ut accumsan. Proin orci diam, adipiscing vel fringilla quis, elementum ut erat. Suspendisse nisi felis, facilisis congue mattis eget, blandit sit amet mi. Fusce et dui eros.
|
|
||||||
|
|
||||||
Curabitur lobortis ligula non purus porta in tincidunt nisi imperdiet. Donec tincidunt orci quis augue volutpat at malesuada diam porttitor. Nulla facilisi. Integer non neque eu nisl dictum elementum id vel mauris. Aenean bibendum placerat viverra. Vivamus vulputate convallis nibh sed fringilla. Donec consequat, justo a auctor semper, nisl risus condimentum turpis, varius ultricies lorem neque congue nunc. Nulla volutpat orci et risus pretium ut ullamcorper nisi varius. Integer id turpis eget enim luctus placerat. Nulla massa libero, tincidunt in sagittis ut, feugiat vel metus. Aliquam vel congue massa. Vestibulum convallis nisi in arcu sodales vehicula. Phasellus quis laoreet dolor.
|
|
||||||
|
|
||||||
Morbi eu blandit enim. Nunc sit amet nisi nec erat tempus scelerisque a nec felis. Curabitur semper mauris quis libero mattis tempus. Etiam congue tortor sit amet odio egestas viverra. Donec nec risus velit. Mauris dictum velit ut erat gravida iaculis. Cras posuere pharetra egestas. Vestibulum eget adipiscing tellus. Suspendisse mattis tellus at velit commodo et faucibus sem tincidunt. In aliquam sollicitudin arcu ac sagittis. Donec sit amet velit nunc. Fusce in lacus quis turpis vulputate rutrum.
|
|
||||||
|
|
||||||
Donec ut ligula tincidunt enim commodo blandit. Maecenas iaculis lorem sit amet lacus feugiat eget gravida augue porttitor. Etiam aliquet lobortis dolor at gravida. Etiam id ante sit amet massa mollis vehicula. Integer vel felis eu metus luctus consequat id et justo. Nunc eu mi nisi. Sed laoreet risus sit amet augue vehicula rhoncus imperdiet eros suscipit. Nam auctor quam sit amet dolor tempor tempor. Donec condimentum, diam tempor semper eleifend, est mi malesuada orci, id convallis diam sem eu tellus. Aenean lacinia bibendum ornare. Suspendisse eu lacus vitae augue tincidunt volutpat.
|
|
||||||
|
|
||||||
Maecenas eu elit faucibus est cursus molestie nec in arcu. Suspendisse ut tristique tellus. Quisque lacinia condimentum nulla vitae ultrices. Duis ut ante nec mi pretium rutrum ac a tortor. Nunc sagittis, ante sit amet dapibus pellentesque, tellus enim egestas dui, eu cursus mi eros vitae mi. Vestibulum sollicitudin libero nunc. Maecenas tincidunt sollicitudin felis, accumsan pretium orci mollis in. Quisque in turpis quis libero rhoncus aliquet. In ligula nisi, hendrerit cursus adipiscing eget, fringilla varius dolor. Proin bibendum, purus vitae venenatis iaculis, neque nunc bibendum dolor, vel ultrices quam sem sed elit. Duis ornare, erat vitae tristique fringilla, mi mauris tempor neque, non lobortis metus massa sed ligula.
|
|
||||||
|
|
||||||
Morbi eu congue justo. Donec turpis dui, consequat vitae ullamcorper non, faucibus sed ipsum. Nam leo nisl, euismod non iaculis eget, porta in dolor. Sed tincidunt lectus sit amet est suscipit tempus. Ut elit est, aliquet eget elementum ut, condimentum sit amet nibh. Integer velit tortor, scelerisque vel egestas in, tincidunt sed leo. Mauris vitae mi quis ante elementum auctor at porttitor diam. Aenean et felis vitae arcu dignissim tincidunt nec eu lectus.
|
|
||||||
|
|
||||||
Donec varius convallis lectus at sodales. Fusce facilisis, nunc sed laoreet rhoncus, tortor libero interdum justo, euismod malesuada purus lorem sed lorem. Sed vitae eros consectetur nulla convallis posuere eu feugiat urna. Pellentesque nec ligula eget nulla suscipit ultrices. Suspendisse convallis neque ut erat varius a condimentum turpis dignissim. Donec eget nulla turpis. Maecenas non nisi mi, ut laoreet nisi. In nisi sapien, imperdiet et egestas id, euismod ut lorem. Pellentesque cursus mattis tempus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras malesuada lorem eget ante faucibus dapibus. Integer cursus nibh a lectus scelerisque dictum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin luctus sem sit amet leo viverra eleifend. Morbi justo urna, molestie non rutrum quis, fringilla a nisl. Aliquam sit amet iaculis nisl.
|
|
||||||
|
|
||||||
Etiam eget ultricies nisi. Donec vel nibh mi, vel congue magna. Nulla id velit vel leo pellentesque tristique a non leo. Aliquam enim magna, faucibus at posuere sit amet, sodales vitae nulla. Pellentesque blandit elit at leo fringilla dictum pellentesque tortor adipiscing. Duis quis velit turpis, quis porta nisl. Aenean a feugiat tellus.
|
|
||||||
|
|
||||||
Cras vitae orci at lorem cursus rhoncus a a mi. Sed egestas scelerisque egestas. Maecenas rhoncus posuere eros, ut egestas massa blandit non. Vivamus et lorem mauris, eget luctus turpis. Phasellus adipiscing sem eget libero pulvinar tempor lobortis ligula ullamcorper. Sed tellus sem, laoreet et elementum vitae, bibendum in massa. Integer rhoncus enim quis dolor vestibulum bibendum. Mauris at nunc placerat arcu suscipit tristique. Aliquam sed justo orci. Aliquam erat volutpat.
|
|
||||||
|
|
||||||
Morbi ipsum leo, rutrum at dictum vel, mattis sed urna. Ut molestie mauris feugiat sapien elementum pellentesque. Duis a elit enim. Integer non fermentum erat. Ut non odio augue. Maecenas ultricies dignissim orci, vel faucibus risus dapibus ac. Pellentesque imperdiet lorem sed diam rutrum eu faucibus tellus commodo. Aenean sit amet dapibus nisi. Maecenas dignissim purus eget urna iaculis nec interdum nisl euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla ultricies nulla id orci congue at vehicula dolor rutrum.
|
|
||||||
|
|
||||||
Pellentesque sollicitudin sem libero, quis dictum sapien. Mauris convallis luctus dolor vitae fringilla. Nunc tristique libero eu nisi porttitor quis tempus nisl ultricies. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce lacinia aliquam metus, eget rutrum lorem facilisis auctor. Fusce urna augue, faucibus vel malesuada eu, lobortis ac dui. Praesent fringilla, nulla et faucibus luctus, quam lectus consequat est, vitae pretium orci turpis eget ante. Nunc nulla ipsum, vestibulum sed congue quis, ornare sit amet mi. Fusce at purus at ante placerat euismod vitae in augue.
|
|
||||||
|
|
||||||
Morbi eget sapien tortor. Proin vel molestie est. Suspendisse sit amet arcu non velit blandit egestas. Quisque tincidunt ultrices purus vitae bibendum. Mauris et nibh sit amet dui convallis pharetra. Nulla laoreet ipsum et nisl ullamcorper dapibus. Fusce libero elit, viverra in facilisis et, lobortis sed erat.
|
|
||||||
|
|
||||||
Suspendisse pellentesque elit et urna interdum id vehicula ipsum tincidunt. Nullam tellus justo, lacinia eu rhoncus sit amet, congue sed quam. Sed ornare urna vel dui porttitor non varius mauris vestibulum. Suspendisse dapibus egestas feugiat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum scelerisque hendrerit dolor quis pellentesque. Donec quis tortor eget sapien egestas pharetra. Sed commodo elit interdum sapien posuere sodales eget in erat. Quisque congue lorem neque. Nam vel adipiscing lectus. Suspendisse iaculis convallis nunc, vitae porttitor metus pellentesque vel. Proin risus nisi, pellentesque ac commodo eget, varius nec lacus.
|
|
||||||
|
|
||||||
Aliquam eu eros ut ipsum vulputate volutpat. Etiam vulputate libero luctus metus tempor eget aliquet nibh congue. Cras commodo ornare facilisis. Sed quis arcu a nisl blandit pharetra. Quisque tristique eleifend commodo. Integer ultrices aliquam velit, sit amet fringilla nisl accumsan ut. Nam euismod ullamcorper tristique. Phasellus et neque felis. Donec posuere ante ac augue suscipit tempor. Pellentesque dapibus mollis dictum. Nulla facilisi.
|
|
||||||
|
|
||||||
Ut arcu sem, eleifend a aliquam in, cursus sit amet lectus. Sed congue aliquam ante nec mollis. Quisque egestas faucibus sem, a lobortis elit posuere in. Nulla eu massa enim. Pellentesque a auctor arcu. Suspendisse facilisis tellus sed lectus imperdiet vitae posuere odio bibendum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec lacinia, augue et posuere eleifend, massa turpis gravida augue, adipiscing eleifend nibh purus et nunc. Suspendisse potenti. Proin pretium varius lorem, vitae tristique ante aliquet eu. Maecenas vel nisi vitae sem rutrum viverra vel sit amet elit. Phasellus mollis tortor at tellus rutrum vel molestie justo congue. Phasellus molestie sapien leo, nec lobortis nulla.
|
|
||||||
|
|
||||||
Aliquam orci elit, hendrerit sed molestie a, luctus vitae orci. Vivamus pharetra turpis eget sapien condimentum eget vestibulum leo bibendum. In nec eros id neque commodo tempor. Aliquam erat volutpat. Nunc lobortis eleifend erat eget facilisis. Etiam molestie iaculis orci, sollicitudin laoreet orci tincidunt sit amet. Vivamus id tellus sed libero consequat vulputate ac sit amet tellus. Nulla et euismod felis. Maecenas non sapien in arcu fringilla vulputate id et dolor. Nunc arcu leo, aliquet et euismod commodo, elementum id eros. Sed tempus, augue ut malesuada molestie, eros mi egestas quam, ut tristique nisi dui eu nisl. Nullam pellentesque facilisis velit, a laoreet justo dignissim at. Morbi faucibus, diam vel dapibus varius, orci eros ultricies nunc, ac porta leo neque vulputate arcu. Vestibulum leo leo, ultrices a tincidunt sit amet, dictum at odio.
|
|
||||||
|
|
||||||
Maecenas non pellentesque lacus. Maecenas pretium erat ut nunc viverra at dapibus ipsum placerat. Cras nec diam quis lectus bibendum porttitor id ac leo. Nam congue, massa nec volutpat bibendum, dui arcu rhoncus massa, vitae suscipit magna justo ac neque. Nunc faucibus metus ornare mi tempus aliquet. Donec eu turpis tortor, ut varius ligula. Duis in porta dui. Quisque ullamcorper semper ante interdum bibendum.
|
|
||||||
|
|
||||||
Aliquam ullamcorper bibendum dolor eu commodo. Sed ultricies nisi vel justo facilisis non faucibus ligula porttitor. Duis in purus neque, non porta lacus. Phasellus pellentesque luctus lacus, sit amet aliquam nisl feugiat sed. Pellentesque eu metus quis nibh tempus tincidunt. Phasellus eu malesuada eros. Ut non sagittis nulla. Donec laoreet libero et tortor tincidunt imperdiet. Maecenas non nibh vitae elit ornare pellentesque. Suspendisse ac massa at felis condimentum venenatis. Etiam vestibulum hendrerit tincidunt. Etiam elementum mi a velit venenatis dapibus. Integer ut magna sit amet lacus adipiscing consequat eu nec tortor. Vivamus vitae velit quis erat varius scelerisque. Praesent tempor nunc quis risus vulputate porttitor pulvinar eu arcu.
|
|
||||||
|
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus adipiscing nunc in ante elementum blandit. Mauris varius nibh ac turpis rutrum auctor sollicitudin velit viverra. Donec a felis vel felis ultricies auctor fringilla vitae dui. Phasellus sollicitudin, urna eget venenatis condimentum, metus metus adipiscing odio, et aliquam lorem elit non nunc. Curabitur ipsum neque, aliquet in pretium a, laoreet accumsan est. Vestibulum luctus imperdiet justo vitae adipiscing. Maecenas consectetur, dolor et suscipit pharetra, ligula dolor scelerisque mi, imperdiet ornare orci enim sed magna. Nunc porta massa sit amet nulla dapibus consectetur quis non neque. Duis et lacus lacus. Nam ultrices neque in justo ultrices at feugiat nisi venenatis. Nunc ullamcorper gravida felis quis commodo. Vestibulum pharetra lectus ut felis lacinia condimentum. Phasellus et urna ut lectus ullamcorper ullamcorper sed a urna. Donec mi eros, tristique in ultricies eu, feugiat ut arcu.
|
|
||||||
|
|
||||||
Suspendisse sollicitudin dignissim tellus, at consectetur tellus aliquet at. Proin egestas iaculis urna, a malesuada odio imperdiet non. Fusce a varius neque. Donec volutpat, justo ac commodo aliquet, dolor dui gravida velit, at tempor lorem metus nec nunc. Suspendisse mollis, risus at blandit rutrum, diam justo blandit ante, id interdum lorem urna et ante. Nam vestibulum urna ut orci tincidunt auctor. Suspendisse potenti. Nam non laoreet neque. Integer eget magna eget quam faucibus vulputate. Donec a facilisis justo. Ut consectetur purus vel enim faucibus elementum. Donec lacinia aliquam lorem ac pharetra. Integer viverra aliquam neque, id malesuada leo euismod ut. Donec lobortis, lorem nec ornare mollis, lacus turpis tincidunt felis, sit amet placerat nisl mi nec risus.
|
|
||||||
|
|
||||||
Quisque in magna nulla. Vestibulum ullamcorper neque in mi eleifend at bibendum metus ornare. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam tincidunt risus cursus quam fringilla ornare. Quisque rutrum gravida tellus, quis suscipit metus vehicula id. Pellentesque libero nulla, aliquet ut porta at, pretium fringilla neque. Curabitur sagittis mi felis, eget dapibus felis. Nulla eros nulla, rutrum id sollicitudin vel, ornare sit amet dolor. In hac habitasse platea dictumst. Vestibulum venenatis felis porta magna bibendum in euismod lectus rutrum. Etiam ante sapien, lobortis quis venenatis feugiat, posuere a leo. Vestibulum ullamcorper nibh nec nulla imperdiet hendrerit. Etiam at lorem sit amet nunc pretium bibendum quis ut enim. In hac habitasse platea dictumst. Aenean vulputate, velit quis mattis mattis, neque justo posuere tortor, eget sollicitudin purus nunc at lacus. Phasellus egestas volutpat neque, at ultrices dui lobortis et.
|
|
||||||
|
|
||||||
Proin fringilla turpis et lectus aliquet ac tempus est sagittis. In eu felis felis. Nam dui eros, rhoncus vel aliquam quis, pharetra vitae nibh. Maecenas aliquam nibh a ante hendrerit rhoncus. Cras consectetur, lorem dictum auctor pretium, libero augue imperdiet lorem, a vulputate ante dui ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vivamus dapibus augue a nisi fringilla vitae fermentum ipsum placerat. Praesent feugiat pharetra ipsum, id hendrerit elit interdum ut. Nullam eu feugiat enim. Aenean sem magna, dictum nec posuere quis, tempor sed enim. Duis in rutrum felis.
|
|
||||||
|
|
||||||
Proin convallis cursus mattis. Suspendisse potenti. Nam vehicula egestas ligula ac lobortis. Maecenas semper gravida libero sit amet consectetur. Nam faucibus congue nulla, eu dignissim erat aliquam sit amet. Phasellus venenatis velit id quam convallis posuere. Sed sollicitudin neque ut magna laoreet sit amet porta enim tincidunt.
|
|
||||||
|
|
||||||
Phasellus leo lectus, dictum sed semper posuere, varius rhoncus metus. Quisque ipsum dui, viverra eget rutrum at, aliquam non risus. Nulla metus justo, sodales quis accumsan ac, consectetur sed mi. Etiam viverra massa eget ipsum porta ac fermentum libero semper. Nam fringilla tempor sem et auctor. Nulla facilisi. Donec et metus in nisl accumsan consequat vel aliquet diam. Fusce placerat tincidunt nulla, et dictum diam pretium sed. Phasellus nibh magna, consequat sed ornare sed, bibendum ut lectus. Integer at dolor sed dui aliquet pulvinar. Aliquam egestas pulvinar urna non sollicitudin. Maecenas eget justo quam.
|
|
||||||
|
|
||||||
Morbi quis rutrum risus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi fermentum elit sit amet metus aliquam dictum. Phasellus tincidunt convallis venenatis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In luctus sagittis mi, vitae condimentum eros elementum quis. Suspendisse potenti. Mauris cursus, sem eu malesuada pulvinar, nisl ipsum venenatis orci, non tempor tellus tortor et velit. Vestibulum consequat vestibulum porta. Donec aliquam tellus id arcu porttitor ut rhoncus arcu egestas. Donec sit amet erat risus, id aliquet elit. In arcu leo, gravida quis tempus eu, convallis sed leo. Vivamus lobortis adipiscing justo vitae gravida. Proin vitae fringilla dolor.
|
|
||||||
|
|
||||||
Curabitur mollis, quam quis bibendum iaculis, massa quam sollicitudin erat, id tempus massa libero nec augue. Vestibulum vel nisl et ante mollis eleifend. Maecenas non velit eu tortor ullamcorper hendrerit. Vestibulum mauris leo, varius eu gravida nec, tempor sed risus. Nunc posuere velit auctor dui pulvinar bibendum. Nulla non vulputate nulla. Cras a ante ut lacus porta tristique ac at mauris. Duis eu mi libero. Nullam volutpat aliquet turpis at malesuada. Maecenas laoreet ultricies ullamcorper. Nullam tempor tortor ac enim convallis sed porta mauris laoreet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque imperdiet fermentum lectus eget commodo. Proin ultrices lacus a dui pharetra sit amet laoreet ipsum malesuada. Cras pulvinar turpis sed purus molestie ornare. Duis semper tellus in dolor tristique ut placerat felis aliquet.
|
|
||||||
|
|
||||||
Donec ac magna diam, sed aliquet erat. Donec dui augue, mollis sit amet molestie in, facilisis vel erat. Nunc congue mollis dolor vel dapibus. Suspendisse ut sodales massa. Morbi in rhoncus odio. Ut vehicula enim a tellus porta vulputate. Aliquam lorem velit, tempor a egestas eu, sollicitudin at diam. Etiam facilisis ante ac felis gravida sit amet elementum turpis vestibulum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris sit amet tortor et neque scelerisque egestas. Morbi nec nunc orci, a luctus ipsum.
|
|
||||||
|
|
||||||
Phasellus in enim eu lectus condimentum semper eu in lectus. Sed ac enim nisi, et semper mauris. In pellentesque tincidunt arcu, quis malesuada urna consectetur ut. Donec consectetur imperdiet nulla ac fringilla. Aenean et nibh mi. Suspendisse volutpat auctor odio et euismod. Pellentesque congue elit ante, at tristique urna.
|
|
||||||
|
|
||||||
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum sit amet ipsum nunc, non blandit sem. Integer tempor hendrerit pretium. Vestibulum id leo a nunc tempus pellentesque. Morbi vel velit ac lectus consectetur convallis. Donec iaculis, leo ac fringilla commodo, quam turpis eleifend arcu, eu eleifend nisi purus at tellus. Sed sit amet erat ut mauris tristique consectetur quis vel enim. Proin aliquet ornare posuere. Cras quis odio erat. Vestibulum pretium commodo commodo.
|
|
||||||
|
|
||||||
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus consectetur mauris id purus venenatis non convallis diam porta. Nullam sagittis volutpat interdum. Aenean diam lacus, blandit vel semper at, varius in est. Suspendisse et magna diam, et scelerisque mauris. Donec molestie nisl ac leo vehicula sed rhoncus metus viverra. Donec a dui leo, non egestas tellus. Donec sagittis pulvinar ante, ut vehicula ante congue non. Nullam aliquet rhoncus lorem ac venenatis. In ut lectus dolor, ac imperdiet diam. Nunc pellentesque cursus ante sed pretium. Nam vulputate pellentesque nisi id rhoncus. Donec in magna tellus.
|
|
||||||
|
|
||||||
Vestibulum iaculis sem sit amet nulla auctor viverra. Proin in turpis id libero molestie tincidunt eu eu nisl. Phasellus vulputate lectus a massa malesuada sed aliquet libero egestas. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin eu turpis mauris. Duis interdum velit et erat faucibus ut faucibus est gravida. Proin interdum massa ac libero dictum vel dignissim ante vehicula. Donec ut metus in mauris fringilla porttitor vitae ut urna. Nulla sodales pellentesque interdum. Vivamus eget metus nisi. Phasellus metus diam, mattis id tristique vitae, ullamcorper dictum dolor. Ut tincidunt gravida turpis, nec ornare tortor laoreet at. Vivamus eget est sed erat pharetra porttitor non eu mauris. Mauris augue lorem, tristique sed rutrum in, bibendum faucibus odio.
|
|
||||||
|
|
||||||
Phasellus elit felis, luctus non tristique vel, hendrerit vitae ipsum. Cras aliquet, lectus at ultrices sollicitudin, odio nisl ullamcorper arcu, vel tincidunt dolor turpis id enim. Phasellus lacus dui, condimentum interdum blandit eu, gravida nec urna. Donec rhoncus fringilla diam sit amet dictum. Mauris sed sapien non velit vestibulum ultricies eu in nulla. Etiam quis euismod dui. Praesent vel dolor nisi. Fusce leo neque, interdum et feugiat varius, congue eu nisl. Cras vehicula, ipsum id vulputate scelerisque, massa tellus auctor mi, in sagittis odio mauris ac ipsum. Nunc sed velit felis. Proin vitae eros tortor, a interdum ante. Etiam condimentum libero mauris, nec dictum augue.
|
|
||||||
|
|
||||||
Phasellus sit amet dui eget nisl aliquet euismod. Nam mauris enim, volutpat pretium interdum non, sollicitudin tempor est. Suspendisse dictum consectetur lacinia. Pellentesque aliquet eleifend aliquam. Sed adipiscing libero a magna venenatis in dapibus tortor euismod. Phasellus vestibulum, ante id feugiat consectetur, tellus enim sagittis arcu, sit amet posuere nisi eros vitae turpis. Quisque in ante ligula, sed egestas nibh. Fusce rutrum, risus vitae consectetur scelerisque, velit erat dictum est, quis vestibulum diam neque et sapien. Quisque tincidunt fermentum pellentesque. Donec non turpis at eros porttitor suscipit. Duis mollis auctor libero, scelerisque volutpat dui interdum at.
|
|
||||||
|
|
||||||
Etiam vitae sapien eget leo ultrices accumsan quis sit amet est. Quisque volutpat interdum ipsum, quis porta est malesuada at. Nam risus orci, mattis id lobortis eget, vulputate ac augue. Ut quis metus nec nisi pellentesque luctus quis in nunc. Nam vitae velit eu turpis rhoncus placerat at id velit. In hac habitasse platea dictumst. Phasellus diam turpis, scelerisque vel faucibus in, laoreet nec nulla. Suspendisse justo quam, molestie in dapibus dapibus, tempus sit amet dolor. Praesent vitae gravida quam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis tristique elit ac augue sodales tristique. Ut aliquam tristique placerat. Sed purus neque, interdum et hendrerit in, feugiat a justo. Fusce id ullamcorper tellus.
|
|
||||||
|
|
||||||
Nulla ipsum mi, vulputate convallis aliquam non, fringilla vulputate velit. Curabitur ullamcorper dapibus neque, vitae congue magna tempor ac. Proin volutpat, nisi ac hendrerit consequat, augue tortor congue mi, non molestie elit ipsum vel augue. Ut vestibulum feugiat nisi, vulputate semper erat rutrum quis. Maecenas adipiscing, magna a ultrices volutpat, velit risus adipiscing purus, et condimentum orci nulla ut nisl. Aenean lorem metus, imperdiet vel eleifend sit amet, placerat vitae enim. Duis turpis dui, pulvinar ut consectetur tincidunt, tristique vitae tortor.
|
|
||||||
|
|
||||||
Donec mattis tincidunt leo, ac sodales elit vulputate sed. Etiam vel nunc at sem accumsan tincidunt. Nullam vel est sit amet arcu egestas viverra at luctus sem. Aliquam convallis, turpis vel sagittis mattis, nisl nibh ultrices quam, et dignissim leo velit quis mi. Fusce odio ligula, vehicula eget iaculis eget, sollicitudin at augue. Duis vel urna leo. Sed nec ante metus. Quisque pellentesque metus sit amet velit vulputate vel ullamcorper orci mattis. In sed nulla eget enim posuere iaculis eu vel metus. Vivamus tempus commodo dapibus. Suspendisse potenti. Pellentesque massa nulla, dictum eget ultrices vel, tempor vel velit. Integer sit amet semper lacus.
|
|
||||||
|
|
||||||
Integer vehicula tortor elit. Sed euismod venenatis tortor, nec interdum risus pretium ultrices. Nullam rhoncus lobortis metus, sodales rutrum felis tincidunt eu. Nulla ornare rhoncus imperdiet. Mauris euismod massa eget augue lobortis imperdiet quis sed tortor. Vestibulum at risus ut turpis venenatis faucibus. Nunc ultrices dignissim volutpat. Integer magna dolor, rhoncus ut ultrices ac, pharetra eu felis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur faucibus dolor non mauris placerat interdum. Morbi quis lectus nisl. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
||||||
|
|
||||||
Quisque ut erat odio. In nulla nibh, volutpat eget faucibus in, rhoncus nec tortor. Aenean at lacus odio. Integer scelerisque lobortis rutrum. Aliquam erat volutpat. Pellentesque sed eleifend purus. Ut ac vehicula risus. Cras ut sollicitudin ante. In turpis mauris, bibendum et sagittis id, sollicitudin et dui. Phasellus non magna non sem dictum posuere in id metus. Quisque sapien tellus, pellentesque nec elementum ut, luctus mattis nisl.
|
|
||||||
|
|
||||||
Maecenas sodales posuere risus, in fringilla eros adipiscing eget. Pellentesque leo metus, consequat nec interdum sed, facilisis ac lorem. Curabitur facilisis euismod consectetur. Vivamus feugiat magna ut sapien tincidunt et egestas ante pharetra. Suspendisse potenti. Nulla id dui risus, ut porta mauris. Cras aliquet purus ac leo consequat quis aliquam orci sollicitudin. Proin sapien ante, ullamcorper blandit iaculis vel, vestibulum nec eros. Sed euismod purus quis elit varius a fermentum felis cursus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut enim massa, mollis sed semper eu, lobortis et libero. Sed porttitor mattis nunc nec facilisis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus feugiat, erat et laoreet placerat, est leo malesuada justo, accumsan rhoncus lorem risus a libero. Nam posuere, magna in rhoncus auctor, justo magna euismod urna, auctor laoreet urna sem et magna.
|
|
||||||
|
|
||||||
Aliquam suscipit ligula porta felis interdum posuere. Phasellus metus turpis, vehicula vitae ornare ut, molestie et quam. Nulla ultricies gravida eros, sit amet molestie metus vulputate in. Fusce ornare quam sollicitudin dolor venenatis ut ultricies tellus luctus. Ut eget placerat est. Aliquam rhoncus venenatis lectus, quis pretium lacus accumsan ut. Proin velit turpis, imperdiet non auctor non, congue vitae lorem. Nulla sit amet dui et augue eleifend bibendum. Donec sit amet est vel enim semper consectetur. Nulla venenatis pharetra dui a consequat. Nulla vitae lacus a mauris scelerisque scelerisque sed at magna. Mauris sed turpis ac odio consectetur lobortis.
|
|
||||||
|
|
||||||
Suspendisse id enim sit amet eros pellentesque aliquam nec a nunc. Phasellus sit amet metus id felis porttitor pharetra. Nulla ligula eros, posuere id condimentum faucibus, dictum eget nulla. Pellentesque elementum porttitor lectus, id volutpat orci posuere non. In fermentum, orci non lobortis porttitor, velit erat viverra purus, sed vehicula augue purus vel justo. Nullam a orci eros. Mauris dapibus sollicitudin erat ut volutpat.
|
|
||||||
|
|
||||||
Aenean fringilla sagittis est eu cursus. Pellentesque aliquam massa nec nulla tristique ut vulputate odio convallis. Nullam lobortis, libero nec rhoncus porta, risus erat ultricies elit, et faucibus eros massa id neque. Fusce blandit laoreet arcu id vestibulum. Maecenas quam enim, malesuada nec lobortis non, laoreet nec metus. Vestibulum elementum quam in neque fermentum tempor. Aenean euismod egestas lacus. Morbi vulputate, ligula ac lobortis auctor, elit mi euismod est, id ornare libero velit sed nibh. Sed magna turpis, facilisis vitae fringilla et, ullamcorper ac nisi.
|
|
||||||
|
|
||||||
In quis lacus id nisl pulvinar vulputate. Donec nec ligula ut dui aliquam pulvinar in ac erat. Sed nec turpis sit amet mi imperdiet dapibus. Vivamus quis euismod nunc. Mauris quis sem sed nisi vulputate pharetra. Aliquam tempor odio quis dolor accumsan gravida. Donec a risus non tellus sagittis molestie id nec leo. Pellentesque commodo volutpat arcu nec pharetra. Maecenas sagittis suscipit elit et venenatis. Vivamus consequat, lorem eget vehicula pharetra, nulla mauris elementum enim, sit amet porta orci sem quis nisl. Nullam non sagittis ante. Praesent sapien ipsum, elementum sed placerat sed, pretium at ante.
|
|
||||||
|
|
||||||
Vestibulum pellentesque dapibus magna ac dictum. Sed quis mattis erat. Nam pulvinar malesuada erat dignissim facilisis. Fusce id erat a velit laoreet pulvinar. Pellentesque mollis tristique neque, ut pharetra arcu facilisis sit amet. Vivamus rhoncus hendrerit volutpat. Morbi elementum viverra velit et interdum. Sed id nunc eu arcu vehicula pulvinar. Mauris facilisis malesuada purus non accumsan. Quisque tincidunt, dolor nec commodo fermentum, neque neque consequat lacus, sed imperdiet eros massa eu diam. Nullam pellentesque blandit magna tempus bibendum.
|
|
||||||
|
|
||||||
Mauris ut ipsum id dui feugiat iaculis. Donec in justo nec felis egestas tempor. Nullam sollicitudin dapibus tristique. Quisque tortor orci, hendrerit ac vestibulum sed, aliquet sed elit. Nunc eget nisi sapien. Cras erat ipsum, tincidunt et tincidunt in, laoreet id erat. Nulla sed lorem et turpis congue pharetra sit amet vel lacus. Aliquam in eros a ipsum auctor pellentesque ut et libero. Ut facilisis, lacus eget vulputate luctus, neque dui mollis lacus, non porttitor ipsum tellus in quam. Vestibulum sodales tempus nulla, eget euismod neque dapibus laoreet. Aliquam ultrices tempor ornare. Vestibulum tempus, arcu sed rutrum condimentum, tortor urna volutpat tortor, a blandit lorem quam a lorem.
|
|
||||||
|
|
||||||
Suspendisse vitae tortor et massa hendrerit sagittis. Vivamus condimentum ligula a risus venenatis eleifend dignissim nibh auctor. Integer feugiat tellus ornare metus aliquet ac luctus mauris eleifend. Vivamus nec purus ac purus tincidunt accumsan et vel ligula. In convallis diam eu enim ultrices eu iaculis eros blandit. Suspendisse nibh arcu, sagittis id consectetur in, hendrerit nec tellus. Quisque vitae purus id nisi consequat volutpat quis eu odio. Aliquam erat volutpat. Quisque quam elit, ornare eu volutpat et, fermentum nec dui. Phasellus eleifend velit non diam congue iaculis convallis sit amet nisi. Donec sed felis urna. Quisque cursus lectus sed nibh mollis eu imperdiet risus pellentesque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean pretium ultrices mi, eget luctus nisl condimentum non. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In eu erat dolor, nec dapibus sem.
|
|
||||||
|
|
||||||
Donec ut purus a enim placerat dictum. Praesent euismod libero ac urna commodo convallis. Praesent sagittis diam vel neque feugiat fringilla pharetra nisl iaculis. Ut placerat lacinia lacus. Nunc pharetra venenatis augue, id venenatis orci tristique eget. Suspendisse et mauris dolor. Suspendisse euismod est et purus blandit faucibus. Praesent placerat gravida massa ac gravida. Nunc eu elit nunc, ac pulvinar dolor.
|
|
||||||
|
|
||||||
In adipiscing, lectus molestie commodo sodales, augue dui sagittis velit, mattis commodo ipsum sapien id tellus. Morbi pellentesque, dolor sit amet aliquam mollis, nibh nibh auctor massa, id bibendum ante tortor eget leo. Suspendisse semper blandit imperdiet. Nam semper pulvinar risus, id scelerisque velit gravida ac. Vivamus a mauris tellus. Aliquam turpis justo, eleifend id iaculis in, sollicitudin non ante. Fusce ac mauris elit, at hendrerit augue. Morbi pretium mollis felis.
|
|
||||||
|
|
||||||
Vivamus eleifend posuere lacus, vel suscipit dui molestie quis. Nunc aliquet risus et nibh placerat ut laoreet urna congue. In sit amet leo est, vitae sollicitudin dolor. Donec eget urna sit amet erat molestie tempus. Sed facilisis sem nibh. Donec consequat arcu nec turpis pharetra euismod. Aenean ac nisi diam. Aliquam gravida sodales nibh, id elementum diam gravida et. Duis aliquet ligula sed nunc aliquet varius. Integer posuere sollicitudin lacus. Quisque in odio leo, a hendrerit quam.
|
|
||||||
|
|
||||||
Morbi tellus dolor, aliquam vel tristique vitae, auctor a enim. Fusce arcu odio, fermentum in cursus a, convallis in arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer porttitor pretium nunc, vel sagittis enim pulvinar et. Aenean vel nisl sit amet erat posuere sollicitudin. Aliquam sed enim et ligula hendrerit volutpat. Duis iaculis venenatis quam nec auctor. Mauris at orci neque. Aenean a lorem nisl. Praesent quam ipsum, hendrerit vitae bibendum id, cursus nec ipsum.
|
|
||||||
|
|
||||||
Morbi vulputate justo in urna rhoncus in volutpat mauris rutrum. Integer dui arcu, elementum et viverra at, vehicula ultrices tortor. Fusce non justo vitae nulla rhoncus venenatis. Curabitur quis tincidunt mauris. Nunc vitae sapien in arcu dapibus lacinia vel eu ante. Quisque nibh ante, tristique at sagittis at, imperdiet ut massa. Etiam lacus ipsum, euismod vel fermentum ut, condimentum non nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur mauris libero, fringilla et imperdiet sit amet, volutpat non velit. Sed non purus ligula. Praesent commodo semper enim quis egestas. Nullam nec leo mi. Cras semper ornare porttitor. Ut lorem libero, sollicitudin in sollicitudin eu, dictum vel nulla. Donec et tempor elit.
|
|
||||||
|
|
||||||
Aliquam tincidunt odio sit amet ligula interdum ac gravida odio cursus. In tellus mi, pellentesque eget varius a, gravida dapibus metus. Phasellus non nulla sed diam eleifend tempor. Morbi venenatis interdum justo, nec volutpat enim hendrerit sed. Morbi tortor felis, ullamcorper et auctor quis, ullamcorper a metus. Donec posuere, sem quis luctus aliquet, lacus sapien pulvinar turpis, sit amet suscipit augue justo id arcu. Aliquam diam tellus, malesuada non porta in, ultricies quis tortor. Vestibulum malesuada molestie porta. Praesent placerat leo vel velit pretium et aliquet lorem vestibulum. Nunc id leo arcu. Mauris vel faucibus metus. Curabitur ornare, quam et imperdiet adipiscing, urna magna imperdiet mi, eget ultrices arcu diam eu nisi. Suspendisse potenti. Nunc elementum, magna scelerisque ornare rhoncus, massa erat ultrices purus, id ultrices ante ipsum in ligula.
|
|
||||||
|
|
||||||
Integer ut leo turpis, sed accumsan elit. Morbi egestas malesuada elementum. Etiam ut urna nisl. Morbi consectetur auctor dui, ornare imperdiet diam dignissim in. Cras adipiscing laoreet erat et sodales. Nunc malesuada purus sed diam sollicitudin auctor. In congue mauris sed dolor aliquam hendrerit rutrum odio scelerisque. Nam non leo mi. Pellentesque accumsan consequat porttitor. Etiam placerat accumsan rutrum. Praesent ante risus, molestie et molestie a, condimentum eu nunc. Integer pulvinar augue a justo bibendum fringilla. Nulla facilisi. Fusce vitae libero risus, quis feugiat turpis. Nulla ullamcorper convallis mauris, id suscipit nibh molestie sed. Integer sit amet nulla vitae lorem porta mattis a ut lectus.
|
|
||||||
|
|
||||||
Maecenas sodales, justo nec euismod sodales, mi turpis adipiscing neque, vel feugiat justo magna eu quam. Morbi aliquam pharetra nisi mattis auctor. Donec lorem odio, consequat a mollis porta, fringilla nec elit. Cras nulla dui, facilisis nec vestibulum non, pulvinar at enim. Phasellus in purus turpis, non mattis eros. Nunc commodo justo congue magna molestie sed fermentum erat aliquam. Pellentesque eu ipsum urna. Duis sit amet velit mi, id fermentum purus. Integer sed ligula lobortis ipsum aliquam dignissim vel ullamcorper felis.
|
|
||||||
|
|
||||||
Nulla felis nisi, molestie vel eleifend dictum, varius eget nulla. Nulla facilisi. Proin accumsan dui at nisi laoreet sed malesuada ante sodales. Aenean nec massa at nibh porttitor placerat. Donec lacinia blandit mauris a euismod. In varius aliquet varius. Mauris at massa lacus, ac bibendum sapien.
|
|
||||||
|
|
||||||
Nunc elit libero, suscipit id ultricies ac, sodales ut libero. Curabitur dignissim leo orci. Sed eget lacus ac orci vulputate luctus. Aliquam posuere, ligula nec elementum dictum, enim nibh ornare lacus, quis pretium ante elit a dui. In at dui libero, quis tincidunt dolor. Nulla sed sapien justo. Suspendisse potenti.
|
|
||||||
|
|
||||||
Praesent fermentum posuere mauris nec egestas. Sed porta pharetra fermentum. Donec imperdiet nisi ut tortor ultricies tincidunt. Fusce tellus diam, faucibus a tincidunt in, mollis at lorem. Curabitur vehicula condimentum semper. Vivamus cursus vestibulum dolor aliquet mollis. Sed ornare convallis metus, nec venenatis justo elementum eget. Nam tempor tincidunt lacus ut molestie. Quisque sit amet diam quis dolor laoreet viverra. Donec nisi leo, pharetra id dapibus ac, tempus eget massa.
|
|
||||||
|
|
||||||
Cras arcu velit, molestie id vestibulum ut, ultrices placerat elit. Nulla scelerisque luctus velit, non tempus turpis posuere at. Morbi ornare, est non pharetra placerat, neque eros adipiscing diam, non tincidunt mauris mi quis urna. Nullam aliquet lobortis faucibus. Duis sodales vehicula velit eget pharetra. Integer hendrerit, est in dictum eleifend, massa risus volutpat dolor, ut consectetur nibh nibh vel eros. Morbi non quam tellus. In hac habitasse platea dictumst. Integer nisi enim, gravida vel pharetra non, mollis id mauris.
|
|
||||||
|
|
||||||
Ut adipiscing massa nec lectus pretium vestibulum. Proin sit amet lacus vel leo ultrices ornare. Vestibulum lobortis elit quis odio scelerisque et ultrices dolor condimentum. Vestibulum tincidunt bibendum felis, a suscipit lectus sagittis a. Proin id dolor a magna vulputate blandit vitae vitae ipsum. Suspendisse quis quam nulla, ultricies interdum arcu. Suspendisse potenti. Ut a velit eget erat congue varius. Ut non ligula purus, sed tincidunt urna.
|
|
||||||
|
|
||||||
Aenean turpis purus, bibendum placerat aliquam at, pretium eget nisi. Proin dui metus, blandit nec placerat eu, luctus ac enim. Proin nibh turpis, consectetur id lacinia sit amet, cursus eu neque. Curabitur commodo vulputate justo, vel sodales sapien mattis non. Nam et diam est. Nulla quam lorem, porttitor fermentum luctus in, vestibulum in justo. Nulla et mi id diam scelerisque sodales. In iaculis luctus urna, in accumsan augue eleifend vulputate.
|
|
||||||
|
|
||||||
Pellentesque accumsan sem nec sapien consectetur id eleifend risus pharetra. Sed eu libero a mi imperdiet blandit. Nam pretium pharetra odio vitae interdum. Etiam auctor, massa id feugiat congue, ante diam laoreet diam, porta suscipit diam lacus eget nisl. Integer arcu justo, bibendum eu vehicula vel, ullamcorper vitae ligula. Proin et leo vitae sem luctus placerat vel sit amet justo. Suspendisse nec pretium libero. Donec tempus, augue ac porta faucibus, magna mi luctus sapien, vitae dignissim tortor lacus at ipsum. Donec eleifend, mauris at gravida condimentum, mauris sapien consequat lorem, a feugiat risus quam at purus. Nullam sed magna id velit imperdiet luctus. Aenean eu neque sit amet dolor pulvinar placerat. Aenean a ligula metus. Curabitur id arcu massa. Phasellus tortor sem, ornare sed tincidunt quis, varius eu orci. Sed luctus consequat leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
|
|
||||||
|
|
||||||
Mauris eu magna libero. Pellentesque adipiscing mi eu augue vestibulum tristique. Donec at augue in erat viverra cursus non tristique ligula. Suspendisse vulputate sollicitudin lectus, eu faucibus risus hendrerit eu. Aenean ut tortor quis ipsum euismod accumsan. Pellentesque commodo pellentesque laoreet. Integer cursus, magna eu placerat pellentesque, risus enim sodales risus, quis ornare orci nisl quis orci.
|
|
||||||
|
|
||||||
Nunc elementum lectus nec nibh iaculis sagittis. Praesent sodales justo sit amet risus lacinia ac varius sapien sodales. Praesent mollis quam diam, a molestie risus. Phasellus ac varius urna. Duis lobortis commodo nisi, eu dignissim nulla rutrum quis. Sed quis elit lacus. Vivamus ullamcorper commodo justo, ac pellentesque nunc venenatis at. Vivamus volutpat congue eleifend. Morbi sed augue lacus, eu venenatis ligula. Donec imperdiet libero ut sapien suscipit ullamcorper vitae nec metus. Donec massa purus, posuere eu gravida quis, ultricies sed purus.
|
|
||||||
|
|
||||||
Aenean accumsan consequat arcu in dignissim. Donec tristique feugiat elit id fringilla. Proin ac ipsum eros, ac tincidunt erat. Nunc non orci ac nibh dapibus laoreet ut eget mauris. Nulla accumsan lacinia dui, sit amet porta magna luctus quis. Nam purus nisi, commodo vitae molestie non, rhoncus non ligula. Aenean scelerisque ultricies sodales. Cras quis hendrerit eros. In et massa erat, eu sagittis sapien.
|
|
||||||
|
|
||||||
Sed bibendum cursus mauris, vel venenatis quam ornare vitae. Aliquam ullamcorper, est ut bibendum condimentum, nulla nulla auctor elit, eget pulvinar eros nibh id libero. Nulla pellentesque, mauris vel rutrum accumsan, quam felis faucibus ligula, ut blandit elit sem id eros. Donec eu libero mauris. Phasellus ante diam, commodo non auctor a, gravida ac nisl. Curabitur mattis iaculis nisl, non dapibus odio viverra ac. Mauris ornare imperdiet lacus sed pellentesque. Cras in est mauris. Duis pharetra felis nec ligula consectetur viverra. Maecenas eu mi et lorem sagittis rutrum eget nec turpis. Cras feugiat consectetur dictum. Nullam sit amet leo mauris. Mauris neque sem, facilisis at rutrum sed, rutrum a ipsum.
|
|
|
@ -61,7 +61,6 @@ include 'hibernate-agroal'
|
||||||
include 'hibernate-jcache'
|
include 'hibernate-jcache'
|
||||||
include 'hibernate-ehcache'
|
include 'hibernate-ehcache'
|
||||||
include 'hibernate-infinispan'
|
include 'hibernate-infinispan'
|
||||||
include 'hibernate-jipijapa'
|
|
||||||
|
|
||||||
include 'hibernate-graalvm'
|
include 'hibernate-graalvm'
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue