Posso enviar um bean CDI como parametro de um método EJB remoto?
Estou tentando enviar um POJO como parametro de um EJB remoto e dentro deste POJO tem um bean CDI.
Porém na hora que o EJB vai desserializar o POJO da erro de ClassNotFoundException na classe com.mycompany.portalcarweb.client.model.User$Proxy$_$$_WeldClientProxy (que é o proxy CDI de um bean)
Segue meus códigos
LoggedUserProducer.java que é um Producer para um Usuario do banco de dados
public class LoggedUserProducer {
@Produces
@SessionScoped
@LoggedUser
public User produceLoggedUser() throws Exception {
... //carrego meu usuário do banco de dados por uma token do request
return user;
}
}
Minha JSF Controller que faz a chamada EJB remota:
CarController.java
@Named
@ViewScoped
public class CarController implements Serializable {
@Inject
private AuditRemote auditRemote; //Meu EJB remoto
@Inject
@LoggedUser
private User loggedUser; //Meu User produzido pelo LoggedUserProducer
public void repairCar() throws Exception {
... //algumas ações...
AuditAction action = new AuditAction()
action.setPerformedBy(loggedUser); //setando meu bean injetado (que é um proxy cdi) dentro de um POJO
auditRemote.audit(action); //faço a chamada EJB passando a POJO. Aqui acontece a ClassNotFoundException;
}
A Exception:
Eu não sei porque meu EJB não encontra a classe com.mycompany.portalcarweb.client.model.User$Proxy$_$$_WeldClientProxy.
Meu User.java está num jar que está como módulo do JBoss 7.
Se eu envio um o USer via new (e não injetado), tudo funciona normalmente. Imagino porque é a classe pura sem estar encapsulada por um proxy do weld. Mas se meu EJB conhece a User.java e o JBoss conhece as classes do Weld, não entendo porque não consegue deserializar um proxy de User.
eu recebo o usuário logado via @Inject e em algumas operações tenho que informar quem executou tal operação.
No próprio exemplo acima (que é apenas um exemplo):
Numa oficina de carro o mecânico registra um reparo que o responsável pelo reparo é o próprio mecânico (que está logado) que cujo objeto veio via @Inject