ExceptionMapper uygulamasını uygulayarak tek örnekli bir sınıfım var. Bu, statik bir sınıf değil, yalnızca tek bir örneğin oluşturulduğunu bildiğim bir sınıftır (ben kontrol ettim - yapıcı sadece bir kez çağrılır).JAX-RS (Jersey) ExceptionMapper - @ Statik/singleton sınıfına harici enjeksiyon - işe yarıyor ama neden?
Benim sınıf @Context HttpServletRequest kullanır ve açıkça gözlemleyebilirsiniz benim ExceptionMapper.toResponse() yöntemi denir, @Context 'isteği' parametresi istek ilgilendirmektedir değerine sahip olduğunda istisna nerede atılır. Bu, tasarım tarafından desteklenen bir özelliktir ve "proxy'ler" kullanılarak gerçekleştirilmiştir.
Bunun nasıl uygulandığını merak ediyorum - tek bir örnek aynı anda farklı üye değişken değerlerine sahip olabilir mi?
AG ,
PS teşekkür ederiz:
@Provider
public class MyExceptionMapper implements ExceptionMapper<Exception> {
public MyExceptionMapper() {
System.out.println("CTOR!!");
}
@Context HttpServletRequest req;
public static boolean done = false;
public Response toResponse(Exception ex) {
if (!done) {
done = true;
Thread.sleep(10000);
}
System.out.println(req.getRequestURI());
return null;
}
}
Benim DİNLENME işleyicisi yöntemi istisna atar (uyku ı "paralel" Aşağıdaki 2 istekleri yürütmek, bu nedenle zaman: Burada test kodu var) ikincisi gelir ve IMHO tek ve okunur 'req' alanını değiştirmek gerekirken yukarıda emin birincisi bitmiş değil yapar:
- http://localhost/app/one
- http://localhost/app/two
programım baskılar:
CTOR!
http://localhost/app/one
http://localhost/app/two