Caching-remote-EJB-3.0-Referenzhandbuch

Ich dachte, wie könnte ich sparen Sie Zeit bei der Suche bis remote-ejb-Referenz durch jndi. Ich hatte eine Anwendung, die benötigt, um arbeiten sehr schnell, es hatte aber auch zu nennen, remote ejb, die bremst.

Also meine Lösung war so etwas wie dieses:
Ich nahm die apache-commons-pool-Bibliothek und verwendet seine StackObjectPool Umsetzung für meine remote-ejb-Referenzen-cache.

private static final ObjectPool pool = new StackObjectPool(new RemoteEjbFactory());

Fabrik sieht man hier:

public static class RemoteEjbFactory extends BasePoolableObjectFactory {

    @Override
    public Object makeObject() {
        try {
            return ServiceLocator.lookup(jndi);
        } catch (NamingException e) {
            throw new ConfigurationException("Could not find remote ejb by given name", e);
        }
    }
}

Dann nehme ich ein Objekt durch Kreditaufnahme es von pool (wenn kein freies Objekt im Schwimmbad es nutzt die Fabrik zu erstellen):

SomeEjbRemote someEjb = null;
try {
        someEjb = (SomeEjbRemoteImpl) pool.borrowObject();
        someEjb.invokeRemoteMethod();
} catch (Throwable t) {
        if (someEjb != null) {
            pool.invalidateObject(someEjb);
        }
        pool.clear(); //Maybe its not neccessary
        someEjb = (SomeEjbRemoteImpl) pool.borrowObject();
        someEjb.invokeRemoteMethod(); //this time it should work
}

Und natürlich die Rückgabe ejb zurück zum pool nach erfolgreichem invokacion

finally {
    try {
         pool.returnObject(someEjb);
    } catch (Exception e) {
        logger.error("Could not return object to pool.", e);
    }
}

So wie ich das verstehe gibt es keine Garantie, dass die remote-Referenz bleiben wird, verbunden, so, wenn wir catch-Ausnahme-Cache remote ejb, wir nur entkräften, dass das Objekt und versuchen Sie es erneut.

Was haltet Ihr von solchen Ansatz? Ist es richtig? Vielleicht sind einige andere Lösungen, Ratschläge?

InformationsquelleAutor nesvarbu | 2010-06-22
Schreibe einen Kommentar