2014-04-11 4 views
5

Uso il motore modello thymeleaf per compilare la richiesta al servizio SOAP. La classe che effettua l'invio di aspetto simile a questo:Thymeleaf | L'operazione thread-safe di TemplateEngine.process è?

import java.io.StringReader; 
import java.util.*; 
import javax.xml.transform.stream.*; 

import org.springframework.ws.client.core.WebServiceTemplate; 

import org.thymeleaf.*; 
import org.thymeleaf.context.*; 
import org.thymeleaf.templateresolver.*; 

public class SomeService 
{ 
    private final TemplateEngine templateEngine; 
    private final WebServiceTemplate webServiceTemplate; 

    public RetrieveServiceThymeleafBased() { 
     webServiceTemplate = new WebServiceTemplate(); 
     webServiceTemplate.setDefaultUri("http://some.path/to/soap/service"); 

     ITemplateResolver templateResolver = new ClassLoaderTemplateResolver(); 
     templateEngine = new TemplateEngine(); 
     templateEngine.addTemplateResolver(templateResolver); 
    } 

    public void sendMessage(String orderNumber) { 
     Context params = new Context(); 
     params.setVariable("CreateDateTime", new Date()); 
     params.setVariable("GUID", UUID.randomUUID()); 
     String xmlContent = templateEngine.process("template.xml", params); 

     StreamSource source = new StreamSource(new StringReader(xmlContent)); 
     StreamResult result = new StreamResult(System.out); 
     webServiceTemplate.sendSourceAndReceiveToResult(source, result); 
    } 
} 

so che webServiceTemplate.sendSourceAndReceiveToResult - è il funzionamento thread-safe, ma non riesco a trovare questo tipo di informazioni su templateEngine.process

Domanda: templateEngine.process una filettatura operazione sicura o no

risposta

14

Sì, lo è. Gli oggetti TemplateEngine sono progettati per essere utilizzati in ambienti altamente concomitanti senza problemi (spero!;)).

Disclaimer, per regole StackOverflow: sono l'autore di Thymeleaf.

+0

Wow! Grazie! – CAMOBAP

+0

È bello sentirlo, ma, poiché si tratta di un intreccio abbastanza complesso di Thymeleaf e Spring, accadono le cose: [Errore di concentricità Thymeleaf ...] (https://github.com/thymeleaf/thymeleaf-spring/issues/83). ... Quindi, sii prudente –

+0

Hai un piccolo commento in javadoc. Questa è stata la prima informazione che cercavo thread-safe/concurrent. Si dice che l'istanziazione è costosa. Il pensiero successivo è quindi 'usare un singleton' il prossimo pensiero è quindi è 'filettatura di sicurezza' ... –