This one seems more related to the OID Marshaller than with JDO.
Perhaps Dan can give some light on it. El 03/01/2014, a las 10:14, [email protected] escribió: > > I am using ISIS 1.3.0 with JDO 3.0.1, Data Nucleus 3.2.4 > > > Using JDO Application Identity strategy, I have a composite PK class with two > attributes(PK fields of type String). > > As per the JDO specifications, PK class has overridden the following methods: > hascode, equals and toString. > > And it has Constructor which takes String parameter. > > Problem is that for some Entities OID is not found if any of the PK fields > has the same character which is used to join in the toString method > For example: Consider the below PK class: > public class OmGeoLocationPK implements java.io.Serializable { > > public String locationId; > public String orgId; > public OmGeoLocationPK() { > } > > public OmGeoLocationPK(String locationId, String orgId) { > this.locationId = locationId; > this.orgId = orgId; > } > public OmGeoLocationPK(String key){ > StringTokenizer token = new StringTokenizer(key, "_"); > this.locationId = token.nextToken(); > this.orgId = token.nextToken(); > > } > > public String getLocationId() { > return this.locationId; > } > > public void setLocationId(String locationId) { > this.locationId = locationId; > } > > public String getOrgId() { > return this.orgId; > } > > public void setOrgId(String orgId) { > this.orgId = orgId; > } > > public String toString() { > return "" + locationId + "_" + this.orgId; > } > > @Override > public int hashCode() { > final int prime = 31; > int result = 1; > result = prime * result > + ((locationId == null) ? 0 : locationId.hashCode()); > result = prime * result + ((orgId == null) ? 0 : orgId.hashCode()); > return result; > } > > @Override > public boolean equals(Object obj) { > if (this == obj) > return true; > if (obj == null) > return false; > if (getClass() != obj.getClass()) > return false; > OmGeoLocationPK other = (OmGeoLocationPK) obj; > if (locationId == null) { > if (other.locationId != null) > return false; > } else if (!locationId.equals(other.locationId)) > return false; > if (orgId == null) { > if (other.orgId != null) > return false; > } else if (!orgId.equals(other.orgId)) > return false; > return true; > } > > > > } > > Here in the toString method "_" character used to join two PK fields > (locationId and orgId). > > So, if locationId or orgId has the chracter "_" in its S > tring value, Splitting with StringTokenizer is not evaluating the correct PK > feilds values and it throws the following exception: > > > Caused by: org.apache.isis.core.runtime.persistence.ObjectNotFoundException: > Object not found in store with oid > OmSite:com.wipro.wess.OmGeoLocationPK_ORG_FILTER_TEST_ATL > at > org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault.adapterFor(AdapterManagerDefault.java:308) > at > org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento$Type$2.recreateAdapter(ObjectAdapterMemento.java:112) > at > org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento$Type.getAdapter(ObjectAdapterMemento.java:183) > at > org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento.getObjectAdapter(ObjectAdapterMemento.java:301) > at > org.apache.isis.viewer.wicket.ui.components.widgets.entitylink.EntityLinkSelect2Panel.onSelected(EntityLinkSelect2Panel.java:328) > at > org.apache.isis.viewer.wicket.ui.components.widgets.entitylink.EntityLinkSelect2Panel.convertInput(EntityLinkSelect2Panel.java:156) > at > org.apache.wicket.markup.html.form.FormComponent.validate(FormComponent.java:1137) > at org.apache.wicket.markup.html.form.Form$16.validate(Form.java:1862) > at > org.apache.wicket.markup.html.form.Form$ValidationVisitor.component(Form.java:177) > at > org.apache.wicket.markup.html.form.Form$ValidationVisitor.component(Form.java:161) > at > org.apache.wicket.util.visit.Visits.visitPostOrderHelper(Visits.java:274) > at > org.apache.wicket.util.visit.Visits.visitPostOrderHelper(Visits.java:262) > at > org.apache.wicket.util.visit.Visits.visitPostOrderHelper(Visits.java:262) > at > org.apache.wicket.util.visit.Visits.visitPostOrderHelper(Visits.java:262) > at > org.apache.wicket.util.visit.Visits.visitPostOrderHelper(Visits.java:262) > at > org.apache.wicket.util.visit.Visits.visitPostOrderHelper(Visits.java:262) > at > org.apache.wicket.util.visit.Visits.visitPostOrderHelper(Visits.java:262) > at > org.apache.wicket.util.visit.Visits.visitPostOrderHelper(Visits.java:262) > at > org.apache.wicket.util.visit.Visits.visitPostOrderHelper(Visits.java:262) > at org.apache.wicket.util.visit.Visits.visitPostOrder(Visits.java:245) > at > org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrder(FormComponent.java:389) > at > org.apache.wicket.markup.html.form.Form.visitFormComponentsPostOrder(Form.java:1093) > at > org.apache.wicket.markup.html.form.Form.validateComponents(Form.java:1854) > at org.apache.wicket.markup.html.form.Form.validate(Form.java:1819) > at org.apache.wicket.markup.html.form.Form.process(Form.java:894) > at > org.apache.isis.viewer.wicket.ui.panels.FormAbstract.process(FormAbstract.java:118) > at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:771) > at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:704) > ... 41 more > Caused by: javax.jdo.JDOObjectNotFoundException: No such database row > FailedObject:ORG_FILTER > NestedThrowables: > org.datanucleus.exceptions.NucleusObjectNotFoundException: No such database > row > at > org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:475) > at > org.datanucleus.api.jdo.JDOPersistenceManager.getObjectById(JDOPersistenceManager.java:1727) > at > org.datanucleus.api.jdo.JDOPersistenceManager.getObjectById(JDOPersistenceManager.java:1740) > at > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore.loadPojo(DataNucleusObjectStore.java:404) > at > org.apache.isis.objectstore.jdo.datanucleus.persistence.adaptermanager.DataNucleusPojoRecreator.recreatePojo(DataNucleusPojoRecreator.java:38) > at > org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault.adapterFor(AdapterManagerDefault.java:305) > ... 68 more > > Actually, locationId is: ORG_FILTER_TEST and orgId is : ATL. > But after tokenizing with "_" OID evaluated as > ORG_FILTER as locationId has "_" in it. > > So I tried with other characters which would not be expected in those fields > like ":" (colon), "::"(double colon). But these characters are not supported. > And I got the exception coming from OIDMarshaller of ISIS > > > > at > org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:171) > ... 41 more > Caused by: java.lang.IllegalArgumentException: Could not parse OID > 'OmGeoLocation:com.wipro.wess.OmGeoLocationPK_EC3::WPL'; should match > pattern: > ^((([!*])?([^:~$\^#]+):([^:~$\^#]+))((~[^:~$\^#]+:[^:~$\^#]+)*))([$][^:~$\^#]+)?([\^](\d+):([^:~$\^#]+)?:(\d+)?)?$ > at > org.apache.isis.core.metamodel.adapter.oid.OidMarshaller.unmarshal(OidMarshaller.java:146) > at > org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento$Type$2.recreateAdapter(ObjectAdapterMemento.java:110) > at > org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento$Type.getAdapter(ObjectAdapterMemento.java:183) > at > org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento.getObjectAdapter(ObjectAdapterMemento.java:301) > at > org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento.captureTitleHintIfPossible(ObjectAdapterMemento.java:279) > at > org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento.<init>(ObjectAdapterMemento.java:239) > at > org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento.createOrNull(ObjectAdapterMemento.java:58) > at > org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento$Functions$6.apply(ObjectAdapterMemento.java:416) > at > org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento$Functions$6.apply(ObjectAdapterMemento.java:412) > at com.google.common.collect.Iterators$8.transform(Iterators.java:794) > at > com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48) > at com.google.common.collect.Iterators.addAll(Iterators.java:357) > at com.google.common.collect.Lists.newArrayList(Lists.java:146) > at com.google.common.collect.Lists.newArrayList(Lists.java:128) > at > org.apache.isis.viewer.wicket.model.models.EntityCollectionModel.asMementoList(EntityCollectionModel.java:156) > at > org.apache.isis.viewer.wicket.model.models.EntityCollectionModel.createStandalone(EntityCollectionModel.java:145) > at > org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel$ResultType$2.addOrReplaceCollectionResultsPanel(ActionPanel.java:392) > at > org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel$ResultType$2.addResults(ActionPanel.java:388) > at > org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel.executeActionOnTargetAndProcessResults(ActionPanel.java:213) > at > org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel.executeActionAndProcessResults(ActionPanel.java:165) > at > org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel.buildGui(ActionPanel.java:102) > at > org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel.<init>(ActionPanel.java:95) > at > org.apache.isis.viewer.wicket.ui.components.actions.ActionPanelFactory.createComponent(ActionPanelFactory.java:49) > at > org.apache.isis.viewer.wicket.ui.ComponentFactoryAbstract.createComponent(ComponentFactoryAbstract.java:82) > at > org.apache.isis.viewer.wicket.viewer.registries.components.ComponentFactoryRegistryDefault.createComponent(ComponentFactoryRegistryDefault.java:120) > at > org.apache.isis.viewer.wicket.viewer.registries.components.ComponentFactoryRegistryDefault.addOrReplaceComponent(ComponentFactoryRegistryDefault.java:105) > at > org.apache.isis.viewer.wicket.ui.pages.PageAbstract.addComponent(PageAbstract.java:281) > at > org.apache.isis.viewer.wicket.ui.pages.PageAbstract.addChildComponents(PageAbstract.java:276) > at > org.apache.isis.viewer.wicket.ui.pages.action.ActionPage.<init>(ActionPage.java:54) > ... 46 more > Please help on this issue. > > BR > Ranganath Varma > > > The information contained in this electronic message and any attachments to > this message are intended for the exclusive use of the addressee(s) and may > contain proprietary, confidential or privileged information. If you are not > the intended recipient, you should not disseminate, distribute or copy this > e-mail. Please notify the sender immediately and destroy all copies of this > message and any attachments. > > WARNING: Computer viruses can be transmitted via email. The recipient should > check this email and any attachments for the presence of viruses. The company > accepts no liability for any damage caused by any virus transmitted by this > email. > > www.wipro.com
