[MGNLUI-3428] Using the move action in config app doesn't work (and can crash the JVM) Created: 15/May/15 Updated: 19/May/15 Resolved: 18/May/15 |
|
| Status: | Closed |
| Project: | Magnolia UI |
| Component/s: | None |
| Affects Version/s: | 5.4 |
| Fix Version/s: | 5.4 |
| Type: | Bug | Priority: | Critical |
| Reporter: | Mikaël Geljić | Assignee: | Magnolia International |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | move-dialog | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Template: |
|
| Acceptance criteria: |
Empty
|
| Task DoD: |
[ ]*
Doc/release notes changes? Comment present?
[ ]*
Downstream builds green?
[ ]*
Solution information and context easily available?
[ ]*
Tests
[ ]*
FixVersion filled and not yet released
[ ] 
Architecture Decision Record (ADR)
|
| Bug DoR: |
[ ]*
Steps to reproduce, expected, and actual results filled
[ ]*
Affected version filled
|
| Date of First Response: |
| Description |
|
Apparently tries to do recursive cloning and ends up in a loop, see trace below 2015-05-15 14:35:47,577 ERROR fo.magnolia.ui.contentapp.browser.BrowserPresenter: An error occurred while executing action [move] info.magnolia.ui.api.action.ActionExecutionException: Action execution failed for action: move at info.magnolia.ui.api.action.AbstractActionExecutor.execute(AbstractActionExecutor.java:64) at info.magnolia.ui.contentapp.browser.BrowserPresenter.executeAction(BrowserPresenter.java:333) at info.magnolia.ui.contentapp.browser.BrowserPresenter.onActionbarItemClicked(BrowserPresenter.java:292) at info.magnolia.ui.actionbar.ActionbarPresenter.onActionbarItemClicked(ActionbarPresenter.java:205) at info.magnolia.ui.actionbar.ActionbarViewImpl$1.actionTrigger(ActionbarViewImpl.java:67) [...] Caused by: java.lang.NullPointerException at org.apache.derby.impl.sql.GenericStatement.hashCode(Unknown Source) at java.util.concurrent.ConcurrentHashMap.hash(ConcurrentHashMap.java:333) at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1125) at com.rits.cloning.FastClonerConcurrentHashMap.clone(FastClonerConcurrentHashMap.java:22) at com.rits.cloning.Cloner.fastClone(Cloner.java:114) [Here comes an infinite pile of clone calls...] at com.rits.cloning.Cloner.deepClone(Cloner.java:301) at info.magnolia.ui.contentapp.movedialog.MoveDialogPresenterImpl.prepareWorkbenchDefinition(MoveDialogPresenterImpl.java:199) at info.magnolia.ui.contentapp.movedialog.MoveDialogPresenterImpl.start(MoveDialogPresenterImpl.java:149) at info.magnolia.ui.contentapp.movedialog.action.OpenMoveDialogAction.execute(OpenMoveDialogAction.java:97) at info.magnolia.ui.api.action.AbstractActionExecutor.execute(AbstractActionExecutor.java:62) ... 109 more # # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x000000010b7fc75b, pid=777, tid=15107 # # JRE version: Java(TM) SE Runtime Environment (7.0_67-b01) (build 1.7.0_67-b01) # Java VM: Java HotSpot(TM) 64-Bit Server VM (24.65-b04 mixed mode bsd-amd64 compressed oops) # Problematic frame: # V [libjvm.dylib+0x3fc75b] Monitor::IUnlock(bool)+0xcd # # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again # # An error report file with more information is saved as: # /Users/mika/Applications/eclipse/Eclipse.app/Contents/MacOS/hs_err_pid777.log # # If you would like to submit a bug report, please visit: # http://bugreport.sun.com/bugreport/crash.jsp # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. # |
| Comments |
| Comment by Magnolia International [ 18/May/15 ] |
|
Fix proposed in fix/ Patch for personalization: diff --git a/magnolia-personalization-integration/src/main/java/info/magnolia/personalization/ui/TraitValueCompositeField.java b/magnolia-personalization-integration/src/main/java/info/magnolia/personalization/ui/TraitValueCompositeField.java index 07c4f4f..f83f363 100644 --- a/magnolia-personalization-integration/src/main/java/info/magnolia/personalization/ui/TraitValueCompositeField.java +++ b/magnolia-personalization-integration/src/main/java/info/magnolia/personalization/ui/TraitValueCompositeField.java @@ -16,6 +16,7 @@ package info.magnolia.personalization.ui; import info.magnolia.cms.i18n.I18nContentSupport; import info.magnolia.objectfactory.ComponentProvider; +import info.magnolia.ui.contentapp.DefinitionCloner; import info.magnolia.ui.form.field.CompositeField; import info.magnolia.ui.form.field.definition.ConfiguredFieldDefinition; import info.magnolia.ui.form.field.definition.FieldDefinition; @@ -27,7 +28,6 @@ import java.util.Map; import javax.inject.Inject; -import com.rits.cloning.Cloner; import com.vaadin.annotations.StyleSheet; import com.vaadin.data.Item; import com.vaadin.data.Property; @@ -47,6 +47,8 @@ import com.vaadin.ui.NativeButton; @StyleSheet("vaadin://traitaggregatorfield.css") public class TraitValueCompositeField extends CompositeField { + private final DefinitionCloner cloner = new DefinitionCloner(); + /** * Trait choose delegate interface. */ @@ -96,7 +98,7 @@ public class TraitValueCompositeField extends CompositeField { PropertysetItem fieldValues = getValue(); Property<?> property = new ObjectProperty<Item>(relatedFieldItem); - definition = new Cloner().deepClone(definition); + definition = cloner.deepClone(definition); ((ConfiguredFieldDefinition) definition).setName(name); Field<?> newField = createLocalField(definition, property, false); @@ -126,7 +128,7 @@ public class TraitValueCompositeField extends CompositeField { String propertyId = String.valueOf(entry.getKey()); Property<?> property = fieldValues.getItemProperty(propertyId); - FieldDefinition definition = new Cloner().deepClone(entry.getValue()); + FieldDefinition definition = cloner.deepClone(entry.getValue()); ((ConfiguredFieldDefinition) definition).setName(propertyId); Field<?> field = createLocalField(definition, property, false); diff --git a/magnolia-personalization-preview-app/src/main/java/info/magnolia/personalization/preview/ui/parameters/PreviewParametersPresenter.java b/magnolia-personalization-preview-app/src/main/java/info/magnolia/personalization/preview/ui/parameters/PreviewParametersPresenter.java index 6f32b98..06c653a 100644 --- a/magnolia-personalization-preview-app/src/main/java/info/magnolia/personalization/preview/ui/parameters/PreviewParametersPresenter.java +++ b/magnolia-personalization-preview-app/src/main/java/info/magnolia/personalization/preview/ui/parameters/PreviewParametersPresenter.java @@ -31,6 +31,7 @@ import info.magnolia.ui.api.app.AppController; import info.magnolia.ui.api.app.ChooseDialogCallback; import info.magnolia.ui.api.app.SubAppEventBus; import info.magnolia.ui.api.shell.Shell; +import info.magnolia.ui.contentapp.DefinitionCloner; import info.magnolia.ui.form.field.definition.ConfiguredFieldDefinition; import info.magnolia.ui.form.field.definition.FieldDefinition; import info.magnolia.ui.form.field.factory.FieldFactory; @@ -48,7 +49,6 @@ import javax.jcr.RepositoryException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.rits.cloning.Cloner; import com.vaadin.data.Item; import com.vaadin.data.Property; import com.vaadin.ui.AbstractField; @@ -64,6 +64,7 @@ public class PreviewParametersPresenter implements PreviewParametersView.Listene public static final String PERSONA_PROPERTY_NAME = "persona"; private final TraitChooserHelper helper; + private final DefinitionCloner cloner = new DefinitionCloner(); private AppController appController; @@ -208,7 +209,7 @@ public class PreviewParametersPresenter implements PreviewParametersView.Listene * caption and error messages before switching the definition name and enforce them to the resulting field. */ if (fieldDefinition instanceof ConfiguredFieldDefinition) { - ConfiguredFieldDefinition fieldDefinitionClone = new Cloner().deepClone((ConfiguredFieldDefinition) fieldDefinition); + ConfiguredFieldDefinition fieldDefinitionClone = cloner.deepClone((ConfiguredFieldDefinition) fieldDefinition); String caption = fieldDefinition.getLabel(); String requiredErrorMessage = fieldDefinition.getRequiredErrorMessage(); fieldDefinitionClone.setName(fieldName); diff --git a/pom.xml b/pom.xml index bbe4859..226f339 100644 --- a/pom.xml +++ b/pom.xml @@ -26,8 +26,8 @@ <properties> <javaVersion>1.7</javaVersion> - <magnoliaVersion>5.4-m3</magnoliaVersion> - <magnoliaUIVersion>5.4-m2</magnoliaUIVersion> + <magnoliaVersion>5.4-SNAPSHOT</magnoliaVersion> + <magnoliaUIVersion>5.4-SNAPSHOT</magnoliaUIVersion> <damVersion>2.0</damVersion> <scmTagPrefix>magnolia-personalization</scmTagPrefix> </properties> |