LoggerProducer.java jest klasa wykorzystywane do produkcji Przewoźnicy drewna być wstrzykiwany w CDI fasoli z:Dlaczego @Singleton nad @ApplicationScoped w producentów?
@Inject
Logger LOG;
pełny kod:
import javax.ejb.Singleton;
/**
* @author rveldpau
*/
@Singleton
public class LoggerProducer {
private Map<String, Logger> loggers = new HashMap<>();
@Produces
public Logger getProducer(InjectionPoint ip) {
String key = getKeyFromIp(ip);
if (!loggers.containsKey(key)) {
loggers.put(key, Logger.getLogger(key));
}
return loggers.get(key);
}
private String getKeyFromIp(InjectionPoint ip) {
return ip.getMember().getDeclaringClass().getCanonicalName();
}
}
PYTANIE: Można @Singleton
być bezpiecznie zamieniły się @ApplicationScoped
?
To znaczy, dlaczego ktoś chciałby mieć tu EJB? Czy istnieją względy techniczne, ponieważ nie są w to zaangażowane żadne transakcje, a (AFAIK) i tak byłaby bezpieczna dla wątków?
Mam oczywiście na myśli javax.enterprise.context.ApplicationScoped
, a nie javax.faces.bean.ApplicationScoped
.
HashMap nie wątkowo –
@SME_Dev oczywiście, mój błąd polegał na tym, że '@ ApplicationScoped' jest, dzięki za komentarz BTW –
@AndreaLigios możesz wyjaśnić, czy twoje pytanie dotyczy' javax.ejb.Singleton' lub 'javax.inject.Singleton'? –