On Fri, Nov 21, 2014 at 9:54 AM, Stefan Bernsdorf <[email protected]> wrote:
Am 21.11.2014 09:11, schrieb Thomas Mortagne:
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.
The job is started from a macro class. So the wiki itself should be fully initialized.
There is something very weird in your stack trace, you clearly have a XWikiContext in the ExecutionContext as otherwise you would get a nullpointer in your own code before AbstractDataMigrationManager so what you have really does not make any sense to me. Without debugging I don't have much idea. Also the stack trace you have clearly indicate that this thread has been executed with in the XWikiContext a wiki that was not initialized. Does mycon.getDatabase() contains what you expect ?
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
_______________________________________________ users mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/users
-- Thomas Mortagne