This is an automated email from the ASF dual-hosted git repository. rzo1 pushed a commit to branch tomee-10.x in repository https://gitbox.apache.org/repos/asf/tomee.git
commit 8f98094436841a50c11d7ebbf0de1fa57b4fc514 Author: Markus Jung <[email protected]> AuthorDate: Sat Aug 22 21:04:59 2026 +0200 improve EJB keys (cherry picked from commit 96a730fd8c436e90d490ebc3ca95c51b659f8c7e) --- .../openejb/core/managed/ManagedContainer.java | 4 ++-- .../openejb/core/stateful/StatefulContainer.java | 4 ++-- .../core/stateful/StatefulContainerTest.java | 21 +++++++++++++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java b/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java index a9cc7debdc..5a1fa0741d 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java @@ -74,11 +74,11 @@ import jakarta.transaction.Transaction; import java.lang.reflect.Method; import java.rmi.NoSuchObjectException; import java.rmi.RemoteException; -import java.rmi.dgc.VMID; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @SuppressWarnings("unchecked") @@ -437,7 +437,7 @@ public class ManagedContainer implements RpcContainer { } protected Object newPrimaryKey() { - return new VMID(); + return UUID.randomUUID(); } protected Object removeEJBObject(final BeanContext beanContext, final Object primKey, final Class callInterface, final Method callMethod, Object[] args, final InterfaceType interfaceType) throws OpenEJBException { diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java b/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java index 8576f7973b..0a6aafc6d9 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java @@ -81,11 +81,11 @@ import java.io.Serializable; import java.lang.reflect.Method; import java.rmi.NoSuchObjectException; import java.rmi.RemoteException; -import java.rmi.dgc.VMID; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; @@ -496,7 +496,7 @@ public class StatefulContainer implements RpcContainer { } protected Object newPrimaryKey() { - return new VMID(); + return UUID.randomUUID(); } protected Object removeEJBObject(final BeanContext beanContext, final Object primKey, final Class callInterface, final Method callMethod, Object[] args, final InterfaceType interfaceType) throws OpenEJBException { diff --git a/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulContainerTest.java b/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulContainerTest.java index c424643036..f8ae4e8fce 100644 --- a/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulContainerTest.java +++ b/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulContainerTest.java @@ -26,9 +26,11 @@ import org.apache.openejb.assembler.classic.StatefulSessionContainerInfo; import org.apache.openejb.assembler.classic.TransactionServiceInfo; import org.apache.openejb.config.ConfigurationFactory; import org.apache.openejb.core.LocalInitialContextFactory; +import org.apache.openejb.core.ivm.BaseEjbProxyHandler; import org.apache.openejb.jee.EjbJar; import org.apache.openejb.jee.StatefulBean; import org.apache.openejb.loader.SystemInstance; +import org.apache.openejb.util.proxy.ProxyManager; import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; @@ -47,6 +49,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Stack; +import java.util.UUID; /** * @version $Revision$ $Date$ @@ -150,6 +153,24 @@ public class StatefulContainerTest extends TestCase { testBusinessRemoteInterface(expectedLifecycle); } + public void testPrimaryKeyIsRandomUuid() throws Exception { + final InitialContext ctx = new InitialContext(); + final RemoteWidget first = (RemoteWidget) ctx.lookup("WidgetBeanRemote"); + final RemoteWidget second = (RemoteWidget) ctx.lookup("WidgetBeanRemote"); + try { + final Object firstKey = ((BaseEjbProxyHandler) ProxyManager.getInvocationHandler(first)).primaryKey; + final Object secondKey = ((BaseEjbProxyHandler) ProxyManager.getInvocationHandler(second)).primaryKey; + + assertTrue("key type", firstKey instanceof UUID); + assertTrue("key type", secondKey instanceof UUID); + assertEquals("random uuid", 4, ((UUID) firstKey).version()); + assertFalse("distinct keys", firstKey.equals(secondKey)); + } finally { + first.destroy(); + second.destroy(); + } + } + public void testBusinessLocalInterfaceInTx() throws Exception { final TransactionManager transactionManager = SystemInstance.get().getComponent(TransactionManager.class); transactionManager.begin();
