On Fri, Nov 21, 2014 at 8:42 AM, Stefan Bernsdorf <[email protected]> wrote: > Thomas, > it seems it has nothing to do with my context. > I tried to initialize my context with the xcontextProvider. It failed again. > > Instead I checked the source code of > AbstractDataMigrationManager.getXWikiContext which is shown in the stack > trace and it found this: > > protected XWikiContext getXWikiContext() > { > ExecutionContext context = execution.getContext(); > return (XWikiContext) context.getProperty("xwikicontext"); > } > > Seems that the Context is not injected properly when it runs in a job?
Again as I told you the ExecutionContext is properly initialized but the XWikiContext is something else, the Provider among other things create and set a XWikiContext when there is none. Now what is wrong is that you end up in AbstractDataMigrationManager in your thread since its supposed to be called only the first time a request is done. When do you start your job exactly ? Are you sure the database is ready when you do (it's not before the first access to the wi trough the browser) ? You can listen to org.xwiki.bridge.event.ApplicationReadyEvent to be notified when it's ok to use the database. > > > Am 21.11.2014 07:49, schrieb Thomas Mortagne: > >> On Thu, Nov 20, 2014 at 10:45 PM, Stefan Bernsdorf >> <[email protected]> wrote: >>> >>> Thomas, >>> thanks. I managed to build my thread as an XWiki Job and also managed to >>> add >>> it to the JobExecutor. >>> However, my initial problem still persists. >>> I am not able to add an attachment to a document in this job. >>> Find the stack trace below. Looking at the source of >>> XWikiHibernateBaseStore >>> tells me, it has something to do with the Execution context of the Job, >>> but >>> this should be managed by the job executor, right? >>> This is my code snip to add the attachment: >>> XWikiContext mycon = (XWikiContext) >>> execution.getContext().getProperty("xwikicontext"); >> >> The ExecutionContext is initialized automatically but XWikiContext is >> something else and you should never try to get it directly from the >> ExecutionContext but use the provider instead as in: >> >> @Inject >> private Provider<XWikiContext> xcontextProvider; >> >>> XWikiDocument doc=mycon.getWiki().getDocument(m_adoc, >>> mycon); >>> XWikiAttachment att=doc.getAttachment(m_file); >>> if (att!=null) { >>> doc.deleteAttachment(att,mycon); >>> att=null; >>> } >>> if (att==null) { >>> att=doc.addAttachment(m_file,ins ,mycon); >>> XWikiAttachmentStoreInterface >>> ai=doc.getAttachmentStore(mycon); >>> XWikiHibernateAttachmentStore >>> hib=(XWikiHibernateAttachmentStore)ai; >>> hib.beginTransaction(mycon); >>> ai.saveAttachmentContent(att, mycon, true); >>> hib.endTransaction(mycon,true); >>> att.updateContentArchive(mycon); >>> } >>> >>> >>> This is the stack trace: >>> com.xpn.xwiki.XWikiException: Error number 3301 in 3: Exception while >>> switching to database xwiki >>> at >>> >>> com.xpn.xwiki.store.XWikiHibernateBaseStore.setDatabase(XWikiHibernateBaseStore.java:739) >>> ~[xwiki-platform-legacy-oldcore-6.2.1.jar:na] >>> at >>> >>> com.xpn.xwiki.store.XWikiHibernateBaseStore.beginTransaction(XWikiHibernateBaseStore.java:911) >>> ~[xwiki-platform-legacy-oldcore-6.2.1.jar:na] >>> at >>> >>> com.xpn.xwiki.store.XWikiHibernateBaseStore.beginTransaction(XWikiHibernateBaseStore.java:811) >>> ~[xwiki-platform-legacy-oldcore-6.2.1.jar:na] >>> at >>> org.centauron.xwiki.help.XWikiUpload.doCommand(XWikiUpload.java:68) >>> ~[centauron_xwiki.jar:na] >>> at >>> org.centauron.ant.TestScript.executeExtraData(TestScript.java:208) >>> ~[centauron_xwiki.jar:na] >>> at org.centauron.ant.TestProcess.doPost(TestProcess.java:249) >>> ~[centauron_xwiki.jar:na] >>> at org.centauron.ant.TestProcess.start(TestProcess.java:228) >>> ~[centauron_xwiki.jar:na] >>> at >>> org.centauron.xwiki.job.XWikiAntJob.internalCall(XWikiAntJob.java:112) >>> [centauron_xwiki.jar:na] >>> at org.centauron.xwiki.job.XWikiAntJob.doStart(XWikiAntJob.java:98) >>> [centauron_xwiki.jar:na] >>> at org.centauron.xwiki.job.XWikiAntJob.run(XWikiAntJob.java:41) >>> [centauron_xwiki.jar:na] >>> at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) >>> [na:1.8.0_05] >>> at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown >>> Source) >>> [na:1.8.0_05] >>> at java.lang.Thread.run(Unknown Source) [na:1.8.0_05] >>> Caused by: java.lang.NullPointerException: null >>> at >>> >>> com.xpn.xwiki.store.migration.AbstractDataMigrationManager.getXWikiContext(AbstractDataMigrationManager.java:282) >>> ~[xwiki-platform-legacy-oldcore-6.2.1.jar:na] >>> at >>> >>> com.xpn.xwiki.store.migration.AbstractDataMigrationManager.getDataMigrationStatus(AbstractDataMigrationManager.java:406) >>> ~[xwiki-platform-legacy-oldcore-6.2.1.jar:na] >>> at >>> >>> com.xpn.xwiki.store.migration.AbstractDataMigrationManager.getDatabaseStatus(AbstractDataMigrationManager.java:548) >>> ~[xwiki-platform-legacy-oldcore-6.2.1.jar:na] >>> at >>> >>> com.xpn.xwiki.store.migration.AbstractDataMigrationManager.checkDatabase(AbstractDataMigrationManager.java:516) >>> ~[xwiki-platform-legacy-oldcore-6.2.1.jar:na] >>> at >>> >>> com.xpn.xwiki.store.XWikiHibernateBaseStore.setDatabase(XWikiHibernateBaseStore.java:735) >>> ~[xwiki-platform-legacy-oldcore-6.2.1.jar:na] >>> ... 12 common frames omitted >>> Am 20.11.2014 10:31, schrieb Thomas Mortagne: >>> >>>> Everything in XWiki is based on JobExecutor now so I can assure you it >>>> does not wait. Maybe your job is doing something slow in initialize. >>>> >>>> On Thu, Nov 20, 2014 at 10:24 AM, Stefan Bernsdorf >>>> <[email protected]> wrote: >>>>> >>>>> Thomas, >>>>> if I start a job using >>>>> jobExecutor.execute("antjob", req); >>>>> it waits until the job is finished. >>>>> >>>>> Am 20.11.2014 09:44, schrieb Thomas Mortagne: >>>>> >>>>>> As indicated in the javadoc of JobExecutor all jobs are executed >>>>>> asychronously. You actually need to use Job#join when you want to >>>>>> wait. >>>>>> >>>>>> On Thu, Nov 20, 2014 at 9:38 AM, Stefan Bernsdorf >>>>>> <[email protected]> wrote: >>>>>>> >>>>>>> Hi, >>>>>>> I have seen that the jobManager is deprecated since 6.1. >>>>>>> But how would I schedule a job and return immediately using the >>>>>>> jobExecutor? >>>>>>> (Using the jobManager it would be something like : >>>>>>> Job job = jobManager.addJob("jobtype", request)) >>>>>>> Thanks , Stefan. >>>>>>> _______________________________________________ >>>>>>> users mailing list >>>>>>> [email protected] >>>>>>> http://lists.xwiki.org/mailman/listinfo/users >>>>>> >>>>>> >>>>>> >>>>> _______________________________________________ >>>>> users mailing list >>>>> [email protected] >>>>> http://lists.xwiki.org/mailman/listinfo/users >>>> >>>> >>>> >>> >>> _______________________________________________ >>> users mailing list >>> [email protected] >>> http://lists.xwiki.org/mailman/listinfo/users >> >> >> > > _______________________________________________ > users mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/users -- Thomas Mortagne _______________________________________________ users mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/users
