[Building Sakai] Course Management API integration question (now with solution!)

Nicola Monat-Jacobs nicola at longsight.com
Mon Feb 15 05:33:14 PST 2010


Thanks for mentioning this Jon - it confirms something I've long suspected: that you must implement the whole CM hierarchy, even if your goal is only to get flat course sites into Sakai, like the 'Simple Course Pattern.' Many places in the documentation seem to indicate that you don't need to implement the whole hierarchy, but the code seems to expect it.

I wonder: are there any org using CM in a 'simple' way? If so, how did you address the hierarchy? Or did you just look at CM api and decide it was overkill for your needs (as I had always done)?

Nicola

On Feb 12, 2010, at  11:24 PM, Jon Gorrono wrote:

> This seems like it might be a bit brittle... the error is an
> indication that the hierachy is not complete: all your sections are
> belong to coursesets (or should anyways)
> 
> I think there are places in the code that begin course data traversal
> starting at the courseset level...the property
> site-manage.cms.subject.category is used to that end, pretty sure....
> we use site-manage.cms.subject.category=SUBJECT
> since our coursesets have multiple categories and we want to organize
> by subject (instead of dept or college)
> 
> But, we've been running this way for quite a while so my information
> be be outmoded.
> 
> 
> On Fri, Feb 12, 2010 at 11:16 AM, Nicola Monat-Jacobs
> <nicola at longsight.com> wrote:
>> Just for posterity, here is the solution:
>> Since we're not implementing CourseSets, some of our CourseSet methods
>> return null. Unfortunately, the default
>> sakai-src/providers/cm/cm-authz-provider/src/java/org/sakaiproject/coursemanagement/impl/provider/CourseSetRoleResolver.java
>> has the following code:
>> line57 : if(csEids.isEmpty()) {
>> but if csEids is actually null (not just an empty set) you get this:
>> 
>> java.lang.NullPointerException
>> at
>> org.sakaiproject.coursemanagement.impl.provider.CourseSetRoleResolver.getUserRoles(CourseSetRoleResolver.java:57)
>> 
>> And saving the authz group fails. So, we added a check for
>> null CourseSetRoleResolver.java, and now everything is fine.
>> Nicola
>> 
>> On Feb 12, 2010, at  1:42 PM, Nicola Monat-Jacobs wrote:
>> 
>> Looking at this: http://jira.sakaiproject.org/browse/SAK-10465
>> I'm wondering if my xml below is still the correct way to indicate role
>> resolvers. Can anyone point me to a current example? My google-fu turns up
>> nothing, but perhaps I'm missing something.
>> Thanks,
>> Nicola
>> 
>> On Feb 12, 2010, at  10:31 AM, Nicola Monat-Jacobs wrote:
>> 
>> Thanks for writing back Zhen!
>> So, I reached the conclusion that even if you have a simple CM
>> implementation, you still need to implement Sections in order to see
>> anything in Worksite Setup. Now I can select sections and create them,
>> however, I'm having a problem getting the students to be added. The
>> instructor gets added to the course, and I can see from the logs that the
>> students are being found, and added as students, but when it tries to save
>> the course membership, something fails. I'd appreciate any thoughts you
>> might have.
>> Thinking of your suggestion of role resolvers, I checked the components.xml
>> and I see that I have:
>> <bean
>> id="org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider"
>> class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
>> singleton="true">
>> <property name="transactionManager">
>> <ref
>> bean="org.sakaiproject.springframework.orm.hibernate.GlobalTransactionManager"/>
>> </property>
>> <property name="transactionAttributes">
>> <props>
>> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
>> </props>
>> </property>
>> <property name="target">
>> <bean
>> class="org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider"
>> init-method="init"
>> destroy-method="destroy">
>> <property name="cmService">
>> <ref bean="org.sakaiproject.coursemanagement.api.CourseManagementService"/>
>> </property>
>> <property name="rolePreferences">
>> <list>
>> <value>Instructor</value>
>> <value>Teaching Assistant</value>
>> <value>Student</value>
>> </list>
>> </property>
>> <property name="roleResolvers">
>> <list>
>> <bean
>> class="org.sakaiproject.coursemanagement.impl.provider.SectionRoleResolver">
>> <property name="roleMap">
>> <map>
>> <entry key="Instructor" value="Instructor" />
>> <entry key="Student" value="Student" />
>> </map>
>> </property>
>> <property name="officialInstructorRole" value="Instructor" />
>> <property name="enrollmentStatusRoleMap">
>> <map>
>> <entry key="0" value="Student" />
>> <entry key="1" value="Student" />
>> </map>
>> </property>
>> </bean>
>> <bean
>> class="org.sakaiproject.coursemanagement.impl.provider.CourseOfferingRoleResolver">
>> <property name="roleMap">
>> <map>
>> <entry key="Instructor" value="Instructor" />
>> <entry key="Student" value="Student" />
>> </map>
>> </property>
>> </bean>
>> <bean
>> class="org.sakaiproject.coursemanagement.impl.provider.CourseSetRoleResolver">
>> <property name="roleMap">
>> <map>
>> <entry key="Instructor" value="Instructor" />
>>                                        <entry key="Student" value="Student"
>> />
>> </map>
>> </property>
>> </bean>
>> </list>
>> </property>
>> </bean>
>> </property>
>> </bean>
>> </beans>
>> So I think I have values for everything. Here's my stacktrace:
>> INFO: Synchronizing internal sections with externally defined sections in
>> site 2e14b8ea-5ba9-44f2-81f8-95b09e41225a (2010-02-12 10:19:33,911
>> http-8080-Processor23_org.sakaiproject.component.section.sakai.SectionManagerImpl)
>> DEBUG: FederatedAuthzGroupProvider :: checking
>> org.provider.LdapAdminAuthzGroupProvider at 1e72466 (2010-02-12 10:19:34,359
>> http-8080-Processor23_org.provider.FederatedAuthzGroupProvider)
>> getUserRolesForGroup: null
>> DEBUG: org.provider.LdapAdminAuthzGroupProvider at 1e72466returned 0results
>> (2010-02-12 10:19:34,365
>> http-8080-Processor23_org.provider.FederatedAuthzGroupProvider)
>> DEBUG: FederatedAuthzGroupProvider :: checking
>> org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider at 13159f1
>> (2010-02-12 10:19:34,366
>> http-8080-Processor23_org.provider.FederatedAuthzGroupProvider)
>> DEBUG: ------------------CMGP.getUserRolesForGroup(null) (2010-02-12
>> 10:19:34,366
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: null is mapped to 0 sections (2010-02-12 10:19:34,367
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: _____________getUserRolesForGroup={} (2010-02-12 10:19:34,367
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG:
>> org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider at 13159f1returned
>> 0results (2010-02-12 10:19:34,368
>> http-8080-Processor23_org.provider.FederatedAuthzGroupProvider)
>> INFO: Synchronizing internal sections with externally defined sections in
>> site 2e14b8ea-5ba9-44f2-81f8-95b09e41225a (2010-02-12 10:19:35,449
>> http-8080-Processor23_org.sakaiproject.component.section.sakai.SectionManagerImpl)
>> INFO: Synchronizing internal sections with externally defined sections in
>> site 2e14b8ea-5ba9-44f2-81f8-95b09e41225a (2010-02-12 10:19:36,053
>> http-8080-Processor23_org.sakaiproject.component.section.sakai.SectionManagerImpl)
>> DEBUG: FederatedAuthzGroupProvider :: checking
>> org.provider.LdapAdminAuthzGroupProvider at 1e72466 (2010-02-12 10:19:36,834
>> http-8080-Processor23_org.provider.FederatedAuthzGroupProvider)
>> getUserRolesForGroup: course1
>> DEBUG: org.provider.LdapAdminAuthzGroupProvider at 1e72466returned 0results
>> (2010-02-12 10:19:36,838
>> http-8080-Processor23_org.provider.FederatedAuthzGroupProvider)
>> DEBUG: FederatedAuthzGroupProvider :: checking
>> org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider at 13159f1
>> (2010-02-12 10:19:36,840
>> http-8080-Processor23_org.provider.FederatedAuthzGroupProvider)
>> DEBUG: ------------------CMGP.getUserRolesForGroup(course1) (2010-02-12
>> 10:19:36,840
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: course1 is mapped to 1 sections (2010-02-12 10:19:36,840
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: getSection: course1 (2010-02-12 10:19:36,840
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: getCourseOffering: course1 (2010-02-12 10:19:37,114
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: Looking for roles in section course1 (2010-02-12 10:19:37,295
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: getSectionMemberships: course1 (2010-02-12 10:19:37,296
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: Adding student1 to userRoleMap with role=Student (2010-02-12
>> 10:19:37,494
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding student2 to userRoleMap with role=Student (2010-02-12
>> 10:19:37,494
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding student3 to userRoleMap with role=Student (2010-02-12
>> 10:19:37,494
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding student4 to userRoleMap with role=Student (2010-02-12
>> 10:19:37,494
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding student5 to userRoleMap with role=Student (2010-02-12
>> 10:19:37,494
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding student6 to userRoleMap with role=Student (2010-02-12
>> 10:19:37,494
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding student7 to userRoleMap with role=Instructor (2010-02-12
>> 10:19:37,494
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: getSection: course1 (2010-02-12 10:19:37,494
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: getCourseOffering: course1 (2010-02-12 10:19:37,673
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: Looking for roles in section course1 (2010-02-12 10:19:37,952
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: TEST: getCourseOfferingMemberships(String courseOfferingEid)
>> (2010-02-12 10:19:37,953
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: getSection: course1 (2010-02-12 10:19:37,958
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: getCourseOffering: course1 (2010-02-12 10:19:38,234
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: Looking for roles in section course1 (2010-02-12 10:19:38,511
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: getCourseOffering: course1 (2010-02-12 10:19:38,512
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: TEST: getCanonicalCourse: course1 (2010-02-12 10:19:38,691
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> WARN:
>> org.sakaiproject.site.tool.SiteAction at 1f3f6ff.updateCourseSiteSections:
>> Problem encountered while editing the site participants. (2010-02-12
>> 10:19:38,708 http-8080-Processor23_org.sakaiproject.site.tool.SiteAction)
>> java.lang.NullPointerException
>> at
>> org.sakaiproject.coursemanagement.impl.provider.CourseSetRoleResolver.getUserRoles(CourseSetRoleResolver.java:57)
>> at
>> org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider.getUserRolesForGroup(CourseManagementGroupProvider.java:88)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:585)
>> at
>> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:296)
>> at
>> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:177)
>> at
>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
>> at
>> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
>> at
>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
>> at
>> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
>> at $Proxy4.getUserRolesForGroup(Unknown Source)
>> at
>> org.provider.FederatedAuthzGroupProvider.getUserRolesForGroup(FederatedAuthzGroupProvider.java:99)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:585)
>> at
>> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:296)
>> at
>> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198)
>> at $Proxy4.getUserRolesForGroup(Unknown Source)
>> at
>> org.sakaiproject.authz.impl.DbAuthzGroupService$DbStorage.refreshAuthzGroup(DbAuthzGroupService.java:1923)
>> at
>> org.sakaiproject.authz.impl.DbAuthzGroupService$DbStorage.save(DbAuthzGroupService.java:966)
>> at
>> org.sakaiproject.authz.impl.BaseAuthzGroupService.completeSave(BaseAuthzGroupService.java:592)
>> at
>> org.sakaiproject.authz.impl.BaseAuthzGroupService.save(BaseAuthzGroupService.java:578)
>> at
>> org.sakaiproject.authz.cover.AuthzGroupService.save(AuthzGroupService.java:140)
>> at
>> org.sakaiproject.site.tool.SiteAction.updateCourseSiteSections(SiteAction.java:5032)
>> at org.sakaiproject.site.tool.SiteAction.doFinish(SiteAction.java:4929)
>> at
>> org.sakaiproject.site.tool.SiteAction.doAdd_site_option(SiteAction.java:11471)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:585)
>> at
>> org.sakaiproject.cheftool.VelocityPortletPaneledAction.actionDispatch(VelocityPortletPaneledAction.java:593)
>> at
>> org.sakaiproject.cheftool.VelocityPortletPaneledAction.processAction(VelocityPortletPaneledAction.java:509)
>> at org.sakaiproject.cheftool.ToolServlet.doGet(ToolServlet.java:221)
>> at
>> org.sakaiproject.cheftool.VelocityPortletPaneledAction.doGet(VelocityPortletPaneledAction.java:1007)
>> at org.sakaiproject.cheftool.ToolServlet.doPost(ToolServlet.java:151)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
>> at org.sakaiproject.vm.ComponentServlet.service(ComponentServlet.java:56)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>> at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:565)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>> at
>> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679)
>> at
>> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:461)
>> at
>> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:364)
>> at
>> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
>> at
>> org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:459)
>> at
>> org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1346)
>> at
>> org.sakaiproject.portal.charon.handlers.ToolHandler.doTool(ToolHandler.java:163)
>> at
>> org.sakaiproject.portal.charon.handlers.ToolHandler.doGet(ToolHandler.java:86)
>> at
>> org.sakaiproject.portal.charon.handlers.ToolHandler.doPost(ToolHandler.java:63)
>> at
>> org.sakaiproject.portal.charon.SkinnableCharonPortal.doPost(SkinnableCharonPortal.java:1189)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>> at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:602)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>> at
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>> at
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
>> at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>> at
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>> at
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
>> at
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
>> at
>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
>> at
>> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
>> at
>> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
>> at
>> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
>> at
>> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
>> at java.lang.Thread.run(Thread.java:595)
>> INFO: Email.sendMail: from: admin at sakai.org subject: Official Course Site
>> created by Lisa Baker for 2010 to: admin at sakai.org.org headerTo:
>> admin at sakai.org.org (2010-02-12 10:19:38,910
>> http-8080-Processor23_org.sakaiproject.email.impl.BasicEmailService)
>> INFO: Synchronizing internal sections with externally defined sections in
>> site 2e14b8ea-5ba9-44f2-81f8-95b09e41225a (2010-02-12 10:19:38,917
>> http-8080-Processor23_org.sakaiproject.component.section.sakai.SectionManagerImpl)
>> DEBUG: getSection: course1 (2010-02-12 10:19:38,956
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: getCourseOffering: course1 (2010-02-12 10:19:39,149
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: FederatedAuthzGroupProvider :: checking
>> org.provider.LdapAdminAuthzGroupProvider at 1e72466 (2010-02-12 10:19:39,567
>> http-8080-Processor23_org.provider.FederatedAuthzGroupProvider)
>> getUserRolesForGroup: course1
>> DEBUG: org.provider.LdapAdminAuthzGroupProvider at 1e72466returned 0results
>> (2010-02-12 10:19:39,579
>> http-8080-Processor23_org.provider.FederatedAuthzGroupProvider)
>> DEBUG: FederatedAuthzGroupProvider :: checking
>> org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider at 13159f1
>> (2010-02-12 10:19:39,580
>> http-8080-Processor23_org.provider.FederatedAuthzGroupProvider)
>> DEBUG: ------------------CMGP.getUserRolesForGroup(course1) (2010-02-12
>> 10:19:39,580
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: course1 is mapped to 1 sections (2010-02-12 10:19:39,581
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: getSection: course1 (2010-02-12 10:19:39,581
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: getCourseOffering: course1 (2010-02-12 10:19:39,763
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: Looking for roles in section course1 (2010-02-12 10:19:39,943
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: getSectionMemberships: course1 (2010-02-12 10:19:39,943
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: Adding student1 to userRoleMap with role=Student (2010-02-12
>> 10:19:40,228
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding student2 to userRoleMap with role=Student (2010-02-12
>> 10:19:40,228
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding student3 to userRoleMap with role=Student (2010-02-12
>> 10:19:40,228
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding student4 to userRoleMap with role=Student (2010-02-12
>> 10:19:40,228
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding student5 to userRoleMap with role=Student (2010-02-12
>> 10:19:40,228
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding student6 to userRoleMap with role=Student (2010-02-12
>> 10:19:40,228
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding student7 to userRoleMap with role=Instructor (2010-02-12
>> 10:19:40,228
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: getSection: course1 (2010-02-12 10:19:40,228
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: getCourseOffering: course1 (2010-02-12 10:19:40,415
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: Looking for roles in section course1 (2010-02-12 10:19:40,697
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: TEST: getCourseOfferingMemberships(String courseOfferingEid)
>> (2010-02-12 10:19:40,698
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: getSection: course1 (2010-02-12 10:19:40,703
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: getCourseOffering: course1 (2010-02-12 10:19:40,896
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: Looking for roles in section course1 (2010-02-12 10:19:41,178
>> http-8080-Processor23_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: getCourseOffering: course1 (2010-02-12 10:19:41,178
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: TEST: getCanonicalCourse: course1 (2010-02-12 10:19:41,457
>> http-8080-Processor23_org.coursemanagement.LdapCourseManagementService)
>> WARN: .saveAzgs - group: course1 : java.lang.NullPointerException
>> (2010-02-12 10:19:41,463
>> http-8080-Processor23_org.sakaiproject.site.impl.BaseSiteService)
>> 
>> 
>> 
>> 
>> 
>> 
>> On Feb 11, 2010, at  1:30 PM, Zhen Qian wrote:
>> 
>> Nicola:
>> 
>> In CourseManagement, there is hierarchy of role resolvers:
>> SectionRoleResolver, CourseOfferingRoleResolver, and CourseSetRoleResolver.
>> I noticed that there are the latter two from your log message, however, the
>> SectionRoleResolver is missing.
>> 
>> Could you please check whether you have the role definition at the Section
>> level?
>> 
>> Thanks,
>> 
>> - Zhen
>> 
>> 
>> 
>> On Thu, 11 Feb 2010 13:10:14 -0500, Nicola Monat-Jacobs
>> <nicola at longsight.com> wrote:
>> 
>> Okay, I was able to figure out that Worksite Setup calls a bunch of CM
>> methods to find some sections for the current user, so I went ahead and
>> implemented getSections() so that the same courses would be returned there
>> too.
>> catalina.out indicated that these are found and added to the list of groups
>> for the current user:
>> DEBUG: findCourseOfferingRoles: nicola at longsight.com::sdfdfdff7537x7fs7f
>> (2010-02-11 13:03:24,295
>> http-8080-Processor19_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: adding offering role to Map: course1::Instructor (2010-02-11
>> 13:03:24,637
>> http-8080-Processor19_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: adding offering role to Map: course2::Instructor (2010-02-11
>> 13:03:24,637
>> http-8080-Processor19_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: adding offering role to Map: course3::Instructor (2010-02-11
>> 13:03:24,637
>> http-8080-Processor19_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: adding offering role to Map: course4::Instructor (2010-02-11
>> 13:03:24,637
>> http-8080-Processor19_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: TEST: getSections: course1 (2010-02-11 13:03:24,650
>> http-8080-Processor19_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: TEST: getSections: course4 (2010-02-11 13:03:24,836
>> http-8080-Processor19_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: TEST: getSections: course2 (2010-02-11 13:03:25,020
>> http-8080-Processor19_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: TEST: getSections: course3 (2010-02-11 13:03:25,213
>> http-8080-Processor19_org.coursemanagement.LdapCourseManagementService)
>> DEBUG: Found 4 groups for nicola at longsight.com from
>> resolver org.sakaiproject.coursemanagement.impl.provider.CourseOfferingRoleResolver
>> (2010-02-11 13:03:25,402
>> http-8080-Processor19_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding course1 to groupRoleMap with sakai roleInstructor for user
>> nicola at longsight.com (2010-02-11 13:03:25,402
>> http-8080-Processor19_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding course4 to groupRoleMap with sakai roleInstructor for user
>> nicola at longsight.com (2010-02-11 13:03:25,402
>> http-8080-Processor19_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding course2 to groupRoleMap with sakai roleInstructor for user
>> nicola at longsight.com (2010-02-11 13:03:25,402
>> http-8080-Processor19_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Adding course3 to groupRoleMap with sakai roleInstructor for user
>> nicola at longsight.com (2010-02-11 13:03:25,402
>> http-8080-Processor19_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: Found 0 groups for nicola at longsight.com from
>> resolver org.sakaiproject.coursemanagement.impl.provider.CourseSetRoleResolver
>> (2010-02-11 13:03:25,404
>> http-8080-Processor19_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> DEBUG: ______________getGroupRolesForUser={course1=Instructor,
>> course4=Instructor, course2=Instructor, course3=Instructor} (2010-02-11
>> 13:03:25,405
>> http-8080-Processor19_org.sakaiproject.coursemanagement.impl.provider.CourseManagementGroupProvider)
>> 
>> But still - nothing shown to the user in the GUI.
>> Can anyone let me know what I am missing here?
>> Thanks!
>> On Feb 11, 2010, at  9:30 AM, Nicola Monat-Jacobs wrote:
>> 
>> Hi All -
>> I've never worked with the CM API before, so I'm wondering perhaps if you
>> folks on the list can give me some guidance. We've got a Sakai 2.5.x
>> environment and we'd like a very simple CM implementation - á
>>http://confluence.sakaiproject.org/display/CM/1+Simple+Course+Pattern
>> We'd like the faculty to be able to go to Worksite Setup and see the courses
>> they have available to create/activate. However, although I can see in
>> catalina.out that our implementation of findCourseOfferingRoles() is
>> bringing up the relevant courses for Instructors, nothing is being shown to
>> them in the Worksite Setup tool. What method does Worksite Setup look to to
>> generate that list? It appears from the documentation that I don't need to
>> implement Sections if I don't want them.
>> Thanks!
>> Nicola Monat-Jacobs
>> nicola at longsight.com
>> _______________________________________________
>> sakai-dev mailing list
>> sakai-dev at collab.sakaiproject.org
>> http://collab.sakaiproject.org/mailman/listinfo/sakai-dev
>> 
>> TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe at collab.sakaiproject.org
>> with a subject of "unsubscribe"
>> 
>> 
>> 
>> _______________________________________________
>> sakai-dev mailing list
>> sakai-dev at collab.sakaiproject.org
>> http://collab.sakaiproject.org/mailman/listinfo/sakai-dev
>> 
>> TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe at collab.sakaiproject.org
>> with a subject of "unsubscribe"
>> 
>> _______________________________________________
>> sakai-dev mailing list
>> sakai-dev at collab.sakaiproject.org
>> http://collab.sakaiproject.org/mailman/listinfo/sakai-dev
>> 
>> TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe at collab.sakaiproject.org
>> with a subject of "unsubscribe"
>> 
>> _______________________________________________
>> sakai-dev mailing list
>> sakai-dev at collab.sakaiproject.org
>> http://collab.sakaiproject.org/mailman/listinfo/sakai-dev
>> 
>> TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe at collab.sakaiproject.org
>> with a subject of "unsubscribe"
>> 
> 
> 
> 
> -- 
> Jon Gorrono
> PGP Key: 0x5434509D -
> http{pgp.mit.edu:11371/pks/lookup?search=0x5434509D&op=index}
> Thawte Notary - https{www.thawte.com/cgi/personal/wot/directory.exe?node=312}
> GSWoT Introducer - {GSWoT:US75 5434509D Jon P. Gorrono <jpgorrono - gswot.org>}
> http{ats.ucdavis.edu}
> 
> Sent from Davis, CA, United States



More information about the sakai-dev mailing list