У меня есть простой веб-сервис, созданный с помощью Netbeans 6.5, и развернутый на 2 серверах 2-го уровня V2.1 и V3. У ws есть базовый метод GetInstanceID, который я вызываю 3 раза от клиента.Могу ли я обладать веб-сервисом lifecycle oneton на стеклянную рыбку V3?
@WebService()
public class FirstWS {
private long m_instanceID = 0; //instance id
//Log
private void WriteLog(String cadena){
String msg = "";
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss:SSS");
Date fecha = new Date();
msg = dateFormat.format(fecha) + " ***** " + this.getClass().getName() + " (m_instanceID=" + m_instanceID + "): " + cadena +
" " + "ThreadID=" + Thread.currentThread().getId() + " ThreadName=" + Thread.currentThread().getName();
Logger.getLogger(this.getClass().getName()).log(Level.INFO,msg);
}
//Constructor
public FirstWS() {
Random rnd = new Random();
m_instanceID = rnd.nextLong();
WriteLog("Executing Constructor");
}
//PostConstruct
@PostConstruct
public void ThisIsThePostConstruct() {
WriteLog("Executing PostConstruct");
}
//PreDestroy
@PreDestroy
public void ThisIsThePreDestroy() {
WriteLog("Executing PreDestroy");
}
//Method
@WebMethod(operationName = "GetInstanceID")
@WebResult(name="InstanceID")
public long GetInstanceID() {
//TODO write your implementation code here:
WriteLog("Executing GetInstanceID");
return m_instanceID;
}
}
Я всегда, хотя эти веб-службы были по умолчанию одиночными.
На сервере GlassFish V2.1 WS работает, как ожидалось, с одноплодной жизненного цикла:
- только один экземпляр создается.
- Только одно исполнение метода конструктора.
- Только одно исполнение, если метод postconstructor.
- Только одно исполнение метода predestroy, когда ws не используется.
журнала Client
InstanceID = -4747957096764272596
InstanceID = -4747957096764272596
InstanceID = -4747957096764272596
журнала сервера
26/08/2010 13: 08: 15: 146 ***** first.test.FirstWS (m_instanceID = -4747957096764272596): Выполнение Конструктор ThreadID = 68 ThreadName = httpSSLWorkerThread-8080-0
26/08/2010 13: 08: 15: 161 ***** first.test.FirstWS (m_instanceID = -4747957096764272596): Выполнение PostConstruct ThreadID = 68 ThreadName = httpSSLWorkerThread-8080-0
26/08/2010 13:08: 15: 364 ***** first.test.FirstWS (m_instanceID = -4747957096764272596): Выполнение GetInstanceID ThreadID = 69 ThreadName = httpSSLWorkerThread-8080-1
26/08/2010 13: 08: 15: 380 ** *** first.test.FirstWS (m_instanceID = -4747957096764272596): Выполнение GetInstanceID ThreadID = 69 ThreadNa я = httpSSLWorkerThread-8080-1
26/08/2010 13: 08: 15: 396 ***** first.test.FirstWS (m_instanceID = -4747957096764272596): Выполнение GetInstanceID ThreadID = 69 ThreadName = httpSSLWorkerThread-8080 -1
26/08/2010 13: 08: 38: 849 ***** first.test.FirstWS (m_instanceID = -4747957096764272596): Выполнение PreDestroy ThreadID = 626 ThreadName = тема-540
Но на сервере glassfish V3 сервер ws работает не так, как ожидалось, потому что новый экземпляр ws создается для КАЖДОГО вызова GetInstanceID:
- Один экземпляр создается для каждого вызова.
- Одно исполнение метода конструктора для каждого вызова.
- Два (!?!?!) Исполнения метода postconstructor для каждого вызова.
- Метод предопределения не вызывается, когда ws не используется.
журнала Client
InstanceId = 7754248300017958713
InstanceId = -1714184485890589231
InstanceId = -4156829683887899017
журнала сервера
INFO: 26/08/2010 15: 16: 11: 429 ***** first.test.FirstWS (m_instanceID = 7754248300017958713): Выполнение конструктора ThreadID = 103 ThreadName = http-thread-pool-8080- (2)
INFO: 26/08/2010 15: 16: 11: 429 ***** first.test.FirstWS (m_instanceID = 7754248300017958713): Выполнение PostConstruct ThreadID = 103 ThreadName = http-thread-pool-8080- (2)
INFO: 26/08/2010 15: 16: 11: 429 ***** first.test.FirstWS (m_instanceID = 7754248300017958713): Выполнение PostConstruct ThreadID = 103 ThreadName = http-thread-pool-8080- (2)
INFO: 26/08/2010 15: 16: 12: 429 ***** first.test.FirstWS (m_instanceID = 7754248300017958713): Выполнение GetInstanceID T hreadID = 103 ThreadName = http-thread-pool-8080- (2)
INFO: 26/08/2010 15: 16: 12: 460 ***** first.test.FirstWS (m_instanceID = -1714184485890589231) : Выполнение конструктора ThreadID = 102 ThreadName = http-thread-pool-8080- (1)
INFO: 26/08/2010 15: 16: 13: 429 ***** first.test.FirstWS (m_instanceID = -1714184485890589231): Выполнение PostConstruct ThreadID = 102 ThreadName = http-thread-pool-8080- (1)
INFO: 26/08/2010 15: (m_instanceID = -1714184485890589231): Выполнение PostConstruct ThreadID = 102 ThreadName = http-thread-pool-8080- (1)
INFO: 26/08/2010 15: 16: 14: 429 ***** first.test.FirstWS (m_instanceID = -1714184485890589231): Выполнение GetInstanceID ThreadID = 102 ThreadName = http-thread-pool-8080- (1)
INFO: 26/08/2010 15: 16: 14: 445 ***** first.test.FirstWS (m_instanceID = -4156829683887899017): Выполнение конструктора ThreadID = 103 ThreadName = http-thread-pool-8080 - (2)
INFO: 26/08/2010 15: 16: 15: 429 ***** first.test.FirstWS (m_instanceID = -4156829683887899017): Выполнение PostConstruct ThreadID = 103 ThreadName = http-thread- pool-8080- (2)
INFO: 26/08/2010 15: 16: 15: 429 ***** first.test.FirstWS (m_instanceID = -4156829683887899017): Выполнение Pos tConstruct ThreadID = 103 ThreadName = http-thread-pool-8080- (2)
INFO: 26/08/2010 15: 16: 15: 429 ***** first.test.FirstWS (m_instanceID = -4156829683887899017): Выполнение GetInstanceID ThreadID = 103 ThreadName = http-thread-pool-8080- (2)
INFO: Закрытие контроля мониторинга Metro: amx: pp =/mon/server-mon [server], type = WSEndpoint, name =/FirstWebApplication-FirstWSService-FirstWSPort
Итак, почему это поведение на стеклянную рыбку V3? Как я могу получить веб-сервис singleton на стеклянной планете V3?
Можете ли вы загрузить свой проект где-нибудь, чтобы мы могли его запустить? –
Спасибо, но я нашел проблему, см. Мой ответ. Очевидно, что я новичок с java и веб-сервисами :-) – user434969