Можно ли заменить EJB бины на CDI?

193
13 января 2018, 01:04

Можно ли заменить EJB бины на CDI и как это скажется на работе программы?

В крайнем случае, можно ли заменить как-то аннотации (оставить только @Inject или @EJB), к примеру тут?

UserBean.java:

@Named
@SessionScoped
public class UserBean implements Serializable{
private User user;  
@EJB
private UserManager userManager;
boolean doLogin(String login, int passwordHash) {
    user = userManager.doLogin(login, passwordHash);
    if (logUser == null) {
        return false;
    } else {
        user = logUser;
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("greetings");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return true;
}

UserManager.java:

@Stateless
@LocalBean
public class UserManager {
     @PersistenceContext(unitName = "examplePU")
     private EntityManager entityManager;
    public User doLogin(String login, int passwordHash) {
        UserEntity userEntity = entityManager.find(UserEntity.class, login);
        return userEntity.toDto();
    }
    public User createUser(String login, int passwordHash){
        UserEntity newUserEntity = new UserEntity();
        newUserEntity.setName(login);
        newUserEntity.setPasswordHashCode(passwordHash);
        entityManager.persist(newUserEntity);
        return newUserEntity.toDto();
    }
    public void updateUser(User user){       
        UserEntity userEntity = entityManager.find(UserEntity.class, user.getName());                
        userEntity.fromDto(user);
        entityManager.merge(userEntity);
    }
}

RegistrationBean.java:

@Named 
@RequestScoped
public class RegistrationBean {
    private String newLogin = "";
    private String newPassword = "";
    @EJB
    private UserManager userManager;
    @Inject
    private UserBean userBean;
    public void register() {
        newLogin = newLogin.trim();
        User newUser = userManager.createUser(newLogin, newPassword.hashCode());
        userBean.doLogin(newUser.getName(), newPassword.hashCode());
        }
    }
}

Когда я меняю аннотацию @EJB на @Inject, бросает ошибку:

20:38:22,150 ERROR [ru.rustem.servlets.ErrorHandler] (default task-1) ERRORServlet : greetingsServlet Code :500Message:Can not set ru.rustem.ejb.UserManager field ru.rustem.beans.UserBean.userManager to ru.rustem.ejb.UserManager$Proxy$_$$_Weld$EnterpriseProxy$Exception : class java.lang.IllegalArgumentException
20:38:24,402 ERROR [io.undertow.request] (default task-3) UT005023: Exception handling request to /view/: java.lang.IllegalArgumentException: Can not set ru.rustem.ejb.UserManager field ru.rustem.beans.UserBean.userManager to ru.rustem.ejb.UserManager$Proxy$_$$_Weld$EnterpriseProxy$

Задача в том чтобы отставить только один тип бинов или хотя бы аннотаций...

READ ALSO
Swing или JavaFX

Swing или JavaFX

Привет, использую Swing для создания графических приложений, наткнулся на JavaFX, многие пишут что swing уже очень старый и вообще деревняЕсть ли что-то...

203
Передача параметров в метод Java

Передача параметров в метод Java

Возможно я что - то не так понимаюНо по моей логике переменная переданная в метод и дальнейшие модификации с ней должны остаться в это методе,...

200