2013-11-20 4 views
1

В Activiti все сложные объекты сериализуются и хранятся в базе данных с использованием сериализации Java. Я хочу переопределить это поведение для своих пользовательских типов и сохранить объекты как JSON. Это поможет мне получить больше контроля над сохраненным объектом.Проблема с переменной переменной Activiti

Я создал свой собственный VariableType для этого. Ниже приведен фрагмент кода

public class CustomVariableType extends ByteArrayType{ 
// overrided all the needed method. 
} 

Эти типы настроены в Activiti осущ конфигурации, как показано ниже:

public class WorklistConfigurationService { 

    private ProcessEngineConfigurationImpl processEngineConfigurationImpl; 
    private List<CustomVariableType> customVarsTypes; 
    public void init(){ 
     logger.debug("inside init"); 
     for(VOVariableType varType : voVars){ 
      logger.debug("adding type {}", varType.getTypeName()); 
      processEngineConfigurationImpl.getVariableTypes().addType(varType, 0); 
     } 
    } 
    // getter and setters... 
} 

Ниже, как я инъекционного значения выше в Спринг

<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 
    <bean id="worklistConfigurationService" 
     class="...WorklistConfigurationService" init-method="init"> 
     <property name="customVarTypes"> 
      <list> 
       <bean id="var1" class="...CustomVariableType"> 
        <constructor-arg type="java.lang.String" value="custom" /> 
        <constructor-arg type="java.lang.Class" 
         value="..CustomType" /> 
       </bean> 
      </list> 
     </property> 
     <property name="processEngineConfigurationImpl" ref="processEngineConfiguration" /> 
    </bean> 

Но новый Механизм сериализации никогда не используется двигателем activiti. Вместо этого используется стандартная сериализация по умолчанию. Может кто-то помочь в решении этой проблемы.

+0

Вы также переопределили метод 'isAbleToStore' в' CustomVariableType'? А что такое voVar? – matts

+0

@matts Я просто пытался скрыть имена моих бизнес-классов. переименовали voVars в пользовательские типы. Да, я переопределил метод isAbleToStore. – ajjain

+0

Я не знаю, как работает тот же кусок кода. Мой плохой, может кто-то закрыть эту проблему. BTW Я планирую поделиться этим с GIST, чтобы это можно было отнести. Это одна из наименее задокументированных, но очень полезных функций. Будет обновлен здесь, когда он будет выполнен с помощью GIST. Модератор, пожалуйста, сообщите, не разрешено ли использование кодовых ссылок. – ajjain

ответ

1

Я, наконец, получил первопричину проблемы. В ниже DeserializedObject класс является код

public class DeserializedObject { 

    Object deserializedObject; 
    byte[] originalBytes; 
    VariableInstanceEntity variableInstanceEntity; 

    public DeserializedObject(Object deserializedObject, byte[] serializedBytes, VariableInstanceEntity variableInstanceEntity) { 
    this.deserializedObject = deserializedObject; 
    this.originalBytes = serializedBytes; 
    this.variableInstanceEntity = variableInstanceEntity; 
    } 

    public void flush() { 
    // this first check verifies if the variable value was not overwritten with another object 
    if (deserializedObject==variableInstanceEntity.getCachedValue() && !variableInstanceEntity.isDeleted()) { 
     byte[] bytes = VOVariableType.serialize(deserializedObject, variableInstanceEntity); 
     if (!Arrays.equals(originalBytes, bytes)) { 
     variableInstanceEntity.setBytes(bytes); 
     } 
    } 
    } 
} 

Эта линия является причиной выпуска:

byte[] bytes = SerializableType.serialize(deserializedObject, variableInstanceEntity); 

код всегда использует SerializableType для сериализации объекта. По умолчанию для сериализации используется сериализация по умолчанию. И там вопрос ...

Теперь я не знаю, как двигаться дальше.

+0

Я тоже обсуждаю этот форум @ activiti. Пожалуйста, следуйте за беседой здесь http://forums.activiti.org/content/custom-serialization-complex-process-variable – ajjain

Смежные вопросы