The container is Glassfish. I have implemented an @PostConstruct
life-cycle event interceptor method in a simple DAO bean class, but seems like for some reason it is not intercepting my business method at all. I do not anywhere manually instantiate the bean classes.
public class DefaultUserDao implements UserDao {
private String userName;
private String password;
Scanner users = null;
String[] userNamePasswordPairs = null;
public DefaultUserDao() {
try {
users = new Scanner(Paths.get("/home/nhuyvan1106/NetBeansProjects/EJBInAction/web/users"));
}
catch (IOException ex) {
Logger.getLogger(DefaultUserDao.class.getName()).log(Level.SEVERE, null, ex);
}
}
/*The interceptor for this method is defined right below, that
interceptor method is not called at all. If I insert a
System.out.println(userNamePasswordPairs) after the split()
method below, it prints [userName:password] pair twice and there
is only one line in the text file from which the pair was read in the
form like this admin:admin. Notice that I also insert a System.out.println()
method in the interceptor method but if I remove the print()
method from this init() method, I don't see it prints anything
*/
@PostConstruct
public void init() {
while (users.hasNextLine()) {
String line = users.nextLine();
userNamePasswordPairs = line.split(":");
//If I uncomment this, I see it prints [admin:admin] pair
//twice, but when I comment it out, I don't see it prints anything
//System.out.println(Arrays.toString(userNamePasswordPairs));
userName = userNamePasswordPairs[0];
password = userNamePasswordPairs[1];
}
}
@AroundConstruct
private void printUser(InvocationContext ic) {
System.out.println("Interceptor invoked: " + Arrays.toString(userNamePasswordPairs));
try {
ic.proceed();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
A simple JSF page gathering username and password
@Named
@RequestScoped
public class LoginBean {
private String userName;
private String password;
@Inject
private UserDao userDao;
public LoginBean() {
}
public LoginBean(String userName, String password) {
this.userName = userName;
this.password = password;
}
public String validateUser() {
if (userDao.getUserName().equals(userName) && userDao.getPassword().equals(password)) {
}
else {
userName = "Error";
password = "Error";
}
return "confirmation.xhtml";
}
//getter and setter for userName and password
}
Aucun commentaire:
Enregistrer un commentaire