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

Reply via email to