简体   繁体   中英

Web Service Client in a Stateless Enterprise Bean

What is the correct way to implement a stateless EJB 3.1 for invoking a web service. My client works as a Servlet, but I want to move the invocation into a EEJ bean. I have to add username and password in the SOAP header envelop to access the WS, which is working fine.

The service the the servlet is using looks like this;

@WebServiceClient(name = "MessageService", targetNamespace = "http://...", wsdlLocation = "...wsdl")
public class MessageService
    extends Service

Can I wrap MessageService in a Stateless EJB or should the bean itself use @WebServiceRef (as in the tutorial) without wrapping the MessageService ?

Tutorial

Local Service

If the client and the provider lives in same EAR or WAR on the application server, can be invoked like a ordinal EJB. eg

@WebService
@Stateless
public class CalculatorBean implements Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

The CalculatorBean is threadsafe. All business logic that occurs within the add method is part of a container-managed transaction and not participate in any global transaction.

Alternatively, the client code can look up in the JNDI namespace.

Remote Service

The runtime can inject a service object or a port object into a member variable annotated with javax.xml.ws.WebServiceRef .

@WebServiceRef(CalculatorService.class)
private Calculator port;

The CalculatorService class is annotated with the javax.xml.ws.WebServiceClient annotation (the client of the service), which has a wsdlLocation attribute.


If you want to wrap the WebService into the EJB, see this answer . For read a discussion about this, see EJB and Web Services: getting the best of both worlds .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM