[jboss-jira] [JBoss JIRA] (WFLY-9803) Switch clustered JPA second level caching to use short (global) unique id, instead of long (app scoped) persistence name
Scott Marlow (JIRA)
issues at jboss.org
Mon Feb 12 09:43:00 EST 2018
[ https://issues.jboss.org/browse/WFLY-9803?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Scott Marlow updated WFLY-9803:
-------------------------------
Description:
To avoid the below error, we will patch org.infinispan.util.ByteString, to use an unsigned byte for max length, but we also still switch to using a shorter name (for WFLY-9803), so that clustered cache puts, are not transmitting the long scoped persistence unit name, on every cache put.
Original failure that could still happen with long app/pu names:
{code}
Failed to start service jboss.persistenceunit."jpa_core_cache_vehicles.ear/jpa_core_cache_pmservlet_vehicle_web.war#CTS-EM-NOTX": org.jboss.msc.service.StartException in service jboss.persistenceunit."jpa_core_cache_vehicles.ear/jpa_core_cache_pmservlet_vehicle_web.war#CTS-EM-NOTX": javax.persistence.PersistenceException: [PersistenceUnit: CTS-EM-NOTX] Unable to build Hibernate SessionFactory
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:195) [wildfly-jpa-12.0.0.Alpha1-SNAPSHOT.jar:12.0.0.Alpha1-SNAPSHOT]
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:125) [wildfly-jpa-12.0.0.Alpha1-SNAPSHOT.jar:12.0.0.Alpha1-SNAPSHOT]
at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:650) [wildfly-elytron-1.2.0.Beta12.jar:1.2.0.Beta12]
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:209) [wildfly-jpa-12.0.0.Alpha1-SNAPSHOT.jar:12.0.0.Alpha1-SNAPSHOT]
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1979)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1481)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1374)
at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_151]
at org.jboss.threads.JBossThread.run(JBossThread.java:485)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: CTS-EM-NOTX] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:953) [hibernate-entitymanager-5.1.10.Final.jar:5.1.10.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:883) [hibernate-entitymanager-5.1.10.Final.jar:5.1.10.Final]
at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:167) [wildfly-jpa-12.0.0.Alpha1-SNAPSHOT.jar:12.0.0.Alpha1-SNAPSHOT]
... 8 more
Caused by: java.lang.IllegalArgumentException: ByteString must be shorter than 127 bytes
at org.infinispan.util.ByteString.<init>(ByteString.java:26)
at org.infinispan.util.ByteString.fromString(ByteString.java:36)
at org.infinispan.factories.GlobalComponentRegistry.registerNamedComponentRegistry(GlobalComponentRegistry.java:211)
at org.infinispan.factories.ComponentRegistry.start(ComponentRegistry.java:228)
at org.infinispan.cache.impl.SimpleCacheImpl.start(SimpleCacheImpl.java:168)
at org.infinispan.cache.impl.AbstractDelegatingCache.start(AbstractDelegatingCache.java:411)
at org.infinispan.manager.DefaultCacheManager.wireAndStartCache(DefaultCacheManager.java:653)
at org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:598)
at org.infinispan.manager.DefaultCacheManager.internalGetCache(DefaultCacheManager.java:462)
at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:448)
at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:434)
at org.jboss.as.clustering.infinispan.DefaultCacheContainer.getCache(DefaultCacheContainer.java:60)
at org.infinispan.hibernate.cache.access.PutFromLoadValidator.<init>(PutFromLoadValidator.java:173)
at org.infinispan.hibernate.cache.access.PutFromLoadValidator.<init>(PutFromLoadValidator.java:136)
at org.infinispan.hibernate.cache.impl.BaseTransactionalDataRegion.prepareForValidation(BaseTransactionalDataRegion.java:153)
at org.infinispan.hibernate.cache.impl.BaseTransactionalDataRegion.createAccessDelegate(BaseTransactionalDataRegion.java:138)
at org.infinispan.hibernate.cache.entity.EntityRegionImpl.buildAccessStrategy(EntityRegionImpl.java:49)
at org.hibernate.internal.SessionFactoryImpl.determineEntityRegionAccessStrategy(SessionFactoryImpl.java:646) [hibernate-core-5.1.10.Final.jar:5.1.10.Final]
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:340) [hibernate-core-5.1.10.Final.jar:5.1.10.Final]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:422) [hibernate-core-5.1.10.Final.jar:5.1.10.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:880) [hibernate-entitymanager-5.1.10.Final.jar:5.1.10.Final]
{code}
Code to change:
Look for call to org.jboss.as.jpa.config.PersistenceUnitMetadata.setScopedPersistenceUnitName(String) and switch to using clustered long name to short name map (Map<String,String>).
We need to look through the callers to PersistenceUnitMetadata.getScopedPersistenceUnitName() and switch to use PersistenceUnitMetadata.getShortPersistenceUnitName() (or PersistenceUnitMetadata.getUUID()), for internal use but keep using PersistenceUnitMetadata.getScopedPersistenceUnitName() for error messages and management console/CLI.
was:
To avoid the below error, we will patch org.infinispan.util.ByteString, to use an unsigned byte for max length, but we still switch to using a shorter name, so that clustered cache puts, are not transmitting the long scoped persistence unit name, on every cache put.
Original failure that could still happen with long app/pu names:
{code}
Failed to start service jboss.persistenceunit."jpa_core_cache_vehicles.ear/jpa_core_cache_pmservlet_vehicle_web.war#CTS-EM-NOTX": org.jboss.msc.service.StartException in service jboss.persistenceunit."jpa_core_cache_vehicles.ear/jpa_core_cache_pmservlet_vehicle_web.war#CTS-EM-NOTX": javax.persistence.PersistenceException: [PersistenceUnit: CTS-EM-NOTX] Unable to build Hibernate SessionFactory
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:195) [wildfly-jpa-12.0.0.Alpha1-SNAPSHOT.jar:12.0.0.Alpha1-SNAPSHOT]
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:125) [wildfly-jpa-12.0.0.Alpha1-SNAPSHOT.jar:12.0.0.Alpha1-SNAPSHOT]
at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:650) [wildfly-elytron-1.2.0.Beta12.jar:1.2.0.Beta12]
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:209) [wildfly-jpa-12.0.0.Alpha1-SNAPSHOT.jar:12.0.0.Alpha1-SNAPSHOT]
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1979)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1481)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1374)
at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_151]
at org.jboss.threads.JBossThread.run(JBossThread.java:485)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: CTS-EM-NOTX] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:953) [hibernate-entitymanager-5.1.10.Final.jar:5.1.10.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:883) [hibernate-entitymanager-5.1.10.Final.jar:5.1.10.Final]
at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:167) [wildfly-jpa-12.0.0.Alpha1-SNAPSHOT.jar:12.0.0.Alpha1-SNAPSHOT]
... 8 more
Caused by: java.lang.IllegalArgumentException: ByteString must be shorter than 127 bytes
at org.infinispan.util.ByteString.<init>(ByteString.java:26)
at org.infinispan.util.ByteString.fromString(ByteString.java:36)
at org.infinispan.factories.GlobalComponentRegistry.registerNamedComponentRegistry(GlobalComponentRegistry.java:211)
at org.infinispan.factories.ComponentRegistry.start(ComponentRegistry.java:228)
at org.infinispan.cache.impl.SimpleCacheImpl.start(SimpleCacheImpl.java:168)
at org.infinispan.cache.impl.AbstractDelegatingCache.start(AbstractDelegatingCache.java:411)
at org.infinispan.manager.DefaultCacheManager.wireAndStartCache(DefaultCacheManager.java:653)
at org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:598)
at org.infinispan.manager.DefaultCacheManager.internalGetCache(DefaultCacheManager.java:462)
at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:448)
at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:434)
at org.jboss.as.clustering.infinispan.DefaultCacheContainer.getCache(DefaultCacheContainer.java:60)
at org.infinispan.hibernate.cache.access.PutFromLoadValidator.<init>(PutFromLoadValidator.java:173)
at org.infinispan.hibernate.cache.access.PutFromLoadValidator.<init>(PutFromLoadValidator.java:136)
at org.infinispan.hibernate.cache.impl.BaseTransactionalDataRegion.prepareForValidation(BaseTransactionalDataRegion.java:153)
at org.infinispan.hibernate.cache.impl.BaseTransactionalDataRegion.createAccessDelegate(BaseTransactionalDataRegion.java:138)
at org.infinispan.hibernate.cache.entity.EntityRegionImpl.buildAccessStrategy(EntityRegionImpl.java:49)
at org.hibernate.internal.SessionFactoryImpl.determineEntityRegionAccessStrategy(SessionFactoryImpl.java:646) [hibernate-core-5.1.10.Final.jar:5.1.10.Final]
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:340) [hibernate-core-5.1.10.Final.jar:5.1.10.Final]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:422) [hibernate-core-5.1.10.Final.jar:5.1.10.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:880) [hibernate-entitymanager-5.1.10.Final.jar:5.1.10.Final]
{code}
Code to change:
Look for call to org.jboss.as.jpa.config.PersistenceUnitMetadata.setScopedPersistenceUnitName(String) and switch to using clustered long name to short name map (Map<String,String>).
We need to look through the callers to PersistenceUnitMetadata.getScopedPersistenceUnitName() and switch to use PersistenceUnitMetadata.getShortPersistenceUnitName() (or PersistenceUnitMetadata.getUUID()), for internal use but keep using PersistenceUnitMetadata.getScopedPersistenceUnitName() for error messages and management console/CLI.
> Switch clustered JPA second level caching to use short (global) unique id, instead of long (app scoped) persistence name
> ------------------------------------------------------------------------------------------------------------------------
>
> Key: WFLY-9803
> URL: https://issues.jboss.org/browse/WFLY-9803
> Project: WildFly
> Issue Type: Task
> Components: Clustering, JPA / Hibernate
> Reporter: Scott Marlow
> Assignee: Paul Ferraro
>
> To avoid the below error, we will patch org.infinispan.util.ByteString, to use an unsigned byte for max length, but we also still switch to using a shorter name (for WFLY-9803), so that clustered cache puts, are not transmitting the long scoped persistence unit name, on every cache put.
> Original failure that could still happen with long app/pu names:
> {code}
> Failed to start service jboss.persistenceunit."jpa_core_cache_vehicles.ear/jpa_core_cache_pmservlet_vehicle_web.war#CTS-EM-NOTX": org.jboss.msc.service.StartException in service jboss.persistenceunit."jpa_core_cache_vehicles.ear/jpa_core_cache_pmservlet_vehicle_web.war#CTS-EM-NOTX": javax.persistence.PersistenceException: [PersistenceUnit: CTS-EM-NOTX] Unable to build Hibernate SessionFactory
> at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:195) [wildfly-jpa-12.0.0.Alpha1-SNAPSHOT.jar:12.0.0.Alpha1-SNAPSHOT]
> at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:125) [wildfly-jpa-12.0.0.Alpha1-SNAPSHOT.jar:12.0.0.Alpha1-SNAPSHOT]
> at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:650) [wildfly-elytron-1.2.0.Beta12.jar:1.2.0.Beta12]
> at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:209) [wildfly-jpa-12.0.0.Alpha1-SNAPSHOT.jar:12.0.0.Alpha1-SNAPSHOT]
> at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1979)
> at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1481)
> at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1374)
> at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_151]
> at org.jboss.threads.JBossThread.run(JBossThread.java:485)
> Caused by: javax.persistence.PersistenceException: [PersistenceUnit: CTS-EM-NOTX] Unable to build Hibernate SessionFactory
> at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:953) [hibernate-entitymanager-5.1.10.Final.jar:5.1.10.Final]
> at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:883) [hibernate-entitymanager-5.1.10.Final.jar:5.1.10.Final]
> at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
> at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:167) [wildfly-jpa-12.0.0.Alpha1-SNAPSHOT.jar:12.0.0.Alpha1-SNAPSHOT]
> ... 8 more
> Caused by: java.lang.IllegalArgumentException: ByteString must be shorter than 127 bytes
> at org.infinispan.util.ByteString.<init>(ByteString.java:26)
> at org.infinispan.util.ByteString.fromString(ByteString.java:36)
> at org.infinispan.factories.GlobalComponentRegistry.registerNamedComponentRegistry(GlobalComponentRegistry.java:211)
> at org.infinispan.factories.ComponentRegistry.start(ComponentRegistry.java:228)
> at org.infinispan.cache.impl.SimpleCacheImpl.start(SimpleCacheImpl.java:168)
> at org.infinispan.cache.impl.AbstractDelegatingCache.start(AbstractDelegatingCache.java:411)
> at org.infinispan.manager.DefaultCacheManager.wireAndStartCache(DefaultCacheManager.java:653)
> at org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:598)
> at org.infinispan.manager.DefaultCacheManager.internalGetCache(DefaultCacheManager.java:462)
> at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:448)
> at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:434)
> at org.jboss.as.clustering.infinispan.DefaultCacheContainer.getCache(DefaultCacheContainer.java:60)
> at org.infinispan.hibernate.cache.access.PutFromLoadValidator.<init>(PutFromLoadValidator.java:173)
> at org.infinispan.hibernate.cache.access.PutFromLoadValidator.<init>(PutFromLoadValidator.java:136)
> at org.infinispan.hibernate.cache.impl.BaseTransactionalDataRegion.prepareForValidation(BaseTransactionalDataRegion.java:153)
> at org.infinispan.hibernate.cache.impl.BaseTransactionalDataRegion.createAccessDelegate(BaseTransactionalDataRegion.java:138)
> at org.infinispan.hibernate.cache.entity.EntityRegionImpl.buildAccessStrategy(EntityRegionImpl.java:49)
> at org.hibernate.internal.SessionFactoryImpl.determineEntityRegionAccessStrategy(SessionFactoryImpl.java:646) [hibernate-core-5.1.10.Final.jar:5.1.10.Final]
> at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:340) [hibernate-core-5.1.10.Final.jar:5.1.10.Final]
> at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:422) [hibernate-core-5.1.10.Final.jar:5.1.10.Final]
> at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:880) [hibernate-entitymanager-5.1.10.Final.jar:5.1.10.Final]
> {code}
> Code to change:
> Look for call to org.jboss.as.jpa.config.PersistenceUnitMetadata.setScopedPersistenceUnitName(String) and switch to using clustered long name to short name map (Map<String,String>).
> We need to look through the callers to PersistenceUnitMetadata.getScopedPersistenceUnitName() and switch to use PersistenceUnitMetadata.getShortPersistenceUnitName() (or PersistenceUnitMetadata.getUUID()), for internal use but keep using PersistenceUnitMetadata.getScopedPersistenceUnitName() for error messages and management console/CLI.
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)
More information about the jboss-jira
mailing list