2010-04-21 7 views
5

Zajmuję się tworzeniem usługi sieciowej, która będzie wywoływana przez klientów, które zostały przeze mnie napisane. W serwisie internetowym potrzebuję korzystać z obiektów aplikacyjnych, które zmniejszają obciążenie aplikacji w systemie. Zaimplementowałem moje obiekty dla całej aplikacji, jak pokazano w this question.Uzyskiwanie dostępu do FacesContext z usługi WWW

Mogę używać mojego obiektu na stronie jsf bez problemu w następujący sposób.

MyObject mo = (MyObject) FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().get("MyObjectsName"); 

Ale jeśli chodzi o wykorzystanie go w żądaniu Web Service FacesContext.getCurrentInstance() zwraca wartość null. Czy istnieje sposób użycia FaceContext w usłudze sieci Web.

+1

Na jakim interfejsie API jest Twoja usługa sieciowa? Czy działa w tym samym kontenerze/kontekście? – BalusC

+0

Używam jax-ws, ale nie myślałem o kontenerze. – scriptmonster

Odpowiedz

5

Jest to wartość null, ponieważ usługi sieciowe nie przechodzą przez serwlet Faces. I tak właśnie powinno być, ponieważ usługi sieciowe nie mają nic wspólnego z JSF.

W przypadku korzystania z wdrażania JAX-WS, można użyć:

@Resource 
WebServiceContext context; 

Ten wstrzyknie WebServiceContext, za pomocą których można:

ServletContext servletContext = (ServletContext) 
    context.getMessageContext().get(MessageContext.SERVLET_CONTEXT); 

i posiadające ServletContext, ty może uzyskać dostęp do obiektów zakresu aplikacji.

+0

Postaram się jak najszybciej. Dzięki. – scriptmonster

+0

jeśli używam JAXa RS i chcę uzyskać dostęp do fasoli z widokiem, czy istnieje sposób na osiągnięcie, Bozho? –