DashboardComponentResource.buildOrganizationComponent() dá erro de proxy em PROD #12
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ao aceder-se à opção "Emissões" quando em PROD (profile=PROD) dá erro e não é apresentado nada. Mas alterando para DEV, tudo funciona.
Depois de muito debug, o problema está no facto de em DEV o loglevel para o package
com.oguerreiro.resilient
éDEBUG
mas em PROD éINFO
.Mas porque razão isto interfere funcionalmente ?
Quando é invocado o
DashboardComponentResource.buildOrganizationComponent()
é chamado o métodogetDashboardComponentService().buildDashboardComponentView()
, este método é transacional e vai retornar um MAP com uma collection deDashboardComponentDetailValue
que contém um proxy paraOrganization
. E é DENTRO do métodoDashboardComponentResource.buildOrganizationComponent()
que é feito o mapper para um DTO.Em DEV, como está com loglevel DEBUG o AOP de logging vai fazer o log do exit do método
getDashboardComponentService().buildDashboardComponentView()
, ainda dentro da transação. E indirectamente, inicializa o proxy. Mas em PROD, o loglevel é INFO e não teremos log e portanto, não há inicialização. O resultado é que rebenta no mapping para o DTO.Isto indicia uma pattern de erro generalizada. NUNCA deve ser feito o mapping para DTO dentro do Resource. Aliás, o mapping para DTO deve ser SEMPRE efectuado dentro do método em transação para permitir as inicializações necessárias que o DTO possa necessitar.
DashboardComponentResource
está agora livre de qualquer mapper.NOTA: Eu acho que deveria rever todas as classes *Resource e repetir este raciocinio, ou poderei ter este erro em muitos mais pontos da APP.