Hey! I'm experimenting a bit with EJB and JSF, and I'm trying to set up a simple community site, but I'm running into some problems from the very start. I'm using Netbeans 6.0, and I have created an Enterprise Project with an EJB module and a web module running the JSF framework. My server is Glassfish 2.
What I've got so far is a login page, a JSF backing bean, a stateless EJB session bean, and a local remote interface. I'll add some persistence after I've solved these problems, so far the EJB methods only use dummy values.
Here's the JSF login bean.
package CR.ui;
import CR.items.User;
import CR.sessions.LoginSessionLocal;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class loginBean
{
private String username;
private String password;
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String login()
{
try
{
InitialContext ic = new InitialContext();
Object o = ic.lookup("java:comp/env/LoginSessionLocal");
LoginSessionLocal dao = (LoginSessionLocal) o;
if(dao.auth(username, password))
{
User u = dao.getUser(username);
Utilities.getSession().setAttribute("username", username);
return "success";
}
else
return "loginFailed";
}
catch (NamingException ex)
{
Logger.getLogger(loginBean.class.getName()).log(Level.SEVERE, "namingException in login()", ex);
return "loginFailed";
}
}
}
And here's the session bean
package CR.sessions;
import CR.items.User;
import javax.ejb.Stateless;
@Stateless
public class LoginSessionBean implements LoginSessionLocal
{
public Boolean auth(String username, String password)
{
if(username.equals("user"))
return true;
else
return false;
}
public User getUser(String username)
{
return new User("user", "pass", null);
}
}
...Local interface...
package CR.sessions;
import javax.ejb.Local;
@Local
public interface LoginSessionLocal {
public java.lang.Boolean auth(java.lang.String username, java.lang.String password);
public CR.items.User getUser(java.lang.String username);
}
...web.xml...
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>com.sun.faces.verifyObjects</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.validateXml</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<ejb-local-ref>
<ejb-ref-name>LoginSessionLocal</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local-home/>
<local>CR.LoginSessionLocal</local>
</ejb-local-ref>
</web-app>
...And faces-config.xml
<?xml version='1.0' encoding='UTF-8'?>
<!-- =========== FULL CONFIGURATION FILE ================================== -->
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<managed-bean>
<managed-bean-name>loginBean</managed-bean-name>
<managed-bean-class>CR.ui.loginBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/login.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/WEB-INF/results/login-successful.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
When deploying I simply click "run" in Netbeans. What am I missing? :)
I'd appreciate any input on this, I feel like I've tried everything, but I've probably missed something essential.
Thanks!
Edit: Can't believe I actually forgot to post the error! Here it is!
Deploying application in domain failed; Error loading deployment descriptors for module [C-Rev-war] -- Cannot resolve reference Unresolved Ejb-Ref LoginSessionLocal@jndi: @null@CR.LoginSessionLocal@Session@null
Deployment error:
The module has not been deployed.
See the server log for details.
at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:163)
at org.netbeans.modules.j2ee.ant.Deploy.execute(Deploy.java:104)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor250.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:277)
at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:460)
at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:151)
Caused by: The module has not been deployed.
at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:157)
... 16 more
BUILD FAILED (total time: 0 seconds)
Edited by: Robert-Ventura on Jan 6, 2008 10:33 AM