Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 352062 - [DB] Dawn PostgreSQL Issue: IllegalStateException: No type mapping factory found EByteArray --> VARBINARY
Summary: [DB] Dawn PostgreSQL Issue: IllegalStateException: No type mapping factory fo...
Status: CLOSED FIXED
Alias: None
Product: EMF
Classification: Modeling
Component: cdo.db (show other bugs)
Version: 4.1   Edit
Hardware: All All
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Stefan Winkler CLA
QA Contact: Eike Stepper CLA
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-07-14 05:19 EDT by Andreas CLA
Modified: 2012-09-21 07:15 EDT (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andreas CLA 2011-07-14 05:19:28 EDT
Build Identifier: 3.7

Using CDO/Dawn-Tutorial in combination with PostgreSQL 8.4 DB produces errors (see stacktrace below)
Errordescription can be found at
http://www.eclipse.org/forums/index.php/t/218330/

org.eclipse.core.commands.ExecutionException: While executing the operation, an exception occurred
at org.eclipse.core.commands.operations.DefaultOperationHistory.execute(DefaultOperationHistory.java:521)
at org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.DawnAcoreDiagramEditorUtil.createDiagram(DawnAcoreDiagramEditorUtil.java:157)
at org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.DawnAcoreCreationWizard$1.execute(DawnAcoreCreationWizard.java:64)
at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118)
at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464)
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372)
at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1029)
at org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.DawnAcoreCreationWizard.performFinish(DawnAcoreCreationWizard.java:82)
at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:827)
at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:432)
at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
at org.eclipse.jface.window.Window.open(Window.java:801)
at org.eclipse.ui.internal.handlers.WizardHandler$New.executeHandler(WizardHandler.java:257)
at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:277)
at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476)
at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169)
at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241)
at org.eclipse.ui.internal.actions.CommandAction.runWithEvent(CommandAction.java:157)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
Caused by: org.eclipse.net4j.util.transaction.TransactionException: org.eclipse.emf.cdo.util.CommitException: Rollback in DBStore: java.lang.IllegalStateException: No type mapping factory found for Image.data: ecore.EByteArray --> DBType.VARBINARY
at org.eclipse.emf.cdo.server.internal.db.mapping.TypeMappingRegistry.createTypeMapping(TypeMappingRegistry.java:266)
at org.eclipse.emf.cdo.server.internal.db.mapping.AbstractMappingStrategy.createValueMapping(AbstractMappingStrategy.java:616)
at org.eclipse.emf.cdo.server.internal.db.mapping.horizontal.AbstractHorizontalClassMapping.createValueMappings(AbstractHorizontalClassMapping.java:188)
at org.eclipse.emf.cdo.server.internal.db.mapping.horizontal.AbstractHorizontalClassMapping.initFeatures(AbstractHorizontalClassMapping.java:156)
at org.eclipse.emf.cdo.server.internal.db.mapping.horizontal.AbstractHorizontalClassMapping.<init>(AbstractHorizontalClassMapping.java:105)
at org.eclipse.emf.cdo.server.internal.db.mapping.horizontal.HorizontalAuditClassMapping.<init>(HorizontalAuditClassMapping.java:93)
at org.eclipse.emf.cdo.server.internal.db.mapping.horizontal.HorizontalAuditMappingStrategy.doCreateClassMapping(HorizontalAuditMappingStrategy.java:49)
at org.eclipse.emf.cdo.server.internal.db.mapping.AbstractMappingStrategy.createClassMapping(AbstractMappingStrategy.java:506)
at org.eclipse.emf.cdo.server.internal.db.mapping.AbstractMappingStrategy.mapClasses(AbstractMappingStrategy.java:492)
at org.eclipse.emf.cdo.server.internal.db.mapping.AbstractMappingStrategy.mapPackageInfos(AbstractMappingStrategy.java:470)
at org.eclipse.emf.cdo.server.internal.db.mapping.AbstractMappingStrategy.mapPackageUnits(AbstractMappingStrategy.java:457)
at org.eclipse.emf.cdo.server.internal.db.mapping.AbstractMappingStrategy.createMapping(AbstractMappingStrategy.java:430)
at org.eclipse.emf.cdo.server.internal.db.mapping.horizontal.HorizontalMappingStrategy.createMapping(HorizontalMappingStrategy.java:144)
at org.eclipse.emf.cdo.server.internal.db.DBStoreAccessor.writePackageUnits(DBStoreAccessor.java:822)
at org.eclipse.emf.cdo.spi.server.StoreAccessor.doWrite(StoreAccessor.java:75)
at org.eclipse.emf.cdo.spi.server.StoreAccessorBase.write(StoreAccessorBase.java:149)
at org.eclipse.emf.cdo.internal.server.TransactionCommitContext.write(TransactionCommitContext.java:425)
at org.eclipse.emf.cdo.spi.server.InternalCommitContext$1.runLoop(InternalCommitContext.java:42)
at org.eclipse.emf.cdo.spi.server.InternalCommitContext$1.runLoop(InternalCommitContext.java:1)
at org.eclipse.net4j.util.om.monitor.ProgressDistributor.run(ProgressDistributor.java:96)
at org.eclipse.emf.cdo.server.internal.net4j.protocol.CommitTransactionIndication.indicatingCommit(CommitTransactionIndication.java:244)
at org.eclipse.emf.cdo.server.internal.net4j.protocol.CommitTransactionIndication.indicating(CommitTransactionIndication.java:92)
at org.eclipse.emf.cdo.server.internal.net4j.protocol.CDOServerIndicationWithMonitoring.indicating(CDOServerIndicationWithMonitoring.java:109)
at org.eclipse.net4j.signal.IndicationWithMonitoring.indicating(IndicationWithMonitoring.java:84)
at org.eclipse.net4j.signal.IndicationWithResponse.doExtendedInput(IndicationWithResponse.java:90)
at org.eclipse.net4j.signal.Signal.doInput(Signal.java:326)
at org.eclipse.net4j.signal.IndicationWithResponse.execute(IndicationWithResponse.java:63)
at org.eclipse.net4j.signal.IndicationWithMonitoring.execute(IndicationWithMonitoring.java:63)
at org.eclipse.net4j.signal.Signal.runSync(Signal.java:251)
at org.eclipse.net4j.signal.Signal.run(Signal.java:147)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

at org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl.save(CDOResourceImpl.java:959)
at org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.DawnAcoreDiagramEditorUtil$1.doExecuteWithResult(DawnAcoreDiagramEditorUtil.java:144)
at org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand.doExecute(AbstractTransactionalCommand.java:247)
at org.eclipse.emf.workspace.AbstractEMFOperation.execute(AbstractEMFOperation.java:150)
at org.eclipse.core.commands.operations.DefaultOperationHistory.execute(DefaultOperationHistory.java:513)
... 54 more
Caused by: org.eclipse.emf.cdo.util.CommitException: Rollback in DBStore: java.lang.IllegalStateException: No type mapping factory found for Image.data: ecore.EByteArray --> DBType.VARBINARY
at org.eclipse.emf.cdo.server.internal.db.mapping.TypeMappingRegistry.createTypeMapping(TypeMappingRegistry.java:266)
at org.eclipse.emf.cdo.server.internal.db.mapping.AbstractMappingStrategy.createValueMapping(AbstractMappingStrategy.java:616)
at org.eclipse.emf.cdo.server.internal.db.mapping.horizontal.AbstractHorizontalClassMapping.createValueMappings(AbstractHorizontalClassMapping.java:188)
at org.eclipse.emf.cdo.server.internal.db.mapping.horizontal.AbstractHorizontalClassMapping.initFeatures(AbstractHorizontalClassMapping.java:156)
at org.eclipse.emf.cdo.server.internal.db.mapping.horizontal.AbstractHorizontalClassMapping.<init>(AbstractHorizontalClassMapping.java:105)
at org.eclipse.emf.cdo.server.internal.db.mapping.horizontal.HorizontalAuditClassMapping.<init>(HorizontalAuditClassMapping.java:93)
at org.eclipse.emf.cdo.server.internal.db.mapping.horizontal.HorizontalAuditMappingStrategy.doCreateClassMapping(HorizontalAuditMappingStrategy.java:49)
at org.eclipse.emf.cdo.server.internal.db.mapping.AbstractMappingStrategy.createClassMapping(AbstractMappingStrategy.java:506)
at org.eclipse.emf.cdo.server.internal.db.mapping.AbstractMappingStrategy.mapClasses(AbstractMappingStrategy.java:492)
at org.eclipse.emf.cdo.server.internal.db.mapping.AbstractMappingStrategy.mapPackageInfos(AbstractMappingStrategy.java:470)
at org.eclipse.emf.cdo.server.internal.db.mapping.AbstractMappingStrategy.mapPackageUnits(AbstractMappingStrategy.java:457)
at org.eclipse.emf.cdo.server.internal.db.mapping.AbstractMappingStrategy.createMapping(AbstractMappingStrategy.java:430)
at org.eclipse.emf.cdo.server.internal.db.mapping.horizontal.HorizontalMappingStrategy.createMapping(HorizontalMappingStrategy.java:144)
at org.eclipse.emf.cdo.server.internal.db.DBStoreAccessor.writePackageUnits(DBStoreAccessor.java:822)
at org.eclipse.emf.cdo.spi.server.StoreAccessor.doWrite(StoreAccessor.java:75)
at org.eclipse.emf.cdo.spi.server.StoreAccessorBase.write(StoreAccessorBase.java:149)
at org.eclipse.emf.cdo.internal.server.TransactionCommitContext.write(TransactionCommitContext.java:425)
at org.eclipse.emf.cdo.spi.server.InternalCommitContext$1.runLoop(InternalCommitContext.java:42)
at org.eclipse.emf.cdo.spi.server.InternalCommitContext$1.runLoop(InternalCommitContext.java:1)
at org.eclipse.net4j.util.om.monitor.ProgressDistributor.run(ProgressDistributor.java:96)
at org.eclipse.emf.cdo.server.internal.net4j.protocol.CommitTransactionIndication.indicatingCommit(CommitTransactionIndication.java:244)
at org.eclipse.emf.cdo.server.internal.net4j.protocol.CommitTransactionIndication.indicating(CommitTransactionIndication.java:92)
at org.eclipse.emf.cdo.server.internal.net4j.protocol.CDOServerIndicationWithMonitoring.indicating(CDOServerIndicationWithMonitoring.java:109)
at org.eclipse.net4j.signal.IndicationWithMonitoring.indicating(IndicationWithMonitoring.java:84)
at org.eclipse.net4j.signal.IndicationWithResponse.doExtendedInput(IndicationWithResponse.java:90)
at org.eclipse.net4j.signal.Signal.doInput(Signal.java:326)
at org.eclipse.net4j.signal.IndicationWithResponse.execute(IndicationWithResponse.java:63)
at org.eclipse.net4j.signal.IndicationWithMonitoring.execute(IndicationWithMonitoring.java:63)
at org.eclipse.net4j.signal.Signal.runSync(Signal.java:251)
at org.eclipse.net4j.signal.Signal.run(Signal.java:147)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

at org.eclipse.emf.internal.cdo.transaction.CDOSingleTransactionStrategyImpl.commit(CDOSingleTransactionStrategyImpl.java:94)
at org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl.commit(CDOTransactionImpl.java:1058)
at org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl.save(CDOResourceImpl.java:955)
... 58 more

Reproducible: Always

Steps to Reproduce:
1.setup eclipse as described in cdo/dawn-tutorials
2.setup PostgreSQL and create empty DB 
3.change dbadapter in cdo-server.xml to PostgreSQL
4.start cdo-server
5.try to create dawn acore diagram
6.creation of *.acore_diagram (2.step in creation wizard) fails
Comment 1 Martin Fluegge CLA 2011-07-15 05:30:01 EDT
Hi Stefan,

could you have a quick look at the exception? I think the problem is more db then dawn related. Would you agree?
Comment 2 Stefan Winkler CLA 2011-07-15 09:58:58 EDT
Yes, absolutely. 

It is a missing TypeMapping which is specific to the PostgreSQL database.
Comment 3 Stephane fournier CLA 2012-05-03 17:03:39 EDT
(In reply to comment #2)
> Yes, absolutely. 
> 
> It is a missing TypeMapping which is specific to the PostgreSQL database.

Hi Stefan, Eike,
Could you please give a hint to fix that issue ?
With your support, I can test a patch.I tried to use a DBStore annotation to point to BLOB or VARBINARY but that failed.

Anyway, is there a chance to get it fixed for Juno release train ?

Regards,
Stephane.
Comment 4 Stefan Winkler CLA 2012-05-04 02:45:32 EDT
Stephane,

I have created a feature branch for this bug and tried to add the missing type mapping. 
I also did some adjustments. I have no time to do the manual test right now (i.e. executing the Dawn tutorial), but basic tests in the testsuite that use binary data now succeed (they have failed before). So there's a good chance of the solution to work.

Could you please checkout the branch bugs/352062 and report back how it works?

Here's the commit for reference:

commit a09f9d10aeeab79ed9c8cb9c49dc926457f69d17
Author: Stefan Winkler <stefan@winklerweb.net> 2012-05-04 08:40:59
Committer: Stefan Winkler <stefan@winklerweb.net> 2012-05-04 08:40:59
Parent: 442b3dee3931d65fba39842912584ef8cb0215f9 ([369646] [DB] ClassCastException after setBranch when server cache contains partially loaded collections  https://bugs.eclipse.org/bugs/show_bug.cgi?id=369646)
Branches: origin/bugs/352062, bugs/352062

[352062] [DB] Dawn PostgreSQL Issue: IllegalStateException: No type
mapping factory found EByteArray --> VARBINARY 
https://bugs.eclipse.org/bugs/show_bug.cgi?id=352062

- added the missing type mapping
- adjusted the db adapter 
- removed the skipConfig for BLOB-attribute-tests

the basic testcases seem to run
Comment 5 Eike Stepper CLA 2012-05-08 14:19:13 EDT
What about DBType.LONGVARBINARY, should that be handled, too, in analogy to LONGVARCHAR?
Comment 6 Eike Stepper CLA 2012-05-08 14:33:17 EDT
commit eb6c15bb3dba2b28b74274a7d309b208c2117a54
Comment 7 Stephane fournier CLA 2012-05-15 05:41:38 EDT
Hi Stefan,

Sorry for the delay.

I successfully tested your fix on my use case: where I store many bitmaps in a repository backed by PostgreSQL 8.3 and it works perfectly now.

Stephane.

(In reply to comment #4)
> Stephane,
> 
> I have created a feature branch for this bug and tried to add the missing type
> mapping. 
> I also did some adjustments. I have no time to do the manual test right now
> (i.e. executing the Dawn tutorial), but basic tests in the testsuite that use
> binary data now succeed (they have failed before). So there's a good chance of
> the solution to work.
> 
> Could you please checkout the branch bugs/352062 and report back how it works?
> 
> Here's the commit for reference:
> 
> commit a09f9d10aeeab79ed9c8cb9c49dc926457f69d17
> Author: Stefan Winkler <stefan@winklerweb.net> 2012-05-04 08:40:59
> Committer: Stefan Winkler <stefan@winklerweb.net> 2012-05-04 08:40:59
> Parent: 442b3dee3931d65fba39842912584ef8cb0215f9 ([369646] [DB]
> ClassCastException after setBranch when server cache contains partially loaded
> collections  https://bugs.eclipse.org/bugs/show_bug.cgi?id=369646)
> Branches: origin/bugs/352062, bugs/352062
> 
> [352062] [DB] Dawn PostgreSQL Issue: IllegalStateException: No type
> mapping factory found EByteArray --> VARBINARY 
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=352062
> 
> - added the missing type mapping
> - adjusted the db adapter 
> - removed the skipConfig for BLOB-attribute-tests
> 
> the basic testcases seem to run
Comment 8 Eike Stepper CLA 2012-09-21 07:15:43 EDT
Closing.