[Building Sakai] SAK-23733: Nightly mysql trunk is down... circular spring reference?

Noah Botimer nbotimer at unicon.net
Fri Jul 12 14:12:39 PDT 2013


Thanks for reporting this and offering a solution. It's odd I didn't run into this in testing. It'd be nice to have an overall cleaner solution, but it would likely be more disruptive. I have no objection to using the ComponentManager so I will take a look at applying/committing this patch shortly. 

Thanks,
-Noah

On Jul 12, 2013, at 12:49 PM, Kevin Takacs <ktakacs at anisakai.com> wrote:

> I also ran into this when testing r126908 in SAK-23733 against a local 2.9.x instance.  The following stack trace occurs in catalina.out and then all the beans are destroyed:
> 
> Cannot resolve reference to bean 'org_sakaiproject_service_gradebook_GradebookService' while setting bean property 'gradebookService'; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'org_sakaiproject_service_gradebook_GradebookService': org.springframework.beans.factory.FactoryBeanNotInitializedException: FactoryBean is not fully initialized yet
>     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480)
>     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
>     at java.security.AccessController.doPrivileged(Native Method)
>     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
>     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
>     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
>     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
>     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
>     at org.sakaiproject.util.NoisierDefaultListableBeanFactory.getBean(NoisierDefaultListableBeanFactory.java:112)
>     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
>     at org.sakaiproject.util.NoisierDefaultListableBeanFactory.preInstantiateSingletons(NoisierDefaultListableBeanFactory.java:73)
>     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
>     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
>     at org.sakaiproject.component.impl.SpringCompMgr.init(SpringCompMgr.java:160)
>     at org.sakaiproject.component.cover.ComponentManager.getInstance(ComponentManager.java:98)
>     at org.sakaiproject.component.cover.ComponentManager.get(ComponentManager.java:107)
>     at org.sakaiproject.component.cover.ServerConfigurationService.getInstance(ServerConfigurationService.java:52)
>     at org.sakaiproject.util.RequestFilter.init(RequestFilter.java:811)
>     at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:277)
>     at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
>     at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:382)
>     at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:103)
>     at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4638)
>     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5294)
>     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
>     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
>     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
>     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
>     at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:962)
>     at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1603)
>     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>     at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>     at java.lang.Thread.run(Thread.java:680)
> 
> I was able to fix this locally by removing the gradebookService injection in edu-services/gradebook-service/sakai-pack/src/webapp/WEB-INF/components.xml and adding a ComponentManager call to GradebookExternalAssessmentServiceImpl.  It's probably not the most elegant solution but now I can get tomcat to start up again.  I will add this to a comment in SAK-23733 for future reference but here is my diff:
> 
> Index: gradebook-service/impl/src/java/org/sakaiproject/component/gradebook/GradebookExternalAssessmentServiceImpl.java
> ===================================================================
> --- gradebook-service/impl/src/java/org/sakaiproject/component/gradebook/GradebookExternalAssessmentServiceImpl.java    (revision 126981)
> +++ gradebook-service/impl/src/java/org/sakaiproject/component/gradebook/GradebookExternalAssessmentServiceImpl.java    (working copy)
> @@ -42,6 +42,7 @@
>  import org.hibernate.HibernateException;
>  import org.hibernate.Query;
>  import org.hibernate.Session;
> +import org.sakaiproject.component.cover.ComponentManager;
>  import org.sakaiproject.component.cover.ServerConfigurationService;
>  import org.sakaiproject.service.gradebook.shared.AssessmentNotFoundException;
>  import org.sakaiproject.service.gradebook.shared.AssignmentHasIllegalPointsException;
> @@ -78,6 +79,10 @@
>          this.gradebookService = gradebookService;
>      }
>  
> +    public GradebookService getGradebookService(){
> +        return (GradebookService) ComponentManager.get("org.sakaiproject.service.gradebook.GradebookService");
> +    }
> +
>      private ConcurrentHashMap<String, ExternalAssignmentProvider> externalProviders =
>              new ConcurrentHashMap<String, ExternalAssignmentProvider>();
>  
> @@ -543,7 +548,7 @@
>          // identified as items under its authority. This maintains the behavior prior to the grouping support
>          // introduced for the 2.9 release (SAK-11485 and SAK-19688), where a tool that does not have a provider
>          // implemented does not have its items filtered for student views and grading.
> -        List<org.sakaiproject.service.gradebook.shared.Assignment> gbAssignments = gradebookService.getViewableAssignmentsForCurrentUser(gradebookUid);
> +        List<org.sakaiproject.service.gradebook.shared.Assignment> gbAssignments = getGradebookService().getViewableAssignmentsForCurrentUser(gradebookUid);
>          for (org.sakaiproject.service.gradebook.shared.Assignment assignment : gbAssignments) {
>              String id = assignment.getExternalId();
>              if (assignment.isExternallyMaintained() && !providedAssignments.contains(id) && !visibleAssignments.containsKey(id)) {
> @@ -603,7 +608,7 @@
>          //             but are not reported by any provider should be included for everyone. This is
>          //             to accommodate tools that use the external assessment mechanisms but have not
>          //             implemented an ExternalAssignmentProvider.
> -        List<org.sakaiproject.service.gradebook.shared.Assignment> allAssignments = gradebookService.getAssignments(gradebookUid);
> +        List<org.sakaiproject.service.gradebook.shared.Assignment> allAssignments = getGradebookService().getAssignments(gradebookUid);
>          for (org.sakaiproject.service.gradebook.shared.Assignment assignment : allAssignments) {
>              String id = assignment.getExternalId();
>              if (assignment.isExternallyMaintained() && !providedAssignments.contains(id)) {
> Index: gradebook-service/sakai-pack/src/webapp/WEB-INF/components.xml
> ===================================================================
> --- gradebook-service/sakai-pack/src/webapp/WEB-INF/components.xml    (revision 126981)
> +++ gradebook-service/sakai-pack/src/webapp/WEB-INF/components.xml    (working copy)
> @@ -63,7 +63,6 @@
>              <ref bean="org_sakaiproject_tool_gradebook_facades_Authn" />
>          </property>
>          <property name="eventTrackingService" ref="org_sakaiproject_tool_gradebook_facades_EventTrackingService" />
> -        <property name="gradebookService" ref="org_sakaiproject_service_gradebook_GradebookService" />
>      </bean>
>  
>      <bean id="org_sakaiproject_service_gradebook_GradebookServiceTarget"
> 
> 
> 
> 
> On Thu, Jul 11, 2013 at 11:45 PM, JUAN JOSé MEROñO SáNCHEZ <jjmerono at um.es> wrote:
>> Nightly mysql trunk is down [1] !! You could see error details in log
>> file [2].
>> 
>> It seems that the problem could be a circular spring reference in
>> gradebook's components.xml.
>> org_sakaiproject_service_gradebook_GradebookService >>
>> org_sakaiproject_service_gradebook_GradebookServiceTarget >>
>> org_sakaiproject_service_gradebook_GradebookExternalAssessmentService >>
>> org_sakaiproject_service_gradebook_GradebookExternalAssessmentServiceTarget
>>  >> org_sakaiproject_service_gradebook_GradebookService
>> 
>> The circular reference was introduced in rev. 126908 related to
>> SAK-23733 [3]
>> But, in the other hand, nightly oracle trunk is working right [4] !!!
>> 
>> Any idea why?
>> 
>> [1] http://nightly2.sakaiproject.org:8085/portal
>> [2] http://nightly2.sakaiproject.org/logs/tomcat-contrib/catalina.out
>> [3]
>> https://source.sakaiproject.org/viewsvn/edu-services/trunk/gradebook-service/sakai-pack/src/webapp/WEB-INF/components.xml?r1=100087&r2=126908
>> [4] http://nightly2.sakaiproject.org:8082/portal
>> 
>> Thanks !!
>> 
>> _______________________________________________
>> 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"
> 
> 
> 
> -- 
> Kevin Takacs
> Software Engineer
> O 602-337-8408
> M 480-544-1972
> 
> _______________________________________________
> 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"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://collab.sakaiproject.org/pipermail/sakai-dev/attachments/20130712/e7034030/attachment.html 


More information about the sakai-dev mailing list