Entwickeln von Windows DNA-Anwendungen mit dem COMCodebook – Teil 10 Yair Alan Griver Übersetzt von Mathias Gronau Teil 10 – Anwendung Skalieren unserer Wenn Sie an robusteren Lösungen interessiert sind, sollten Sie diesen Abschnitt unbedingt lesen. Ich behandle die Skalierung auf eine Oracle8- oder SQL ServerDatenbank und zeige Ihnen, welche geringen Änderungen im Code der mittleren Schicht dafür erforderlich sind. Außerdem behandle ich das Ausführen unserer Komponenten unter dem Microsoft Transaction Server. Ich gehe davon aus, dass Sie mit den hier behandelten Datenbanken vertraut sind und konzentriere mich auf die Änderungen in der mittleren Schicht und die Konfiguration des MTS. Einsatz einer Datenbank SQL Server- Ich gehe davon aus, dass Sie mit der Administration des SQL Server relativ vertraut sind und dass Sie über die notwendigen Rechte verfügen, um auf Ihrem Rechner eine SQL Server-Datenbank anzulegen. Nähere Informationen über die Administration des SQL Server finden Sie in Ihrer Dokumentation. Einrichten der Datenbank Als erstes wollen Sie jetzt eine Datenbank erstellen. Sie können sie klein halten. Als Datenbanknamen habe ich ATTAPP gewählt. Wenn Sie einen anderen Namen benutzen, müssen Sie sicherstellen, dass Sie überall, wo Sie ATTAPP in diesem Beispiel sehen, dies durch Ihren Datenbanknamen ersetzen. 12-19 Entwickeln von Windows DNA/Teil 10 In Ihrem Verzeichnis Flash\AttorneyApp\Data finden Sie die Scriptdatei SqlServer.sql. In diesem Script finden Sie ein Script zum Erzeugen der Tabellen, Indizes und der gespeicherten Prozedur, die Sie benötigen werden. Außerdem fügt das Script einige Beispieldaten ein. Stellen Sie sicher, dass Sie Ihre Datenbank fertig eingerichtet haben und dass Sie das Script als ein gültiger DBO ausführen. Wenn Sie nicht vorhaben eine OracleDatenbank einzurichten können Sie den Abschnitt „Ändern unserer Datenquellen“ überspringen. Einsetzen einer Oracle-Datenbank Ich gehe hier davon aus, dass Sie mit der Administration von Oracle-Datenbanken vertraut sind und dass Sie über die notwendigen DBA-Rechte verfügen, um Instanzen einer Datenbank auf Ihrem Oracle-Server zu erstellen. Sie finden in diesem Abschnitt lediglich Hinweise für die Erstellung der Instanz AttorneyApp. Ich kann Ihnen keine Schritt-für-SchrittAnweisung für das Einrichten der Instanz geben, da jede Installation des Oracle Server einzigartig ist. Für genaue Informationen über das Erstellen einer Oracle-Instanz auf Ihrer Plattform lesen Sie Ihre OracleDokumentation. Einrichten der Datenbank Als erstes müssen Sie eine Instanz der Oracle-Datenbank erstellen. Die einfache Beispielanwendung AttorneyApp ist nur eine kleine Datenbank, so dass Sie beim Erstellen der Instanz die empfohlenen kleinen Werte in Ihrer Datei INIT.ORA angeben können. FoxX Professional Seite 1 Als Oracle SID habe ich ATTN benutzt. Wenn Sie eine andere SID benutzen wollen, müssen Sie sicherstellen, dass Sie überall, wo Sie ATTN in diesem Beispiel sehen, dieses gegen Ihre SID austauschen. Beispiel: db_name = attndb db_files = 100 db_file_multiblock_read_count = 8 db_block_buffers = 200 shared_pool_size = 3500000 log_checkpoint_interval = 10000 processes = 50 dml_locks = 100 log_buffer = 8192 sequence_cache_entries = 10 sequence_cache_hash_buckets = 10 Wenn Sie vorhaben, die Möglichkeit zu implementieren, innerhalb der Bemerkungen zu den Anwälten nach Schlüsselworten suchen zu lassen, müssen Sie die Oracle CONTEXT-Suche installieren und das Feld Note_Text der Tabelle Attnote indizieren. Damit ermöglichen Sie die Suche nach einer Zeichenkette mit Hilfe der Funktion CONTAINS in Ihrer SELECT-Anweisung. Weitere Informationen zu diesem Feature finden Sie in Ihrer Oracle-Dokumentation. Einrichten des Oracle8-Client (Net8 Easy Config) Nachdem Sie die Tablespaces erstellt haben, müssen Sie sicherstellen, dass Sie für Ihre Bedürfnisse über genügend RollbackSegmente verfügen. Je mehr gleichzeitige Transaktionen Sie auf der Datenbank AttorneyApp ausführen wollen, desto mehr Rollback-Segmente oder desto größere Rollback-Segmente benötigen Sie. Ich habe acht Rollback-Segmente erstellt, die am Anfang 50 k groß sind und in 50 k-Schritten bis auf 250 k anwachsen können. Der Anwendungsserver muss für den Zugriff auf die Oracle-Datenbank konfiguriert werden. Ihr Anwendungsserver ist die Maschine, auf der die COMCodebook-Komponenten ausgeführt werden (das kann auch Ihre Entwicklungsmaschine sein). Zur Konfiguration des Anwendungsservers befolgen Sie die folgenden Schritte: Beispiel: create public rollback segment rb1 storage(initial 50K next 50K optimal 250K) tablespace rollback_data; Nachdem Sie die Instanz erstellt haben vergessen Sie nicht die Listener-Datei zu ändern und die neue Datenbank AttorneyApp einzutragen. Anschließend müssen Sie den Listener-Service neu starten. In Ihrem Verzeichnis Flash\AttorneyApp\Data finden Sie die Scriptdatei Oracle.sql. In dieser Datei finden Sie ein Script zum Erzeugen der Tabellen, Indizes und der gespeicherten Prozedur, die Sie benötigen werden. Außerdem fügt das Script einige Beispieldaten ein. Stellen Sie sicher, dass Sie Ihre Datenbank fertig eingerichtet haben und dass Sie das Script als ein gültiger DBA ausführen. CONTEXT-Suche 12-19 Entwickeln von Windows DNA/Teil 10 1. Installieren Sie die Oracle8 ClientSoftware. 2. Öffnen Sie Net8 Easy Config. 3. Wählen Sie „Add new Service“ und geben Sie einen Namen für Ihren Service ein. Dieser Name des Service wird in den Connection-Strings benötigt, um auf die Datenbank zu verweisen. Er wird in der Klasse prm_AttorneyApp_Oracle eingesetzt. Klicken Sie auf „Next“. 4. Der nächste Bildschirm fragt Sie nach dem Netzwerkprotokoll. In der Regel ist dies TCP/IP. Klicken Sie auf „Next“. 5. Jetzt werden Sie nach dem Hostname und der Nummer des Ports gefragt. Geben Sie den Namen Ihres Servers an und wählen Sie die Nummer des Port (in der Regel 1521). Klicken Sie auf „Next“. 6. Geben Sie in der nächsten Maske die SID (früher TTRK) in die Textbox ein. Klicken Sie auf „Next“. 7. Die nächste Maske hat in der Mitte die Schaltfläche „Test Service“. FoxX Professional Seite 2 Klicken Sie darauf und geben einen Benutzernamen und ein Passwort ein (z. B. DBO/SA) und klicken auf den Testbutton. Das daraufhin erscheinende Statusfenster zeigt Ihnen alle Fehler an; es sollte aber die Meldung „Connection Successful“ erscheinen. Klicken Sie auf die Schaltfläche „Done“. 8. Klicken Sie auf die Schaltfläche „Next“ und anschließend „Finish“. Es ist alles getan. DefineDeleteSQL() des A-Layers löschen, die wir für unsere VFPDaten geschrieben haben. In den meisten Fällen können Sie Schritt 3 auslassen, wenn die Datentypen Ihrer Primärschlüssel gleich bleiben. Wir werden nummerische Primärschlüssel in unserer Datenbank einsetzen, um zu zeigen, wie Sie das Standardverhalten des Frameworks nutzen können. 1. Konfigurieren Eigenschaften Datenquellen Ändern unserer Datenquellen Nachdem wir nun unsere Datenbank und die Anwendungsserver eingerichtet haben, sind wir bereit die erforderlichen Modifikationen am Code vorzunehmen, um auf unsere Oracle/SQL Server-Datenbank zuzugreifen. Öffnen Sie Visual FoxPro und geben Sie im Befehlsfenster ein: CD “D:\FLASH\Codebook\AttorneyApp\Interfa ce\” DO StartCB Damit öffnen Sie alle unsere Projekte und stellen die Dateipfade ein. Wir müssen nur das Datenquellen-Projekt AttData ändern. Sie werden feststellen, dass für den Einsatz eines anderen Backend nur minimale Änderungen des Codes erforderlich sind. So wie es sein soll, sind diese Änderungen in der Datenquellen-Komponente isoliert. Nur die Datenquelle kennt die Besonderheiten der Datenbank, auf die sie zugreift. Drei Änderungen müssen wir in unseren Datenquellen vornehmen: 1. Konfigurieren unserer Datenquellen und Search Criteria Manager, damit diese die oraclespezifischen Objekte ansprechen. 2. Prüfen unserer SQL-Anweisungen um sicherzugehen, dass unsere Syntax kompatibel zur Oracle/SQL Server-Syntax ist. 3. Benutzen Sie beim Hinzufügen und Löschen von Datensätzen das Standardverhalten der Datenquellen, indem Sie die Funktionen GetPrimaryKey() und 12-19 Entwickeln von Windows DNA/Teil 10 der der Änderung der Eigenschaften für den SQL Server Öffnen Sie AttorneyDataSource in adatasources.prg. Als Erstes müssen Sie die Konfigurationsklassen der Datenquelle einstellen, damit sie den SQL Server ansprechen. Im Moment benutzen wir unsere Visual FoxPro-Klassen: cADOComponentsParameterClass = "prm_AttorneyADOComponents_vfp" cConfigurationObjectClass = "prm_AttorneyApp_vfp" cSearchSyntaxClass = "SearchSyntax_vfp" Diese drei Klassen müssen wir austauschen: cADOComponentsParameterClass = "prm_AttorneyADOComponents_sql" cConfigurationObjectClass = "prm_AttorneyApp_sql" cSearchSyntaxClass = "SearchSyntax_sql" Diese Änderungen müssen wir auch in AttorneyNoteDatasource vornehmen: cADOComponentsParameterClass = "prm_AttorneyNoteADOComponents_sql" cConfigurationObjectClass = "prm_AttorneyApp_sql" cSearchSyntaxClass = "SearchSyntax_sql" Die Klassendefinitionen für die Komponenten-Parameterklasse und die Konfigurations-Objektklasse befinden sich in aparameterobjects.prg. In dieser Datei definieren wir unsere konkreten FoxX Professional Seite 3 Komponentenklassen für Attorney und AttorneyNote: ************************************** ******************************* DEFINE CLASS prm_AttorneyADOComponents_sql AS aadocomponentsparameter_sql ************************************** ******************************* lEnableServerAssignedKeys = .T. nlocktype = 4 ncursortype = 1 Name = "prm_AttorneyADOComponents_sql" ENDDEFINE ************************************** ******************************* DEFINE CLASS prm_AttorneyNoteADOComponents_sql AS aadocomponentsparameter_sql ************************************** ******************************* lEnableServerAssignedKeys = .T. Name = "prm_AttorneyNoteADOComponents_sql" nlocktype = 4 ncursortype = 1 ENDDEFINE In der gleichen Datei befinden sich die Definitionen für die Konfigurationsklasse. Diese Klasse ist für den Aufbau der Verbindung zu unserer Datenbank zuständig. Die konkrete Klasse prm_AttorneyApp_sql definiert die Connectionklasse, die wir für den Einsatz mit der SQL Server-Datenbank benötigen. Diese Klasse ist von cOledbProviderForSQLServer abgeleitet: ************************************** ******************************* DEFINE CLASS prm_AttorneyApp_sql AS isqloledbproviderforsqlserver ************************************** ******************************* lEnableServerAssignedKeys = .T. Name = "prm_AttorneyApp_sql" ENDDEFINE Änderung der Eigenschaften für Oracle Öffnen Sie AttorneyDataSource in adatasources.prg. Als Erstes müssen Sie die 12-19 Entwickeln von Windows DNA/Teil 10 Konfigurationsklassen der Datenquelle einstellen, damit sie Oracle ansprechen. Im Moment benutzen wir unsere Visual FoxPro-Klassen: cConfigurationObjectClass "prm_AttorneyApp_vfp" cSearchSyntaxClass = "SearchSyntax_vfp" Diese beiden austauschen: Klassen cConfigurationObjectClass "prm_AttorneyApp_oracle" cSearchSyntaxClass = "SearchSyntax_oracle" = müssen wir = Die Klassendefinitionen für die Konfigurations-Objektklasse befindet sich in aparameterobjects.prg. Die letzte Definition beschreibt die A-Layer-Klasse für die Konfigurationsklasse (Connectionklasse). Die konkrete Klasse prm_AttorneyApp_Oracle definiert die Connectionklasse, die wir für den Einsatz mit der Oracle-Datenbank benötigen. Diese Klasse ist von cOledbProviderForOracle abgeleitet: ************************************** ******************************* DEFINE CLASS prm_AttorneyApp_oracle AS ioledbproviderfororacle ************************************** ******************************* lEnableServerAssignedKeys = .T. Name = "prm_AttorneyApp_oracle" ENDDEFINE Konfigurieren Verbindungsinformation der Sie erinnern sich, dass wir am Anfang unsere Datenquellen in der Art entworfen haben, dass wir die Informationen für den Connection-String in der Tabelle CONNCFG.DBF abgelegt haben, die sich zusammen mit den Datenquellenkomponenten (AttData.DLL) und dem Projekt im Verzeichnis \Dataservices befindet. Öffnen Sie CONNCFG.DBF in Visual FoxPro. Ich habe darin die drei Connection-Parameter prm_AttorneyApp_vfp, prm_attorneyapp_sql und prm_attorneyapp_oracle abgelegt. Da wir FoxX Professional Seite 4 jetzt vorhaben, eine neue Datenbank einzusetzen, müssen wir nun die speziellen Eigenschaften des Connection-String für diese Datenbanken eintragen. in die Felder cPassword und cUserID den Benutzernamen und das Passwort ein, die für die Verbindung zum SQL Server eingesetzt werden sollen. Zum Schluss können wir noch einen Timeout für die Verbindung und die Information, ob die Sicherheit von Windows NT genutzt werden soll, in die Felder cConnectto und cSecInfo eingeben. Hier die Felder, die für den Connection-String zum SQL Server gebraucht werden: Die Connection für den SQL Server Geben Sie im Feld cDatasrc den Namen des SQL Server für die Klasse prm_attorneyapp_sql ein, z. B. MYSERVER. Anschließend geben Sie im Feld cInitCat den Namen der Datenbank ein, z. B. ATTAPP. Als nächstes geben wir Cindex Cconnectto Cdatasrc Cinitcat Cpassword prm_attor neyapp_sql 60 MYSERV ER ATTAP P Die Connection für Oracle Geben Sie im Feld cDatasrc den Dienstnamen von Oracle für die Klasse prm_attorneyapp_oracle ein, z. B. ATTAPP.WORLD. Als nächstes geben wir in die Felder cPassword und cUserID den Csecinfo Cprovider Cuserid FALSE SQLOLE DB.1 SA Benutzernamen und das Passwort ein, die für die Verbindung zu Oracle eingesetzt werden sollen. Hier die Felder, die für den Connection-String zu Oracle benötigt werden: Cindex Cdatasrc Cpassword Cprovider Cuserid prm_attorneyapp_oracle ATTAPP.WORLD SA MSDAORA.1 DBO 2. Überprüfen unserer SELECT-Anweisungen SQL Änderungen an den SQL SELECTAnweisungen für den SQL Server Nun müssen wir uns die SQL SELECTAnweisungen in den Datenquellen Attorney und AttorneyNote ansehen und sicherstellen, dass sie für den SQL Server gültig sind. Zum Glück gleichen sich VFP und der SQL Server in ihren Abfragen so weit, dass wir hier nichts tun müssen. Der nächste Schritt ist die Änderung der Befehlsparameter. Vergleichen Sie dazu den Absatz Änderungen an den Befehlsparametern weiter unten. 12-19 Entwickeln von Windows DNA/Teil 10 Änderungen an den SQL SELECTAnweisungen für Oracle Nun müssen wir uns die SQL SELECTAnweisungen in den Datenquellen Attorney und AttorneyNote ansehen und sicherstellen, dass sie für Oracle gültig sind. Die erste Methode, an der wir Änderungen vornehmen müssen, ist AttorneyDatasource.GetProxy(). Diese Schnittstelle definiert eine SQL-Anweisung, die unter Oracle nicht arbeitet. Der Verbindungsoperator in Oracle ist die doppelte Pipe (||). Die SELECTAnweisung sollte folgendermaßen aussehen: loADO.oCommand.CommandText = [ SELECT RTRIM(LastName) || ', ' || FirstName AS cDesc, ] + ; [ Attorney_id AS upID FROM Attorney ORDER BY Lastname, FirstName ] FoxX Professional Seite 5 Das gleiche gilt für die Methode AttorneyNoteDataSource.GetAttorneyNoteBySearchCriteria(). Sie sollten die Anweisung wie folgt ändern: loADO.oCommand.CommandText = [ SELECT Attnote.*, Attorney.LastName, ] + ; [ RTRIM(Attorney.LastName) || ', ' || Attorney.FirstName ] + ; [ AS FullName FROM AttNote, Attorney ] + ; lcWhere + [ Attnote.Attorney_Id = Attorney.Attorney_ID ] + lcOrder Änderungen Befehlsparametern an den Da wir unter Oracle und dem SQL Server numerische Primärschlüssel einsetzen wollen, müssen wir auch einige unserer SQL-Parameter ändern. Der erste ist in AttorneyDataSource.GetAttorneyByID(). Der Parameter lopAttorneyID sieht jetzt so aus: lopAttorneyID = ; loADO.oCommand.CreateParameter( "Attorney_ID", adVarchar, adParamInput, 9, tuAttorneyID) Ändern Sie ihn in: lopAttorneyID = ; loADO.oCommand.CreateParameter( "Attorney_ID", adInteger, adParamInput, , tuAttorneyID) Das ermöglicht uns den Einsatz der numerischen Schlüssel. Wir müssen diese Änderungen in den Methoden GetAttorneyNoteByID() und GetAttorneyNoteByAttorneyID() von AttorneyNoteDataSource vornehmen. Einsetzen des Standardverhaltens der Datenquellen Zuguterletzt müssen wir noch die Funktionen GetPrimaryKey() und DefineDeleteSQL() auskommentieren oder löschen. Diese Funktionen benötigten wir für den Zugriff auf unsere VFP-Daten. Wir wollen das vorgegebene Verhalten des COMCodebook für das Hinzufügen und 12-19 Entwickeln von Windows DNA/Teil 10 Löschen von Datensätzen nutzen. Sie finden diese Funktionen am Ende von adatasources.prg. Achten Sie aber darauf, dass Sie nur die Funktioen löschen, nicht die Klassendefinition. aAbstractADODataSource ist unsere abstrakte Klasse, von der die Datenquellen AttorneyDataSource und AttorneyNoteDataSource abgeleitet sind. Am Ende sollte der folgende Code vorhanden sein: ************************************** ********************************** DEFINE CLASS aAbstractADODataSource AS IAbstractADODataSource ************************************** ********************************** *!* PROTECTED FUNCTION GetPrimaryKey( rcPrimaryKey, toADO ) *!* *!* . *!* . *!* . *!* *!* ENDFUNC *!* ******************************** ****** *!* PROTECTED FUNCTION DefineDeleteSQL( tcID, rcDeleteSQL ) *!* *!* . *!* . *!* . *!* *!* ENDFUNC ENDDEFINE Kompilieren und Testen unserer Datenquellen Nachdem wir jetzt alle erforderlichen Änderungen an den Datenquellen vorgenommen haben, können wir sie neu erstellen und testen. Wenn Sie den richtigen Verzeichnispfad noch nicht eingestellt haben, holen Sie dies jetzt nach, indem Sie im Befehlsfenster von VFP die folgenden Anweisungen eingeben: CD “D:\FLASH\Codebook\AttorneyApp\Interfa ce\” DO StartCB Wählen Sie das Projekt AttData und klicken Sie auf „Erstellen...“. Wie schon früher wählen Sie auch jetzt die Option multithreaded DLL. Wechseln Sie nun mit Ihrem FoxX Professional Seite 6 Browser zu Ihrer Anwendung (http://localhost/attapp/). Führen Sie eine Abfrage auf die Bemerkungen aus und kontrollieren Sie, ob die Komponenten angesprochen werden und antworten. Sie werden eine geringe Verminderung der Geschwindigkeit bemerken, da wir jetzt einen größeren Datenbankserver statt Visual FoxPro einsetzen. Testen Sie die restliche Funktionalität der Anwendung. Sie bemerken, dass wir das Frontend nicht ändern mussten, nur weil wir eine neue Datenbank einsetzen. Tatsächlich sind alle Änderungen in den Datenquellen isoliert. Nicht schlecht, oder? Wir haben gerade die Skalierbarkeit unserer Anwendung durch den Einsatz einer robusteren Datenbank erhöht. Das ist aber nicht alles was wir tun können. Wir können unsere Komponenten auch innerhalb des Microsoft Transaction Server platzieren. rechten Maustaste auf „My Computer“ klicken und anschließend „Stop DTC“ auswählen. 2. Öffnen Sie den Registrierungseditor auf der Maschine, auf der der MTS ausgeführt wird. 3. Unter dem folgenden Registrierungsschlüssel finden Sie zwei Werte, die auf die Namen der .DLLs der Client-Software von Oracle 7.3 verweisen: HKEY_LOCAL_MACHINE\SOF TWARE\Microsoft\Transaction Server\Local Computer\My Computer 4. Dabei handelt es sich um die Werte: OracleXaLib „xa73.dll“ und OracleSqlLib „sqllib18.dll“. Ausführen der Komponenten im Microsoft Transaction Server Ändern der Einstellungen Registry für Oracle8 5. Ändern Sie diese Werte ab, damit sie auf die .DLLs der ClientSoftware von Oracle8 verweisen: OracleXaLib „xa80.dll“ und der OracleSqlLib „sqllib80.dll“ Beachten Sie bitte: Wenn Sie die ClientSoftware von Oracle 7.3 einsetzen, können Sie diesen Abschnitt überspringen. Wenn Sie eine Oracle8-Datenbank einsetzen wollen, müssen Sie den Microsoft Transaction Server einrichten, damit er mit der Datenbank korrekt kommunizieren kann. Der MTS behandelt Transaktionen mit Oracle über die XA-Technologie. Unser Oracle8-Datenbankserver sollte bereits für diese Aktionen vorbereitet sein. Sollten Ihre Komponenten nicht korrekt reagieren, lesen Sie bitte den Artikel Q193893 der Microsoft Knowledgebase um zu erfahren, wie Sie alles richtig einrichten. Sie müssen für Oracle8 die folgenden Einstellungen ändern: 1. Beenden Sie den Microsoft Distributed Transaction Coordinator (DTC) aus der Microsoft Management Console (MMC) aus, indem Sie mit der 12-19 Entwickeln von Windows DNA/Teil 10 6. Beenden Sie Registrierungseditor den 7. Starten Sie aus der Microsoft Management Console (MMC) den Microsoft Distributed Transaction Coordinator (DTC) neu. Klicken Sie dafür mit der rechten Maustaste auf „My Computer“ und wählen Sie „Start DTC“. Registrieren der Komponenten in einem Package des MTS Testen Sie Ihre Komponenten immer sorgfältig, bevor Sie sie in der Umgebung des Microsoft Transaction Server ablaufen lassen. Der MTS fügt Ihren Anwendungen nicht nur eine erhöhte Skalierbarkeit hinzu, sondern auch ein höheres Maß der Komplexität. Ein Debugging ist in dieser Umgebung nicht einfach. Zum Glück haben die Entwickler des COMCodebook bereits die meisten dieser Probleme bedacht. Um die Komponenten dem MTS hinzuzufügen, folgen Sie den folgenden Schritten: FoxX Professional Seite 7 1. Öffnen Sie die Management Console des MTS und erstellen Sie ein neues Package. Dies geschieht durch einen Klick mit der rechten Maustaste auf My Computer/Packages Installed/ im linken Fenster. Wählen Sie aus dem Kontextmenü „New/Package“. 2. Der Package-Assistent zeigt Ihnen zwei Möglichkeiten an, das Importieren eines bestehenden Package oder das Erstellen eines neuen. Wählen Sie das Erstellen eines neuen leeren Package. 3. Als nächstes müssen Sie dem Package einen Namen geben. Geben Sie AttApp ein und klicken Sie auf „Next“. 4. Jetzt fragt Sie der Assistent nach den Einstellungen für die Identität des Package. Lassen Sie die Einstellung beim vorgeschlagenen „interaktiven Anwender“. Klicken Sie auf „Finish“. 5. Expandieren Sie Ihr Package im linken Fenster und klicken Sie mit der rechten Maustaste auf „Komponenten“. Wählen Sie im Kontextmenü „Neu“ und anschließend Komponente. 6. Sie werden gefragt, was getan werden soll. Wählen Sie „Komponente(n) installieren, die bereits registriert sind“. 7. Aus der langen Liste der registrierten Komponenten wählen Sie AttData, AttResMgr und AttValid. 8. Nachdem die Komponenten erfolgreich registriert wurden, markieren Sie im rechten Fenster AttData und klicken mit der rechten Maustaste darauf. Wählen Sie im Kontextmenü „Eigenschaften“, wechseln auf den Tab „Transaktionen“ und wählen den 12-19 Entwickeln von Windows DNA/Teil 10 Tab „Transaktion“. Wählen Sie die Option „Erfordert eine Transaktion“. 9. Markieren Sie AttValid und AttResMgr und klicken Sie mit der rechten Maustaste. Wählen Sie wieder „Eigenschaften“ und wechseln zum Tab „Transaktion“. Wählen Sie die Option „Unterstützt Transaktionen“. Jetzt laufen Ihre Komponenten innerhalb des MTS. Testen Sie sie, indem Sie in Ihren Browser wechseln, eine Suche ausführen und einen Anwalt ändern. Wir verfügen jetzt über eine komplett skalierbare mehrschichtige Anwendung, die wir mit der Theorie der Windows DNA im Hinterkopf und mit einer mittleren Schicht unter Verwendung des COMCodebook entwickelt haben. Zusammenfassung Ich hoffe, dass Ihnen dieser Artikel zu verstehen hilft, wie Sie eine mehrschichtige Anwendung unter Verwendung des COMCodebook und von Windows DNA entwickeln. COMCodebook stellt uns das Innenleben der mittleren Schicht zur Verfügung und ermöglicht uns die Auswahl der Datenbank und der Präsentationsschicht. Wir haben eine einfache browserbasierte Benutzeroberfläche von Anfang an entwickelt und haben dabei HTML, CSS, JavaScript und ASP behandelt. Wir haben gesehen, wie einfach es ist, unsere Anwendung auf Oracle und den SQL Server zu skalieren und wie wir Transaktionen mit unseren Komponenten nutzen. Mit einer sorgfältigen Planung und etwas Erfahrung sollten Sie in der Lage sein, skalierbare Geschäftsanwendungen schnell und einfach zu erstellen. Ich hoffe, Sie sind genau so begeistert wie ich über die Zukunft mehrschichtiger Geschäftsanwendungen und wünsche Ihnen viel Glück bei Ihren Bemühungen. FoxX Professional Seite 8