[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