I looked that the 'integrations specs', here are my thoughts. Sorry for the lengthy detail - when you get a chance see item 1 (c) and just glance over the rest Thanks. 1. Here is a recent tail -f /usr/share/jboss-4.0.2/server/default/log/localhost_access_log.2011-05-06.log 192.168.0.26 - - [06/May/2011:21:01:02 +0400] "GET /moodle/mod/lamslesson/userinfo.php?ts=1304701262440&un=fatiedu&hs=46a2c27c1d0412505f42846ad1cb1f26895d7212 HTTP/1.1" 404 1055 192.168.0.16 - - [06/May/2011:21:01:02 +0400] "GET /lams//services/xml/LearningDesignRepository?serverId=moodle&datetime=May+06%2C2011+9%3A01+pm&hashValue=1bdfcbd3e287febbe0187c84feaa0015ccb59db6&username=fatiedu&courseId=7&courseName=Unit-5+Atomic+Physics+12%2F2010&mode=2&country=AE&lang=en HTTP/1.0" 400 1068 I will compare the output above with the 'integration specs'. 1. (a) User Information to LMS I quote the specs below "Every time a LMS user attempts to access LAMS, LAMS will check to see if the user exists in its database. If the user has not been created in LAMS, LAMS will make a call to the external application to retrieve user information and create the user on the fly. Therefore you will need to set up a user information servlet on the LMS side that will return user information to LAMS. Request format The user information url is defined in the LAMS System Administration page and contains three parameters: username, timestamp and hash. For example, the url for moodle is given by: http://localhost/moodle/mod/lamstwo/userinfo.php?ts=%timestamp%&un=%username%&hs=%hash% The hash value is generated using the SHA1 algorithm on the following (all in lower case) [ timestamp + username + serverID + serverKey ] Response Format The response from the external application is a comma seperated list of 14 values ,<First name>,<Last name>,<Address>,<City>,<State>,<Postcode>,<Country>,<Day time number>,<Mobile number>,<Fax number>,<Email>,<Locale language>,<Locale country>" So, if I understand this correctly; first 'GET' is to moodle. I appended the moodle server part to the url and pasted in firefox 4x as http://fatiedu.sma:8080/moodle/mod/lamslesson/userinfo.php?ts=1304701262440&un=fatiedu&hs=46a2c27c1d0412505f42846ad1cb1f26895d7212 Here is the output of 14 values, comma seperated as expected (title 'Ms.' reflects correclty as part of frstname like in moodle profile) ,Ms. Afroze Fatima,Abidi,,Dubai,,,AE,,,,fatiedu@fatiedu.sma,AE,en So, for user information both the 'Request format' and 'Response format' is as expected. 1. (b) Next step is an external call to LAMS -- "Login request" If I understand this correctly, this is the second 'GET'. I appended that to the host info as below, http://lamsedu.sma:8080/lams/services/xml/LearningDesignRepository?serverId=moodle&datetime=May+06%2C2011+9%3A01+pm&hashValue=1bdfcbd3e287febbe0187c84feaa0015ccb59db6&username=fatiedu&courseId=7&courseName=Unit-5+Atomic+Physics+12%2F2010&mode=2&country=AE&lang=en This time I got the error on browser -- "message can not retreive user information description The request sent by the client was syntactically incorrect (can not retreive user information)." Let's what info is the string supplying to the composed url; I quote from specs below uid - the username on the external system (my comment - came in as 4th item - username=fatiedu) method - either author, monitor or learner ts - timestamp (my comment - came in as 2nd item - datetime=May+06%2C2011+9%3A01+pm sid - serverID (my comment - came in as 1st item - serverId=moodle) hash - SHA1 hash of [ts + uid + method + serverID + serverKey] (Note: all lower case) (my comment - came in as 3rd item - hashValue=1bdfcbd3e287febbe0187c84feaa0015ccb59db6) courseid - the id of the course from the LMS (my comment - came in as 5th item - courseId=7) country - country component of locale (my comment - came as 8th item - country=AE) lang - language component of locale (my comment - came as 9th item - lang=en) requestSrc - string to identify who is making the call, this is only used in authoring to display on the close button. notifyCloseURL - callback URL to refresh the page after a sequences has been added. lsid - This is used for monitor and learner to tell LAMS the learning session id you want to open. Besides the above additional courseName=Unit-5+Atomic+Physics+12%2F2010 came as 6th item; and mode=2 came as 7th item 1. (c) I did not notice any activity on the LAMS logs when I saved any updates for 'LAMS Server Configuration' in moodle (integration validation button is missing), it seems that the process of integration gets started at the I am creating the first 'Lams lesson' I quote for the 1st para of 'user information' above "If the user has not been created in LAMS, LAMS will make a call to the external application to retrieve user information and create the user on the fly. Therefore you will need to set up a user information servlet on the LMS side that will return user information to LAMS." OK, so a corresponding user will need to be created in LAMS, may be on a fly by an 'information servlet'. I am not sure if I have to set up that or if it is a part of integration that is already in place. Let me know if I can do more chasing into this. Here is the lams.logs for the error. 2011-05-06 22:36:32,880 [http-0.0.0.0-8080-4:] DEBUG org.lamsfoundation.lams.webservice.xml.LearningDesignRepositoryServlet - request.getCharacterEncoding is empty, parsing username and courseName as 8859_1 to UTF-8... 2011-05-06 22:36:32,901 [http-0.0.0.0-8080-4:] DEBUG org.lamsfoundation.lams.integration.service.IntegrationService - http://fatiedu.sma:8080/moodle/mod/lamslesson/userinfo.php?ts=1304706992900&un=fatiedu&hs=28dd88676daf61419cba19b8b535238a02306a37 2011-05-06 22:36:32,909 [http-0.0.0.0-8080-4:] ERROR org.lamsfoundation.lams.webservice.xml.LearningDesignRepositoryServlet - can not retreive user information org.lamsfoundation.lams.integration.UserInfoFetchException: Fail to fetch user data from external server:moodle - Unexpected return HTTP Status:404 at org.lamsfoundation.lams.integration.service.IntegrationService.getUserDataFromExtServer(IntegrationService.java:336) at org.lamsfoundation.lams.integration.service.IntegrationService.createExtUserUseridMap(IntegrationService.java:298) at org.lamsfoundation.lams.integration.service.IntegrationService.getExtUserUseridMap(IntegrationService.java:169) at org.lamsfoundation.lams.integration.service.IntegrationService$$FastClassByCGLIB$$24924e31.invoke(<generated>) at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149) at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:685) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170) at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:623) at org.lamsfoundation.lams.integration.service.IntegrationService$$EnhancerByCGLIB$$281dd714.getExtUserUseridMap(<generated>) at org.lamsfoundation.lams.webservice.xml.LearningDesignRepositoryServlet.doGet(LearningDesignRepositoryServlet.java:324) at javax.servlet.http.HttpServlet.service(HttpServlet.java:697) at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:153) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:407) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:407) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.lamsfoundation.lams.integration.security.SingleSignOn.invoke(SingleSignOn.java:89) at org.lamsfoundation.lams.integration.security.LoginRequestValve.invoke(LoginRequestValve.java:67) at org.apache.catalina.valves.FastCommonAccessLogValve.invoke(FastCommonAccessLogValve.java:481) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112) at java.lang.Thread.run(Thread.java:662)