Seam Problem!!! URGENT, please
argomauro Oct 23, 2006 5:54 AMI've create a new seam application that insert in a MysqlDb an Object named "utente" and another named "profilo". I've create a Steteful java class that insert this objects and it's work fine.
Subsequently i've create a page for implement the Login functionality with another Stateful java class and only in this case the application return an error:
Caused by: org.jboss.seam.InstantiationException: Could not instantiate Seam component: managerLogin at org.jboss.seam.Component.newInstance(Component.java:735) at org.jboss.seam.Component.newInstance(Component.java:1308) at org.jboss.seam.Component.getInstance(Component.java:1263) at org.jboss.seam.Component.getInstance(Component.java:1246) at org.jboss.seam.jsf.SeamVariableResolver.resolveVariable(SeamVariableResolver.java:44) at org.apache.myfaces.el.ValueBindingImpl$ELVariableResolver.resolveVariable(ValueBindingImpl.java:569) at org.apache.commons.el.NamedValue.evaluate(NamedValue.java:124) at org.apache.myfaces.el.ValueBindingImpl.resolveToBaseAndProperty(ValueBindingImpl.java:450) at org.apache.myfaces.el.MethodBindingImpl.resolveToBaseAndProperty(MethodBindingImpl.java:180) at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:114) ... 25 more Caused by: javax.naming.NameNotFoundException: ManagerLogin not bound at org.jnp.server.NamingServer.getBinding(NamingServer.java:529) at org.jnp.server.NamingServer.getBinding(NamingServer.java:537) at org.jnp.server.NamingServer.getObject(NamingServer.java:543) at org.jnp.server.NamingServer.lookup(NamingServer.java:267) at org.jnp.server.NamingServer.lookup(NamingServer.java:270) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:625) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587) at javax.naming.InitialContext.lookup(InitialContext.java:351) at org.jboss.seam.Component.instantiate(Component.java:774) at org.jboss.seam.Component.newInstance(Component.java:731)
My Stateful class is:
@Stateful
@Name("managerLogin")
@Scope(ScopeType.SESSION)
public class ManagerLogin implements Serializable {
@In(create=true)
private EntityManager em;
@In(value = "login")
private EntityLogin login = new EntityLogin();
@In(value = "utente")
@Out
private EntityUtente utente;
@Logger
private Log log;
public String login() {
List results = em.createQuery(
"from utente where username=:username and password=:password")
.setParameter("username", login.getUsername())
.setParameter("password", login.getPassword())
.getResultList();
if (results.size() == 0) {
FacesMessages.instance().addFromResourceBundle("LoginNonValido");
return null;
} else {
Contexts.getSessionContext().set("loggedIn", true);
utente = (EntityUtente) results.get(0);
return "home" ;
}
}
public String logout() {
Contexts.getSessionContext().remove("loggedIn");
Seam.invalidateSession();
return "home";
}
@Remove
@Destroy
public void destroy() {
}
}
My jsp page is:
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<html>
<head>
<title><h:outputText value="#{messages.Login}" /></title>
</head>
<body>
<f:view>
<h:form>
<h1><h:outputText value="#{messages.Login}" /></h1>
<h:outputText value="#{messages.LoginDetails}" />
<table>
<tr>
<td><h:inputText value="#{login.username}" id="username" /></td>
</tr>
<tr>
<td><h:inputText value="#{login.password}" id="password" /></td>
</tr>
<h:commandButton type="submit" value="#{messages.Login}"
action="#{managerLogin.login}" />
<h:commandButton type="submit" value="#{messages.Register}"
action="insertUtente" />
</h:form>
</f:view>
</body>
</html>
And the login bean is an object but not persistent that contains the user data entry for login:
@Name("login")
public class EntityLogin implements Serializable {
private static final long serialVersionUID = 188141350071143953L;
public EntityLogin(String password, String username) {
this.username = username;
this.password = password;
}
public EntityLogin() {
}
private String username;
private String password;
@NotNull
@Length(max = 10)
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
@Length(max = 15)
@NotNull
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
}
The login bean is the new entry in this code but precedently i've create an instance of the user in the ManagerLogin class but i was a different error,
componet not find ...
An example of the Stateful that work fine:
@Entity
@Name("utente")
@Scope(SESSION)
@Table(name="utente")
public class EntityUtente implements Serializable {
private static final long serialVersionUID = 188141350071143952L;
public EntityUtente(Integer id, String nome, String cognome,String email,String password,String username)
{
this.id = id;
this.nome = nome;
this.cognome = cognome;
this.email = email;
this.username = username;
this.password = password;
}
public EntityUtente(){}
private Integer id;
private String username;
private String nome;
private String cognome;
private String password;
private String email;
public void setId(Integer id) {
this.id = id;
}
@Id @GeneratedValue
public Integer getId() {
return id;
}
@NotNull
@Length(max=10)
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public void setNome(String nome) {
this.nome = nome;
}
@Length(max=100) @NotNull
public String getNome() {
return nome;
}
public void setCognome(String cognome) {
this.cognome = cognome;
}
@Length(max=100) @NotNull
public String getCognome() {
return cognome;
}
@Length(max=15) @NotNull
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public void setEmail(String email) {
this.email = email;
}
@Email
public String getEmail() {
return email;
}
}
For me it is a incomprensibile error, because others two similar cases work (ManagerUtente,ManagerProfilo)and the login action not.
Thanks for help....