Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

spring, quartz job, transakcje

1 view
Skip to first unread message

RoB

unread,
May 29, 2006, 4:08:14 AM5/29/06
to
utworzylem sobie okresowe zadanie, ktore czysci baze z niepotrzebnych danych,
ale zalezy mi na spojnosci, zeby nie usunal czesci, slowem chce obudowac zadanie
okresowe transakcja, bez transakcji wszystko dziala, ale nie mam pewnosci, ze
np. w jakims przypadku sie nie sypnie, w zwiazku z tym zrobilem tak:

<bean id="deleteJobTarget"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>pl.smhost.manager.schedulers.impl.DeleteJob</value>
</property>
<property name="jobDataAsMap">
<map>
<entry key="tempDAO">
<ref bean="tempDAOImpl" />
</entry>
</map>
</property>
</bean>

<bean id="delteJob" class="org.springframework.transaction.interceptor.
TransactionProxyFactoryBean">
<property name="proxyInterfaces">
<list>
<value>org.quartz.Job</value>
</list>
</property>

<property name="target">
<ref bean="deleteJobTarget"/>
</property>

<property name="transactionManager">
<ref bean="transactionManager"/>
</property>

<property name="transactionAttributeSource">
<ref bean="transactionAttributeSource"/>
</property>
</bean>

<bean id="deleteJobTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="deleteJob" />
</property>
<property name="cronExpression">
<value>0 * * * * ?</value>
</property>
</bean>

i niestety dostaje wyjatek:

ERROR org.springframework.web.context.ContextLoader - Context initialization
failed
org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'deleteJobTrigger' defined in ServletContext resource [/WEB-INF/
smhost-schedulers.xml]: Error setting property values; nested exception is org.
springframework.beans.PropertyAccessExceptionsException:
PropertyAccessExceptionsException (1 errors); nested propertyAccessExceptions
are: [org.springframework.beans.TypeMismatchException: Failed to convert
property value of type [$Proxy1] to required type [org.quartz.JobDetail] for
property 'jobDetail']
PropertyAccessExceptionsException (1 errors)
org.springframework.beans.TypeMismatchException: Failed to convert property
value of type [$Proxy1] to required type [org.quartz.JobDetail] for property
'jobDetail'
at org.springframework.beans.BeanWrapperImpl.
doTypeConversionIfNecessary(BeanWrapperImpl.java:1103)
...

rozumiem przyczyne, bo zadanie ma atrybut: jobDataAsMap, ktory zawiera wszystkie
dao, a jak obuduje to transakcja, to tego nie mam, czy macie jakies pomysly jak
obudowac transakcja zadanie okresowe ?

z gory dzieki za jakiekolwiek sugestie
RoB

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

Tomek Kańka

unread,
May 29, 2006, 3:39:20 PM5/29/06
to
RoB <rob1980...@poczta.onet.pl> napisał(a)

>
> <bean id="delteJob" class="org.springframework.transaction.interceptor.
^^^^^^^^^^^^^

> <bean id="deleteJobTrigger"
> class="org.springframework.scheduling.quartz.CronTriggerBean">
> <property name="jobDetail">

^^^^^^^^^^^^^^


> <ref bean="deleteJob" />
> </property>
> <property name="cronExpression">
> <value>0 * * * * ?</value>
> </property>
> </bean>
>

Literówka?

--
Tomek Kańka

RoB

unread,
May 30, 2006, 2:27:12 AM5/30/06
to
> RoB <rob1980...@poczta.onet.pl> napisał(a)
> >      
> >       <bean id="delteJob" class="org.springframework.transaction.
interceptor.
>           ^^^^^^^^^^^^^
nie, literowka jest w tresci maila :)
w rzeczywistosci bean sie nazywa "expireJob", ale to by nie odzwierciedlalo
problemu przedstawionego w mailu :) zmienilem nazwe beana recznie i faktycznie
zrobilem literowke, sorki :)

ps. nadal kombinuje jak by to zrobic :)

pozdrawiam

Tomasz Woroniecki

unread,
May 30, 2006, 7:37:49 AM5/30/06
to

Podajesz jako target dla proxy beana 'deleteJobTarget' klasy
JobDetailBean, ale dla proxy ustawiasz interfejs org.quartz.Job, którego
ten bean nie implementuje. Wyjątek leci przy próbie ustawienia tego
proxy jako wartości property o nazwie 'jobDetail' beana
'deleteJobTrigger' (property ma typ JobDetail, a proxy go nie implementuje).

Nie znam się na Quartzu, ale chyba bez sensu jest ustawiać transakcyjne
proxy dla klasy JobDetailBean. Na mój gust, to powinieneś opakować
raczej pl.smhost.manager.schedulers.impl.DeleteJob w transakcję. Chyba
nie da się tego zrobić przy użyciu proxy bezpośrednio, ale możesz zrobić
dodatkowego managera opakowanego w transakcyjne proxy i jego wywoływać z
wnętrza pl.smhost.manager.schedulers.impl.DeleteJob.

--
Tomasz Woroniecki

0 new messages