Hi René,

I already tried both, but it doesn't make any difference. If there is no
transactionManager defined with the default name or the given name,
the<tx:annotation-driven/>element would have caused an
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No bean named 'transactionManager' is defined exception at deploy time,
which is not the case. The propagation=Propagation.REQUIRED,
readOnly=falsesettings are the defaults of
@Transactional, so that explains why that doesn't make a difference...

Any other suggestions?

Regards,
Bart

On Fri, Aug 14, 2009 at 11:00, Rene van Wijk
<rw...@transfer-solutions.com>wrote:

>  Ok here it goes, next try
>
>
>
> 1) Add the attribute transaction-manager to the annotation-driven element
> (it should default to the name given below - but just in case)
>
> <tx:annotation-driven transaction-manager="transactionManager"/>
>
>
>
> 2) Add transaction advice to the @Transaction annotations in the class, for
> example
>
> @Transactional(propagation=Propagation.REQUIRED, readOnly=false)
>
>
>
> Indicates that the current method must run within a transaction. If an
> existing transaction is in progress, the method will run within that
> transaction. Otherwise, a new transaction will be started.
>
>
>
> You can probably also use propagation=Propagation.REQUIRES_NEW. Indicates
> that the current method must run within its own transaction. A new
> transaction is started and if an existing transaction is in progress, it
> will be suspended for the duration of the method. If using
> JTATransactionManager, access to TransactionManager is required.
>
>
>
>
> -----Original message-----
> *From:* Bart Kummel <bkum...@gmail.com>
> *Sent:* Fri 14-08-2009 09:25
> *To:* MyFaces Discussion <users@myfaces.apache.org>;
> *CC:* Rene van Wijk <rw...@transfer-solutions.com>;
> *Subject:* Re: [Orchestra] Transaction not committed
>
> Hi René,
>
> Thanks for your suggestion. I have these settings already, but I put them
> in my persistence.xml, as I think that's where they belong. But I tried
> putting them in the applicationContext.xml, to see if it makes any
> difference. Unfortunately it doesn't. Any other suggestions?
>
> By the way, for putting these settings in the applicationContext.xml, the
> appropriate syntax would be:
>     <bean 
> id="entityManagerFactory"class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
>       <property name="persistenceUnitName" value="MIAS-EJB"/>
>       <property name="jpaProperties">
>         <props>
>           <prop key="eclipselink.logging.level">FINEST</prop>
>           <prop key="eclipselink.target-database">Derby</prop>
>           <prop key="eclipselink.target-server">SunAS9</prop>
>           <prop key="eclipselink.cache.shared.default">false</prop>
>         </props>
>       </property>
>     </bean>
>
> But, as I already said, these settings can be put in the persistence.xmlas 
> well (although the syntax is slightly different there). I think it does
> make more sense to put the settings for the persistence unut in
> persistence.xml.
>
> Best regards,
> Bart Kummel
>
> On Mon, Aug 10, 2009 at 15:15, Rene van Wijk <rw...@transfer-solutions.com
> > wrote:
>
> This has probably something to do with you're persistence configuration. If
> you are using EclipseLink, try setting some properties such as
>
>
>
>
> <bean id="entityManagerFactory"
> class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
>   <property name="jpaProperties">
>     <props>
>       <prop key="eclipselink.logging.level" value="FINEST"/>
>       <prop key="eclipselink.target-database" value="Database"/>
>
>       <prop key="eclipselink.target-server" value="Server"/>
>       <prop key="eclipselink.cache.shared.default" value="false"/>
>     </props>
>   </property>
>
>   <property name="persistenceUnitName" value="MIAS-EJB"/>
>
> </bean>
>
>
>
> The last property is the most important, that is, set cache sharing to
> false. This does not function properly on most servers (the server where it
> does is OC4J)
>
>
>
> -----Original message-----
> *From:* Bart Kummel <b...@kummelweb.nl>
> *Sent:* Sun 09-08-2009 16:34
> *To:* MyFaces Discussion <users@myfaces.apache.org>;
> *Subject:* [Orchestra] Transaction not committed
>
> Hi,
>
> I have set up an application with MyFaces Orchestra. It seems to work fine,
> except that no transaction is committed at the end of the conversation. I
> tried both "access" and "manual" conversation scopes, both with the same
> result. I'm probably missing something. Can someone assist me a little bit
> here? Below are some snippets from the most important files in my project.
>
> Best regards,
> Bart Kummel
>
> *applicationContext.xml:
> *<?xml version="1.0" encoding="UTF-8"?>
>   <beans ...>
>
>     <!-- 1. initialization of all orchestra modules (required for core15
> module) -->
>     <import resource="classpath*:/META-INF/spring-orchestra-init.xml" />
>
>     <!-- 2. the conversation scopes -->
>     <bean
> class="org.springframework.beans.factory.config.CustomScopeConfigurer">
>       <property name="scopes">
>         <map>
>           <entry key="conversation.manual">
>             <bean
> class="org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope">
>               <property name="timeout" value="30" />
>               <property name="advices">
>                 <list>
>                   <ref bean="persistentContextConversationInterceptor"/>
>                 </list>
>               </property>
>             </bean>
>           </entry>
>
>           <entry key="conversation.access">
>             <bean
> class="org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope">
>               <property name="timeout" value="30" />
>               <property name="advices">
>                 <list>
>                   <ref bean="persistentContextConversationInterceptor"/>
>                 </list>
>               </property>
>               <property name="lifetime" value="access"/>
>             </bean>
>           </entry>
>         </map>
>       </property>
>     </bean>
>
>     <!-- 3. the "entity manager" manager -->
>     <bean id="persistentContextConversationInterceptor"
>
> class="org.apache.myfaces.orchestra.conversation.spring.PersistenceContextConversationInterceptor">
>       <property name="persistenceContextFactory"
> ref="persistentContextFactory"/>
>     </bean>
>
>     <!-- 4. conversation - persistence adapter -->
>     <bean id="persistentContextFactory"
>
> class="org.apache.myfaces.orchestra.conversation.spring.JpaPersistenceContextFactory">
>       <property name="entityManagerFactory" ref="entityManagerFactory"/>
>     </bean>
>
>     <!-- 5. persistence -->
>     <bean
> class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
>
>     <tx:annotation-driven />
>
>     <bean id="transactionManager"
> class="org.springframework.orm.jpa.JpaTransactionManager">
>       <property name="entityManagerFactory" ref="entityManagerFactory"/>
>     </bean>
>
>     <bean id="entityManagerFactory"
>         class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
>       <property name="persistenceUnitName" value="MIAS-EJB"/>
>     </bean>
>
>     <bean name="editKidController"
>           class="inc.monsters.mias.controller.EditKidController"
>           scope="conversation.manual"
>           autowire="byName"/>
>     <bean name="editKidForm"
>           class="inc.monsters.mias.backing.EditKidForm"
>           scope="request"
>           autowire="byName"/>
>     <bean name="editScaredForm"
>           class="inc.monsters.mias.backing.EditScaredForm"
>           scope="request"
>           autowire="byName"/>
>     <bean name="kidsTable"
>           class="inc.monsters.mias.backing.KidsTable"
>           scope="request"
>           autowire="byName"/>
>
>     <!-- Enable injection for @EJB annotations -->
>     <context:component-scan base-package="inc.monsters.mias" />
>
>   </beans>*
>
> EditKidController.java:
> *package inc.monsters.mias.controller;
>
> public class EditKidController {
>     @EJB(mappedName="mias/KidService")
>     private KidService service;
>     private Kid selectedKid;
>
>     public Kid getSelectedKid() {
>         if(null == selectedKid) {
>             FacesContext context = FacesContext.getCurrentInstance();
>             selectedKid =
> (Kid)context.getExternalContext().getRequestMap().get("selectedKid");
>         }
>         return selectedKid;
>     }
>
>     public void setSelectedKid(Kid selectedKid) {
>         this.selectedKid = selectedKid;
>     }
>
>     @Transactional
>     public void saveSelected(ActionEvent event) {
>         Kid k = getSelectedKid();
>         log.fine("Saving kid " + k.getId() + ": " + k.getFirstName() + " "
> + k.getLastName() + ".");
>         if(service.existsKid(k)) {
>             service.updateKid(k);
>         } else {
>             service.addKid(k);
>         }
>     }
>
>     @Transactional
>     public void updateScareData(ActionEvent event) {
>         Kid k = getSelectedKid();
>         k.getEmployee().setKidsScared(k.getEmployee().getKidsScared() + 1);
>     }
>
>     public void endConversationAndSave(ActionEvent event) {
>         saveSelected(event);
>         endConversation(event);
>     }
>
>     public void endConversation(ActionEvent event) {
>         Conversation.getCurrentInstance().invalidate();
>     }
> }
>
> *EditKidForm.java:*
> package inc.monsters.mias.backing;
>
> @ViewController(viewIds={"EditKid.xhtml"})
> public class EditKidForm {
>     private EditKidController editKidController;
>
>     public EditKidController getEditKidController() {
>         return editKidController;
>     }
>
>     public void setEditKidController(EditKidController controller) {
>         this.editKidController = controller;
>     }
> }
>
> *EditKid.xhtml:*
> <?xml version="1.0" encoding="UTF-8" ?>
> <tr:document ...>
>
> <ui:composition template="templates/template.xhtml">
>   <ui:define name="title">Edit kid</ui:define>
>   <ui:define name="content">
>     <tr:panelFormLayout>
>       ...
>         <f:facet name="footer">
>           <tr:panelButtonBar halign="right">
>             <tr:commandButton text="#{msg.apply}" id="btnApply"
> partialSubmit="false" action="apply"
>
> actionListener="#{editKidForm.editKidController.saveSelected}"/>
>             <tr:commandButton text="#{msg.ok}" action="ok"
>
> actionListener="#{editKidForm.editKidController.endConversationAndSave}" />
>             <tr:commandButton text="#{msg.cancel}" action="cancel"
> immediate="true"
>
> actionListener="#{editKidForm.editKidController.endConversation}" />
>           </tr:panelButtonBar>
>         </f:facet>
>       </tr:panelFormLayout>
>   </ui:define>
> </ui:composition>*
>
> *The EditKid.xhtml page is called from the *Kids.xhtml* page:
> <?xml version="1.0" encoding="UTF-8" ?>
> <tr:document ...>
>
> <ui:composition template="templates/template.xhtml">
>   <ui:define name="title">Overview of kids!</ui:define>
>   <ui:define name="content">
>       <tr:table var="kid" value="#{kidsTable.kids}" rows="20" id="kids"
>                 rowBandingInterval="1" horizontalGridVisible="false"
>                 allDetailsEnabled="true" rowSelection="multiple"
>                 binding="#{kidsTable.table}"
>                 selectionListener="#{kidsTable.selectionChanged}"
>                 autoSubmit="true" partialSubmit="true" >
>         <mias:column ... />
>         ...
>         <mias:column columnName="edit" headerName="emptyTableHeader"
> custom="true">
>           <tr:commandLink action="edit" immediate="true">
>             <tr:image source="../images/pencil.png"
> inlineStyle="border-width: 0px;" />
>             <tr:setActionListener to="#{requestScope.selectedKid}"
> from="#{kid}"/>
>           </tr:commandLink>
>         </mias:column>
>      </tr:table>
>   </ui:define>
> </ui:composition>
>
> </tr:document>
>
>
>
>
>

Reply via email to