2016-06-30 3 views
0

Je le fichier de ressources dans l'explorateur si je tente de modifier ce fichier de ressources par java.lang.IllegalStateException domaine édition transaction I am getting exception asEmf Ecrire transaction

: Impossible de modifier ensemble des ressources sans une transaction d'écriture à org.eclipse.emf.transaction.impl.TransactionChangeRecorder.assertWriting (TransactionChangeRecorder.java:348) à org.eclipse.emf.transaction.impl.TransactionChangeRecorder.appendNotification (TransactionChangeRecorder.java:302) à org.eclipse. emf.transaction.impl.TransactionChangeReco rder.processObjectNotification (TransactionChangeRecorder.java:284) à org.eclipse.emf.transaction.impl.TransactionChangeRecorder.notifyChanged (TransactionChangeRecorder.java:240) à org.eclipse.emf.common.notify.impl.BasicNotifierImpl. eNotify (BasicNotifierImpl.java:374) à org.eclipse.emf.common.notify.impl.NotificationImpl.dispatch (NotificationImpl.java:1027) à org.eclipse.emf.common.notify.impl.NotifyingListImpl. addUnique (NotifyingListImpl.java:299) à org.eclipse.emf.common.util.AbstractEList.add (AbstractEList.java:303)

Répondre

2

Je crois que le problème est que vous essayez d'exécuter une transaction d'écriture dans une autre transaction d'écriture. Utiliser une commande devrait faire l'affaire. Cela peut être fait avec le EditingDomain de votre modèle: (Assurez-vous que org.eclipse.emf.transaction est dans vos dépendances)

import org.eclipse.emf.transaction.TransactionalEditingDomain; 
import org.eclipse.emf.transaction.util.TransactionUtil; 

public void doEditing(EObject element) { 
    // Make sure your element is attached to a source, otherwise this will return null 
    TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(element); 
    domain.getCommandStack().execute(new RecordingCommand(domain) { 

     @Override 
     protected void doExecute() { 
      // Implement your write operations here, 
      // for example: set a new name 
      element.eSet(element.eClass().getEStructuralFeature("name"), "aNewName"); 
     } 
    }); 
}