Баг загрузки динамических атрибутов (тип атрибута "Сущность") из не главного хранилища

Здравствуйте, обнаружен баг загрузки динамических атрибутов (тип динамического атрибута “Сущность”).
Для воспроизведения бага необходимо использовать в качестве динамического атрибута сущность из не главного хралилища. Тогда при попытке загрузить сущность с ее динамическими атрибутами через dataManager, будет ошибка загрузки “An exception occurred while creating a query in EntityManager … The abstract schema type is unknown.”.

DynamicAttributesManager всегда использует хранилище по умолчанию (store=“MAIN”) для загрузки сущностей из динамических атрибутов, даже в тех случаях, когда должно быть использовано другое хранилище.

В DynamicAttributesManager метод loadEntityValues инициализирует объект EntityManager через persistence.getEntityManager() без указания хранилища, специфичного запрашиваемой сущности. Для корректного обращения к любым хранилищам, требуется получать название хранилища для каждого класса сущности через:

metadata.getTools().getStoreName(metaClass)

Стактрейс ошибки

10:49:05.723 ERROR c.h.cuba.core.sys.ServiceInterceptor - Exception:
java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager:
Exception Description: Problem compiling [select e from mp_Org e where e.id in :ids].
[14, 23] The abstract schema type ‘mp_Org’ is unknown.
[32, 36] The state field path ‘e.id’ cannot be resolved to a valid type.
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1750) ~[org.eclipse.persistence.jpa-2.7.3-19-cuba.jar:na]
at com.haulmont.cuba.core.sys.QueryImpl.buildJPAQuery(QueryImpl.java:233) ~[cuba-core-7.2.19.jar:7.2.19]
at com.haulmont.cuba.core.sys.QueryImpl.getQuery(QueryImpl.java:142) ~[cuba-core-7.2.19.jar:7.2.19]
at com.haulmont.cuba.core.sys.QueryImpl.getResultList(QueryImpl.java:450) ~[cuba-core-7.2.19.jar:7.2.19]
at com.haulmont.cuba.core.app.dynamicattributes.DynamicAttributesManager.loadEntityValues(DynamicAttributesManager.java:511) ~[cuba-core-7.2.19.jar:7.2.19]
at com.haulmont.cuba.core.app.dynamicattributes.DynamicAttributesManager.loadAttributeValues(DynamicAttributesManager.java:438) ~[cuba-core-7.2.19.jar:7.2.19]
at com.haulmont.cuba.core.app.dynamicattributes.DynamicAttributesManager.handleAttributeValuesForIds(DynamicAttributesManager.java:397) ~[cuba-core-7.2.19.jar:7.2.19]
at com.haulmont.cuba.core.app.dynamicattributes.DynamicAttributesManager.doFetchDynamicAttributes(DynamicAttributesManager.java:378) ~[cuba-core-7.2.19.jar:7.2.19]
at com.haulmont.cuba.core.app.dynamicattributes.DynamicAttributesManager.lambda$fetchDynamicAttributes$2(DynamicAttributesManager.java:245) ~[cuba-core-7.2.19.jar:7.2.19]
at com.google.common.collect.Maps$KeySet.lambda$forEach$0(Maps.java:3646) ~[guava-30.1.1-jre.jar:na]
at java.base/java.util.HashMap.forEach(HashMap.java:1336) ~[na:na]
at com.google.common.collect.Maps$KeySet.forEach(Maps.java:3646) ~[guava-30.1.1-jre.jar:na]
at com.haulmont.cuba.core.app.dynamicattributes.DynamicAttributesManager.fetchDynamicAttributes(DynamicAttributesManager.java:243) ~[cuba-core-7.2.19.jar:7.2.19]
at com.haulmont.cuba.core.app.RdbmsStore.load(RdbmsStore.java:165) ~[cuba-core-7.2.19.jar:7.2.19]
at jdk.internal.reflect.GeneratedMethodAccessor323.invoke(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at com.sun.proxy.$Proxy702.load(Unknown Source) ~[na:na]
at com.haulmont.cuba.core.app.DataManagerBean.load(DataManagerBean.java:67) ~[cuba-core-7.2.19.jar:7.2.19]
at com.haulmont.cuba.core.app.DataServiceBean.load(DataServiceBean.java:48) ~[cuba-core-7.2.19.jar:7.2.19]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at com.haulmont.cuba.core.sys.ServiceInterceptor.aroundInvoke(ServiceInterceptor.java:90) ~[cuba-core-7.2.19.jar:7.2.19]
at jdk.internal.reflect.GeneratedMethodAccessor308.invoke(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[spring-aop-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at com.sun.proxy.$Proxy450.load(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at com.haulmont.cuba.core.sys.remoting.LocalServiceInvokerImpl.invoke(LocalServiceInvokerImpl.java:94) ~[cuba-core-7.2.19.jar:7.2.19]
at com.haulmont.cuba.web.sys.remoting.LocalServiceProxy$LocalServiceInvocationHandler.invoke(LocalServiceProxy.java:159) ~[na:na]
at com.sun.proxy.$Proxy38.load(Unknown Source) ~[na:na]
at com.haulmont.cuba.client.sys.DataManagerClientImpl.load(DataManagerClientImpl.java:51) ~[na:na]
at com.haulmont.cuba.core.global.FluentLoader$ById.one(FluentLoader.java:265) ~[cuba-global-7.2.19.jar:7.2.19]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at com.haulmont.cuba.gui.xml.DeclarativeAction.actionPerform(DeclarativeAction.java:101) ~[na:na]
at com.haulmont.cuba.web.gui.components.WebButton.buttonClicked(WebButton.java:67) ~[na:na]
at com.haulmont.cuba.web.widgets.CubaButton.fireClick(CubaButton.java:76) ~[na:na]
at com.vaadin.ui.Button$1.click(Button.java:57) ~[vaadin-server-8.14.3-1-cuba.jar:8.14.3-1-cuba]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:153) ~[vaadin-server-8.14.3-1-cuba.jar:8.14.3-1-cuba]
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:115) ~[vaadin-server-8.14.3-1-cuba.jar:8.14.3-1-cuba]
at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:442) ~[vaadin-server-8.14.3-1-cuba.jar:8.14.3-1-cuba]
at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:407) ~[vaadin-server-8.14.3-1-cuba.jar:8.14.3-1-cuba]
at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:275) ~[vaadin-server-8.14.3-1-cuba.jar:8.14.3-1-cuba]
at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:83) ~[vaadin-server-8.14.3-1-cuba.jar:8.14.3-1-cuba]
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[vaadin-server-8.14.3-1-cuba.jar:8.14.3-1-cuba]
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1636) ~[vaadin-server-8.14.3-1-cuba.jar:8.14.3-1-cuba]
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:465) ~[vaadin-server-8.14.3-1-cuba.jar:8.14.3-1-cuba]
at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329) ~[na:na]
at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215) ~[na:na]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[servlet-api.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.38]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.38]
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) ~[spring-web-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) ~[spring-web-5.2.20.RELEASE.jar:5.2.20.RELEASE]
at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:93) ~[na:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[catalina.jar:9.0.38]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[catalina.jar:9.0.38]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:9.0.38]
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[catalina.jar:9.0.38]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[catalina.jar:9.0.38]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-coyote.jar:9.0.38]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-coyote.jar:9.0.38]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) ~[tomcat-coyote.jar:9.0.38]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) ~[tomcat-coyote.jar:9.0.38]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:9.0.38]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:9.0.38]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: org.eclipse.persistence.exceptions.JPQLException:
Exception Description: Problem compiling [select e from mp_Org e where e.id in :ids].
[14, 23] The abstract schema type ‘mp_Org’ is unknown.
[32, 36] The state field path ‘e.id’ cannot be resolved to a valid type.
at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildException(HermesParser.java:157) ~[org.eclipse.persistence.core-2.7.3-19-cuba.jar:na]
at org.eclipse.persistence.internal.jpa.jpql.HermesParser.validate(HermesParser.java:349) ~[org.eclipse.persistence.core-2.7.3-19-cuba.jar:na]
at org.eclipse.persistence.internal.jpa.jpql.HermesParser.populateQueryImp(HermesParser.java:280) ~[org.eclipse.persistence.core-2.7.3-19-cuba.jar:na]
at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildQuery(HermesParser.java:165) ~[org.eclipse.persistence.core-2.7.3-19-cuba.jar:na]
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:144) ~[org.eclipse.persistence.jpa-2.7.3-19-cuba.jar:na]
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:118) ~[org.eclipse.persistence.jpa-2.7.3-19-cuba.jar:na]
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.(EJBQueryImpl.java:104) ~[org.eclipse.persistence.jpa-2.7.3-19-cuba.jar:na]
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.(EJBQueryImpl.java:88) ~[org.eclipse.persistence.jpa-2.7.3-19-cuba.jar:na]
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1748) ~[org.eclipse.persistence.jpa-2.7.3-19-cuba.jar:na]
… 106 common frames omitted

Добрый день,

Спасибо, что сообщили об проблеме, завел задачу на GitHub.

Глеб