Please look at the tutorial
http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&s=google-web-toolkit-doc-1-5&t=GettingStartedRPC.
 That should hopefully clear things up.

There's two parts to the RPC (although 3 classes).

Async - the client side class that serializes the objects & sends out a
request to the server.
Impl - the server side class that gets called when the request is received &
deserialized.  it then returns at which point the result gets serialized &
sent back.

At this point, the callback given to the async invocation on the client side
is invoked with the result.

So on the client side, no references to the service implementation. 1 call
to the async is enough

On a side note, I dunno about what the recommended best practices are for
GWT, but I prefer to throw a custom exception instead of returning null
(that way onSuccess always has valid data & onFailure is responsible for
handling failure).

Also, I recommend you provide template parameters for your AsyncCallback
(makes your code neater so you don't have explicit casting everywhere).

i.e. AsyncCallback<SerializableUser>... onSuccess(SerializableUser user)

So mainly, just delete the lines:

                       LogonServiceImpl logservice = new LogonServiceImpl();
                       user = logservice.checkLogin(login, pass);

On Mon, Apr 6, 2009 at 5:03 PM, Lorenzaccio <[email protected]> wrote:
>
> Hello, I have a problem. When a user types in his usename and
> password, then hits a Validate button, i'd like to check whether the
> String couple he just typed matches anything in a database.
> I do that by calling execute() which is within the LoginCommand class
> which implements Command.
> However, it doesn't work, and I can't even run it as GWT hosted mode
> application, I get the following error :
> Failed to load module
> Errors in 'file:/home/..../command/LoginCommand.java'
> Line 42 : No source code is available for type .../LogonServiceImpl;
> did you forget to inherit a required module ?
> (Line 42 : LogonServiceImpl logservice = new LogonServiceImpl();)
>
>
>
___________________________________________________________________________
>
___________________________________________________________________________
>
>
> package com.enseirb.projecthandler.client.command;
>
> import java.util.List;
> import javax.servlet.http.HttpServletRequest;
> import com.google.gwt.user.server.rpc.RemoteServiceServlet;
> import com.enseirb.projecthandler.server.servlet.LogonServiceImpl;
> import com.enseirb.projecthandler.client.object.SerializableUser;
> import com.enseirb.projecthandler.client.service.LogonService;
> import com.enseirb.projecthandler.client.service.LogonServiceAsync;
> import com.enseirb.projecthandler.client.view.Login;
> import com.enseirb.projecthandler.client.view.Menu;
> import com.enseirb.projecthandler.server.mapping.HibernateUtil;
> import com.google.gwt.core.client.GWT;
> import com.google.gwt.user.client.Command;
> import com.google.gwt.user.client.Window;
> import com.google.gwt.user.client.rpc.AsyncCallback;
> import com.google.gwt.user.client.rpc.ServiceDefTarget;
>
> public class LoginCommand implements Command {
>        private Login logSystem;
>
>        public void execute(){
>                //Gets informations on an onclick event
>                final String login = logSystem.getUsername();
>        final String pass = logSystem.getPassword();
>
>        //Gets the service and specifies its name
>        LogonServiceAsync logonService = (LogonServiceAsync) GWT.create
> (LogonService.class);
>        ServiceDefTarget endpoint = (ServiceDefTarget) logonService;
>        String moduleRelativeURL = GWT.getModuleBaseURL() + "logon";
>        endpoint.setServiceEntryPoint(moduleRelativeURL);
>
>        //Creates callback
>        AsyncCallback callback = new AsyncCallback() {
>            public void onFailure(Throwable caught) {
>                Window.alert("Login process failed !");
>            }
>            public void onSuccess(Object result) {
>                SerializableUser user = (SerializableUser) result;
>                if (user!=null) {
>                        LogonServiceImpl logservice = new
LogonServiceImpl();
>                        user = logservice.checkLogin(login, pass);
>
>                        if(user.getStatus().equals("admin")){
>                                logSystem.setLogin();
>                                Command home = new ViewHomeCommand();
>                        }
>                        else if(user.getStatus().equals("student")){
>                                logSystem.setLogin();
>                                Command cmd = new LogStudentCommand();
>                        }
>                        else if(user.getStatus().equals("teacher")){
>                                logSystem.setLogin();
>                                Command cmd = new ShowCaseCommand(1);
>                        }
>                }
>                else {//Maybe useless... to be checked
>                        logSystem = null;
>                        Window.alert("Invalid login/password !");
>                }
>            }
>        };
>        logonService.checkLogin(login, pass, callback);
>        }
>
>        public LoginCommand(Login login){
>                logSystem = login;
>        }
> }
>
>
>
>
>
_____________________________________________________________________________
>
_____________________________________________________________________________
>
>
>
>
> package com.enseirb.projecthandler.server.servlet;
>
> import java.util.HashMap;
> import java.util.List;
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpSession;
> import org.hibernate.Session;
> import com.enseirb.projecthandler.client.object.SerializableUser;
> import com.enseirb.projecthandler.client.service.LogonService;
> import com.enseirb.projecthandler.server.mapping.HibernateUtil;
> import com.google.gwt.user.server.rpc.RemoteServiceServlet;
>
> /*
>  * Implementation of our service interface with a server-side servlet
>  */
>
> public class LogonServiceImpl extends RemoteServiceServlet
> implements LogonService{
>
>
>        private HttpSession getSession() {
>                // Get the current request and then return its session
>                return this.getThreadLocalRequest().getSession();
>        }
>
>        @Override
>        public SerializableUser checkLogin(String login, String password) {
>                // TODO Check login and password from a database
>                // return user from database if match
>
>                //Connection to database
>                Session session =
HibernateUtil.getSessionFactory().openSession();
>                List users = session.createQuery("from User").list();
>                SerializableUser[] userlist = new
SerializableUser[users.size()];
>
>                for(Integer i=0;i<userlist.length;i++){
>
>                        if(userlist[i].getLogin().equals(login) &&
userlist[i].getPassword
> ().equals(password)){
>                                SerializableUser user = new
SerializableUser(userlist[i].getLogin
> (),
>                                                userlist[i].getLogin()+"@
enseirb.fr", userlist[i].getStatus(),
> userlist[i].getPassword());
>
 getThreadLocalRequest().getSession().setAttribute("user", user);
>                                HttpSession sessionObj =
getThreadLocalRequest().getSession();
>
>                                return user;
>                        }
>                }
>                return null;
>        }
> }
>
>
>
_____________________________________________________________________________
>
_____________________________________________________________________________
>
>
>
>
> package com.enseirb.projecthandler.client.service;
>
> import com.enseirb.projecthandler.client.object.SerializableUser;
> import com.google.gwt.user.client.rpc.RemoteService;
>
> /*
>  * Interface of service which checks login
>  * @param login
>  * @param password
>  * returns corresponding user if the couple is correct
>  */
>
> public interface LogonService extends RemoteService{
>
>        SerializableUser checkLogin(String username, String password);
> }
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to