Можно ли повторно использовать прокси, созданный servicedelegate.getport?это потокобезопасно? - PullRequest
0 голосов
/ 24 мая 2011

Мы используем веб-сервис (через веб-сферу), чтобы повысить производительность, мы считаем, что мы можем кэшировать прокси, созданный servicedelegate.getport (..), поскольку создание прокси каждый раз дорого.

Теперь наш вопросэто потокобезопасно?Только изображение, у нас одновременно работают 10 потоков, они будут получать один и тот же прокси и использовать его одновременно.

Thx

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

Порты не являются потокобезопасными.Они держат состояние, как javax.xml.ws.handler.MessageContext.Но объект порта можно безопасно использовать позже!

Кэшируйте порты в LinkedBlockingQueue и peek перед вызовом и затем возвращайте после с offer.

В следующей реализации port объект нене вытекать из кода call, поэтому его можно безопасно использовать:

private LinkedBlockingQueue<Port> portCache = new LinkedBlockingQueue<>();

public Rsp call(Req req) {
    Port port = portCache.poll();
    if (port == null) {
        port = createPort();
    }
    BindingProvider provider = (BindingProvider) port;
    try {
        return portMethod.invoke(port, req);
    } finally {
        portCache.offer(port);
    }
}
0 голосов
/ 21 ноября 2011

Вместо того, чтобы позволить вашему приложению кэшировать его, просто вставьте его с помощью WebServiceRef и позвольте контейнеру управлять им за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...