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

Jon Gorrono jpgorrono at ucdavis.edu
Fri Feb 12 20:24:33 PST 2010


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 - á
> là 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