Prinzessin
I'm new here

Von CMS-Projekt in MSSQL-Datenbank schreiben

Jump to solution

Hallo, ich habe eine MSSQL 2008 Datenbank an das CMS angebunden. Bisher habe ich Datenbanken immer lesend angebunden.

Die erste soll nun durch das CMS befüllt werden, d. h. sie ist mit Schreibrechten versehen.

Die Datenbank ist im CMS-Projekt nun so aufgenommen:

adminkonsole.jpg

Und in den Datenbank-Schemata so:

db_modell.jpg

Ich habe eine Tabellenvorlage "cms_blog.t_domain" erstellt mit diesen GUI-Elementen:

t_domain_form.png

und diesem Mapping:

t_domain_mapping.jpg

Diese Tabelle ist auch in den Datenquellen vorhanden und der Inhalt, den ich direkt in der Datenbank eingetragen habe, erscheint:

db_inhalt.jpg

Wenn ich einen bereits vorhandenen Eintrag bearbeite, funktioniert das ohne Probleme.

Sobald ich einen neuen Eintrag erstelle und speichere, erscheint diese Fehlermeldung:

(das Feld d_id ist Integer und autoincrement)

db_fehler.png

Client Version: 5.0.425.60000

Java Version: 1.6.0_20 Sun Microsystems Inc.

FSVersion=5.0.425.60000#3102;JDK=1.6.0_20 64bit Sun Microsystems Inc.;OS=Windows 7 6.1 amd64;Date=11.06.2014 18:43:28

de.espirit.or.ORException: value 'null' not valid for attribute 'DId'

    at de.espirit.or.impl.EntityImpl.setValue(EntityImpl.java:915)

    at de.espirit.or.impl.EntityImpl.setValue(EntityImpl.java:852)

    at de.espirit.or.impl.EntityImpl.setValue(EntityImpl.java:280)

    at de.espirit.firstspirit.store.access.contentstore.ContentUtil.setValue(ContentUtil.java:441)

    at de.espirit.firstspirit.store.access.contentstore.ContentUtil.storeDataValue(ContentUtil.java:320)

    at de.espirit.firstspirit.store.access.contentstore.ContentUtil.storeData(ContentUtil.java:265)

    at de.espirit.firstspirit.store.access.contentstore.ContentUtil.storeData(ContentUtil.java:257)

    at de.espirit.firstspirit.store.access.contentstore.ContentUtil.nStoreData(ContentUtil.java:243)

    at de.espirit.firstspirit.store.access.contentstore.DatasetImpl.setData(DatasetImpl.java:378)

    at de.espirit.firstspirit.client.gui.tree.store.contentstore.AbstractGuiXmlPanel.save(AbstractGuiXmlPanel.java:499)

    at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentGuiXmlPanel.persist(ContentGuiXmlPanel.java:480)

    at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentGuiXmlPanel.persist(ContentGuiXmlPanel.java:450)

    at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentGuiXmlPanel.save(ContentGuiXmlPanel.java:445)

    at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentGuiXmlPanel$GuiXmlToolbar$2.actionPerformed(ContentGuiXmlPanel.java:658)

    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

    at de.espirit.firstspirit.common.gui.FsButton.fireActionPerformed(FsButton.java:86)

    at de.espirit.firstspirit.common.gui.StoreHoverButton.fireActionPerformed(StoreHoverButton.java:115)

    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

    at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)

    at java.awt.Component.processMouseEvent(Unknown Source)

    at javax.swing.JComponent.processMouseEvent(Unknown Source)

    at java.awt.Component.processEvent(Unknown Source)

    at java.awt.Container.processEvent(Unknown Source)

    at java.awt.Component.dispatchEventImpl(Unknown Source)

    at java.awt.Container.dispatchEventImpl(Unknown Source)

    at java.awt.Component.dispatchEvent(Unknown Source)

    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

    at java.awt.Container.dispatchEventImpl(Unknown Source)

    at java.awt.Window.dispatchEventImpl(Unknown Source)

    at java.awt.Component.dispatchEvent(Unknown Source)

    at java.awt.EventQueue.dispatchEvent(Unknown Source)

    at de.espirit.firstspirit.client.AWTDispatchingEventQueue.defaultDispatchEvent(AWTDispatchingEventQueue.java:133)

    at de.espirit.firstspirit.client.AWTDispatchingEventQueue._dispatchEvent(AWTDispatchingEventQueue.java:117)

    at de.espirit.firstspirit.client.AWTDispatchingEventQueue.dispatchEvent(AWTDispatchingEventQueue.java:110)

    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

    at java.awt.EventDispatchThread.run(Unknown Source)

Kann hier jemand helfen?

1 Solution

Accepted Solutions

In der Konfiguration einen Layer für diese Datenbank anlegen und dem Projekt zuweisen. Dann im Projekt einen neuen Schema-Knoten [EDIT: in diesem Layer] anlegen. Ausführlicher steht das in der Dokumentation beschrieben. Sollte es da noch Rückfragen oder Unklahrheiten geben, einfach noch mal hier melden..

Peter

View solution in original post

0 Kudos
11 Replies
sehnert
I'm new here

Hallo Frau Neubauer,

ohne direkten Zugriff auf ihre Umgebung kann ich nur mutmaßen:

Die automatisch erzeugten IDs der einzelnen Datensätze (= AutoIncrement) werden von FirstSpirit selbst erzeugt und verwaltet (mit den versteckten Feldern "fs_id" und weiteren). Sie müssen also keine gesonderte ID für einen Datensatz definieren.

Mit "DId" haben Sie ein weiteres AutoIncrement-Feld hinzugefügt, was auch als PrimaryKey gekennzeichnet ist und einen Datensatz eindeutig identifiziert. Daher ist das Feld in der Datenquellenübersicht enthalten, es wird direkt durchgereicht.

Um Transaktionskonflikte zu vermeiden und die Konsistenz der Daten sicherzustellen, sollte ein AutoIncrement vom Datenbank-Management-System (DBMS) geschrieben werden. Ein Redakteur kann leicht eine falsche Id vergeben oder unerlaubte Dupletten erzeugen.

Sie sollten das Feld "DId" bzw. "cs_id" aus ihrem Formular und dem Datenquellen-Schema entfernen, sodass nur noch der Name ("DName" bzw. "cs_name") verbleibt.

Ich hoffe ich konnte helfen. Für Fragen stehe ich gern zur Verfügung.

Herzliche Grüße aus Freiburg

Sven Ehnert

re-lounge GmbH

Hallo Herr Ehnert,

die Tabelle t_domain besteht in der MSSQL-Datenbank aus zwei Feldern:

- d_id (int) Primary Key mit autoincrement

- d_name (nvarchar(255))

Ich dachte die fs_id wird nur bei Derby-Layern verwendet und nicht bei extern angebunden Datenbanken.
Komischerweise funktioniert ja bei mir das Ändern von bereits vorhandenen Datensätzen - nur nicht das neu Anlegen.

Das XML-Schema zur Tabelle t_domain sieht so aus:

<xs:complexType dbName="T_DOMAIN" name="TDomain" readonly="1">

    <xs:sequence>

        <xs:element dbName="D_ID" javaType="java.lang.Integer" length="10" name="DId" type="xs:integer"/>

        <xs:element dbName="D_NAME" javaType="java.lang.String" length="255" name="DName" nullable="1" type="xs:string"/>

    </xs:sequence>

</xs:complexType>

<xs:key autoIncrement="1" dbName="PK_T_DOMAIN" name="PK_t_domain">

    <xs:selector xpath="TDomain"/>

    <xs:attribute xpath="DId"/>

</xs:key>

<xs:keyref dbName="FK_T_POST_T_DOMAIN" field="tPostList" name="FK_t_post_t_domain" refer="TDomain" tfield="tDomain">

    <xs:selector xpath="TPost"/>

    <xs:attribute xpath="P_D_ID"/>

</xs:keyref>

Was genau sollte ich hier entfernen?

Im Formular für die Tabelle habe ich das Feld DId bzw. cs_id entfernt und anschließend nochmal versucht Datensätze über das CMS zu speichern - hat leider nicht funktioniert.

0 Kudos
sehnert
I'm new here

Hallo Frau Neubauer,

in der Administrator-Dokumentation bin ich auf folgendes gestoßen:

Die Struktur und die Inhalte der externen Datenbank dürfen nicht verändert werden. Im Gegensatz zu internen Datenbanken ist für externe Datenbanken nur ein lesender aber kein schreibender Zugriff möglich.

Es ist laut Doku zwingende Vorraussetzung, dass externe Datenbanken (="Kein Schema-Sync" aktiviert) nur lesend eingebunden sind. Sie müssten also zusätzlich noch die Option "Kein Schema-Sync" deaktivieren. Bitte unbedingt zuvor ein Backup anlegen!

Für FirstSpirit wird im Allgemeinen das Feld fs_id zur eindeutigen Identifizierung eines Datenobjekts genutzt. Zusammen mit 3 weiteren Feldern werden die Freigaben und Versionen realisiert. Zusammen bilden die 4 properitären Felder den Primary Key.

Ich vermute, dass sie nach Aktivierung von Schema-Sync die Datenquellen-Vorlage danach neu anlegen müssen, damit FirstSpirit das Schema entsprechend anpasst.

Die Anpassung ihrer Eingabekomponenten zielte auf folgendes ab:

Ihr XML-Schema, dass d_id bzw. DId nicht leer sein darf (Attribut nullable nicht vorhanden). In Ihren Eingabekomponenten jedoch fehlt die Kennzeichnung als Pflichtparameter (allowEmpty="NO").

In das konkrete Feld sollte wie bereits erwähnt ein Benutzer ohnehin nichts schreiben dürfen.

Herzliche Grüße aus Freiburg

Sven Ehnert

re-lounge GmbH

0 Kudos

Sven hat vollkommen recht. Was auf jeden Fall nicht funktioniert ist, das Feld "d_id" als Eingabefeld in die Maske zu nehmen. Das muss aus dem Formular komplett entfernt werden. Ob es dann funktioniert ist aber noch nicht gesagt, weil für externe Datenbanken nur lesender Zugriff unterstützt wird. Wenn der schreibende Zugriff zufällig funktioniert, ist dies keien Produkteigenschaft, für die wir Support liefern.

MfG, Peter

Peter
0 Kudos

Hallo Herr Ehnert,

ich habe nun in der Adminkonsole für die externe Datenbank den Haken "Kein Schema-Sync" entfernt, das CMS-Projekt neu geladen und wollte soeben die Datenbank neu erzeugen. Das geht nicht, denn bei der Option "Schema aus Datenbank erzeugen" erscheint die externe Datenbank nicht mehr (was vorher mit gesetztem Haken der Fall war).

Ich hatte aber noch das vorherige Datenbankschemata der externen Datenquelle als Vorlage und habe dort eine neue Tabellenvorlage für die Tabelle t_domain angelegt.

Hier habe ich trotzdem noch die Möglichkeit in den Bearbeitungsmodus in den Datenquelle zu wechseln. Aber beim Versuch der Neuanlage eines Eintrags erscheint diese Fehlermeldung:

Client Version: 5.0.425.60000

Java Version: 1.6.0_20 Sun Microsystems Inc.

FSVersion=5.0.425.60000#3102;JDK=1.6.0_20 64bit Sun Microsystems Inc.;OS=Windows 7 6.1 amd64;Date=16.06.2014 08:56:48

de.espirit.or.CounterException: Error code: 208, state: S0002

    at de.espirit.or.impl.generic.GenericCounterGenerator.getActualValue(GenericCounterGenerator.java:151)

    at de.espirit.or.impl.generic.GenericCounterGenerator.getNextBlockNumber(GenericCounterGenerator.java:124)

    at de.espirit.or.impl.generic.GenericCounterGenerator.getNextValue(GenericCounterGenerator.java:84)

    at de.espirit.or.impl.generic.GenericCounterGenerator.getNextValue(GenericCounterGenerator.java:19)

    at de.espirit.or.impl.PersistentContext.getNextValue(PersistentContext.java:192)

    at de.espirit.or.impl.PersistentContext.createIdentifier(PersistentContext.java:179)

    at de.espirit.or.impl.DBCommandHandler.handle(DBCommandHandler.java:47)

    at de.espirit.or.impl.CreateCommand.accept(CreateCommand.java:49)

    at de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:797)

    at de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:76)

    at de.espirit.firstspirit.content.ContentManagerImpl.commit(ContentManagerImpl.java:688)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:597)

    at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:62)

    at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:95)

    at de.espirit.firstspirit.server.io.handler.ManagerCall.handle(ManagerCall.java:69)

    at de.espirit.firstspirit.server.io.ManagerCallWorker.run(ManagerCallWorker.java:108)

    at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:578)

    at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:545)

    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

    at java.util.concurrent.FutureTask.run(FutureTask.java:138)

    at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)

    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)

    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

    at java.util.concurrent.FutureTask.run(FutureTask.java:138)

    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

    at java.lang.Thread.run(Thread.java:662)

    at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:37)

Caused by: java.sql.SQLException: Invalid object name 'dbo.TRANSACTION_COUNTER'.

    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)

    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515)

    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404)

    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350)

    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)

    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)

    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180)

    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155)

    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:285)

    at de.espirit.or.impl.generic.GenericCounterGenerator.getActualValue(GenericCounterGenerator.java:141)

    at de.espirit.or.impl.generic.GenericCounterGenerator.getNextBlockNumber(GenericCounterGenerator.java:124)

    at de.espirit.or.impl.generic.GenericCounterGenerator.getNextValue(GenericCounterGenerator.java:84)

    at de.espirit.or.impl.generic.GenericCounterGenerator.getNextValue(GenericCounterGenerator.java:19)

    at de.espirit.or.impl.PersistentContext.getNextValue(PersistentContext.java:192)

    at de.espirit.or.impl.PersistentContext.createIdentifier(PersistentContext.java:179)

    at de.espirit.or.impl.DBCommandHandler.handle(DBCommandHandler.java:47)

    at de.espirit.or.impl.CreateCommand.accept(CreateCommand.java:49)

    at de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:797)

    at de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:76)

    at de.espirit.firstspirit.content.ContentManagerImpl.commit(ContentManagerImpl.java:688)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:597)

    at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:62)

    at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:95)

    at de.espirit.firstspirit.server.io.handler.ManagerCall.handle(ManagerCall.java:69)

    at de.espirit.firstspirit.server.io.ManagerCallWorker.run(ManagerCallWorker.java:108)

    at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:578)

    at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:545)

    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

    at java.util.concurrent.FutureTask.run(FutureTask.java:138)

    at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)

    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)

    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

    at java.util.concurrent.FutureTask.run(FutureTask.java:138)

    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

    at de.espirit.firstspirit.client.io.ServerCaller.callManager(ServerCaller.java:372)

    at de.espirit.firstspirit.io.DefaultClientHandler.callManager(DefaultClientHandler.java:55)

    at de.espirit.firstspirit.client.io.RemoteManagerCaller.invoke(RemoteManagerCaller.java:52)

    at de.espirit.firstspirit.server.$Proxy40.commit(Unknown Source)

    at de.espirit.firstspirit.store.access.templatestore.SessionHandlerImpl.commit(SessionHandlerImpl.java:129)

    at de.espirit.or.impl.SessionImpl.doCommit(SessionImpl.java:215)

    at de.espirit.or.impl.AbstractSession.commit(AbstractSession.java:589)

    at de.espirit.firstspirit.store.access.contentstore.DatasetImpl.save(DatasetImpl.java:1000)

    at de.espirit.firstspirit.client.gui.tree.store.contentstore.AbstractGuiXmlPanel.save(AbstractGuiXmlPanel.java:500)

    at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentGuiXmlPanel.persist(ContentGuiXmlPanel.java:480)

    at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentGuiXmlPanel.persist(ContentGuiXmlPanel.java:450)

    at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentGuiXmlPanel.save(ContentGuiXmlPanel.java:445)

    at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentGuiXmlPanel$GuiXmlToolbar$2.actionPerformed(ContentGuiXmlPanel.java:658)

    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

    at de.espirit.firstspirit.common.gui.FsButton.fireActionPerformed(FsButton.java:86)

    at de.espirit.firstspirit.common.gui.StoreHoverButton.fireActionPerformed(StoreHoverButton.java:115)

    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

    at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)

    at java.awt.Component.processMouseEvent(Unknown Source)

    at javax.swing.JComponent.processMouseEvent(Unknown Source)

    at java.awt.Component.processEvent(Unknown Source)

    at java.awt.Container.processEvent(Unknown Source)

    at java.awt.Component.dispatchEventImpl(Unknown Source)

    at java.awt.Container.dispatchEventImpl(Unknown Source)

    at java.awt.Component.dispatchEvent(Unknown Source)

    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

    at java.awt.Container.dispatchEventImpl(Unknown Source)

    at java.awt.Window.dispatchEventImpl(Unknown Source)

    at java.awt.Component.dispatchEvent(Unknown Source)

    at java.awt.EventQueue.dispatchEvent(Unknown Source)

    at de.espirit.firstspirit.client.AWTDispatchingEventQueue.defaultDispatchEvent(AWTDispatchingEventQueue.java:133)

    at de.espirit.firstspirit.client.AWTDispatchingEventQueue._dispatchEvent(AWTDispatchingEventQueue.java:117)

    at de.espirit.firstspirit.client.AWTDispatchingEventQueue.dispatchEvent(AWTDispatchingEventQueue.java:110)

    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

0 Kudos

Hallo Peter,

wenn man externe Datenbanken nur lesend anbinden darf, wie ist es dann überhaupt möglich Inhalte vom CMS aus in eine Datenbank zu schreiben?

Für die Derby-Layer gibt es laut Helpdesk eigentlich keinen "Support" und externe Datenquellen dürfen nur lesend angebunden werden  - wir brauchen aber nun die Möglichkeit Inhalte vom CMS in eine Datenbank zu schreiben. Diese Datenbank wird zukünfigt mehr als 20 Sprachen enthalten.

Ich weiß auch von anderen Kunden, dass so etwas möglich ist und dass nahegelegt wird eine externe Datenbank aufzusetzen, diese an das CMS anzubinden und darüber zu befüllen.

Wenn nun externe Datenbanken nur lesend unterstützt werden und es für Derby-Datenbanken normalerweise keinen Support gibt, gibt es ja eigentlich gar keine wirkliche Lösung!?

Wenn doch, würde ich Sie bitten hier Schritt für Schritt aufzulisten was zu tun ist um unser Vorhaben umzusetzen.

Wir brauchen diese Datenbank sehr dringend.

0 Kudos

Das "extern" bezog ich auf den Aspekt "wer hat die Schema-Hoheit". Bei einer von FirstSpirit verwalteten Datenbank ist z.B die Schlüsselverwaltung anders, als bei manuell angelegten Datenbanken. Daher sind diese Datenbanken dann nicht kompatibel zu anderen Anwendungen. Über Views können z.B aber andere Anwendungen lesend auf von FirstSpirit verwaltete Datenbankinhalte zugreifen.

Umgekehrt ist es bei Datenbank-Schematas, die nicht von FirstSpirit angelegt wurden. Diese können in FirstSpirit nur lesend eingebunden werden.

Ich vermute, für euren Anwendungsfall ist eine von FirstSpirit verwaltete Datenbank gewünscht. Diese muss nicht zwangsläufig unter Derby laufen. Es werden auch Oracle, MySQL, PostgreSQL, MSSQL und DB2 als DBMS unterstützt.

Peter

Genau dieser Fall trifft auf uns zu:

Umgekehrt ist es bei Datenbank-Schematas, die nicht von FirstSpirit angelegt wurden. Diese können in FirstSpirit nur lesend eingebunden werden.

Ich vermute, für euren Anwendungsfall ist eine von FirstSpirit verwaltete Datenbank gewünscht. Diese muss nicht zwangsläufig unter Derby laufen. Es werden auch Oracle, MySQL, PostgreSQL, MSSQL und DB2 als DBMS unterstützt.

Ich habe eine MSSQL Datenbank angelegt und möchte deren Inhalte über FirstSpirit verwalten.

Wie kann ich das tun?

0 Kudos

In der Konfiguration einen Layer für diese Datenbank anlegen und dem Projekt zuweisen. Dann im Projekt einen neuen Schema-Knoten [EDIT: in diesem Layer] anlegen. Ausführlicher steht das in der Dokumentation beschrieben. Sollte es da noch Rückfragen oder Unklahrheiten geben, einfach noch mal hier melden..

Peter
0 Kudos