Hi all,

we are migrating an application from a very old version of OWB to the current 
one and are experiencing huge memory problems.
They are caused by the following pattern, that is widely used in the 
application:

@ApplicationScoped
public class MyService {

    @Inject
    @Current // custom qualifier
    private Provider<User> currentUserProvider;

    public void doSomething withCurrentUser() {
        User currentUser = currentUserProvider.get();
        …
    }
}

Unfortunately in the Provider (in InstanceImpl) the created objects are stored 
together with their CreationalContext in a map. I guess, that is required to 
correctly implement Instance#destroy.
However that leads to the situation, that every user is stored forever in that 
map and will never be removed, which leads to our memory problems.

I know that the correct solution would be to Instance#destroy the User after 
usage. And we probably will do that in the migration project.

Although I don’t consider this observed behavior a bug, I wonder if we could 
deal with that situation in a more intelligent way. I can think of three 
possible ways:

 1.  When the injection point is of type Provider<T> (and not Instance<T>) we 
should not store the creational context at all, because there is no way, that 
it could ever be used.
 2.  The map where the creational contexts are stored could be a WeakHashMap. 
When the created object is gone there is no way to call Instance#destroy, so we 
don’t need the creational context.
 3.  We could detect, if a bean has any destruction logic at all, if not, we 
should not store the creational context, because Instance#destroy is a NoOp 
anyway

WDYT? If you are fine, I would implement one of the routes. Which one do you 
prefer?

Cheers,
Arne
OPEN KNOWLEDGE GmbH
Poststraße 1, 26122 Oldenburg
Mobil: +49 151 - 108 22 942
Tel: +49 441 - 4082-154
Fax: +49 441 - 4082-111
arne.limb...@openknowledge.de<mailto:arne.limb...@openknowledge.de>
www.openknowledge.de<https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.openknowledge.de%2F&data=04%7C01%7C%7C3004d8758be44c8678c008d93bcc1e23%7C48837bc476f9481d8a76bd7b60b43dec%7C0%7C0%7C637606570139932909%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=9vRVYZVZ%2Feqk%2BvFxU5COofNvgs8U0AxtxRqwVEwqXHA%3D&reserved=0>
Registergericht: Amtsgericht Oldenburg, HRB 4670
Geschäftsführer: Lars Röwekamp, Jens Schumann

Treffen Sie uns auf kommenden Konferenzen und Workshops:
Zu unseren 
Events<https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.openknowledge.de%2Fevent%2F&data=04%7C01%7C%7C3004d8758be44c8678c008d93bcc1e23%7C48837bc476f9481d8a76bd7b60b43dec%7C0%7C0%7C637606570139932909%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=8tjmukdm1NxhXQMkn4VnESiBI216kXvh%2Fjb7%2FFYI0kE%3D&reserved=0>

Reply via email to