AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Portable Firebird Server 2.1.3
Thema durchsuchen
Ansicht
Themen-Optionen

Portable Firebird Server 2.1.3

Ein Thema von neo4a · begonnen am 24. Sep 2009 · letzter Beitrag vom 15. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
neo4a
Registriert seit: 22. Jan 2007
Mehr als technische Übung zur Überprüfung der Machbarkeit habe ich eine kompakte, multiuser-fähige und portable Version des Firebird-Server zusammengestellt:

- Single Exe (knapp 4MB inkl. aller Tools wie gback, gfix etc.)
- Simple GUI
- Läuft ohne Installation auch im Non-Admin-Mode
- Multi-Instanzfähig durch freie Wahl des Ports
- Embedded, aber Multiuser-fähig
- Automtische Bereitstellung einer internen Alias.conf durch das Scannen aller fdb-Dateien im Applikationverzeichnis (und darunter)
- Standard-Anmeldung (SYSDBA/masterkey)

Prinzipiell funktioniert das mit jeder Firebird-Version. Denkbar ist auch eine Multiserverversion der unterschiedlichen Versionen.

Es gibt auch zur Laufzeit nur 1 Datei. Keine Unterverzeichnisse oder temporäres Entpacken o.ä. (also nicht wie bei Xenocode oder Thinapp.). Die einzige Spur eines laufenden FB-Servers ist die unvermeidliche *.lck-Datei, die im Programmverzeichnis angelegt wird. Leider bin ich bislang an der Virtualisierung dieser letzten Datei gescheitert. Ist der FB-Server gestartet, so erkennt man im Taskmanager 2 Instanzen einer dcServer.exe: 1. GUI, 2. FB-Server.


--
Andreas
Miniaturansicht angehängter Grafiken
screenshot_130.png  
Angehängte Dateien
Dateityp: zip dcserver_816.zip (2,91 MB, 195x aufgerufen)
 
omata

 
Delphi 7 Enterprise
 
#2
  Alt 26. Sep 2009, 00:08
Wirklich sehr interessant, schade dass du nicht zeigst, wie man den Server selber in seine Anwendung integrieren kann.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

 
Delphi XE8 Enterprise
 
#3
  Alt 26. Sep 2009, 07:06
Hallo Andreas,

das hört sich sehr interessant an. Meine Fragen sind :

Wie kann ich das für eigene Anwendungen nutzen
Muss ich trotzdem etwas von Firebird installieren
Mit welchen Komponenten kann ich auf die Datenbank des Portable Firebird Servers zugreifen

Edit :
Aber macht das ganze nicht eigentlich schon der Firebird Embedded Server ?
Rolf Warnecke
  Mit Zitat antworten Zitat
mkinzler

 
Delphi 11 Alexandria
 
#4
  Alt 26. Sep 2009, 07:52
Für den embedded gelten aber Einschränkungen
Da diese Version einen normalen Server startet sollte jede Komponente funktionieren.
Markus Kinzler
  Mit Zitat antworten Zitat
neo4a

 
Delphi XE2 Architect
 
#5
  Alt 26. Sep 2009, 08:58
Zitat von omata:
Wirklich sehr interessant, schade dass du nicht zeigst, wie man den Server selber in seine Anwendung integrieren kann.
Das ist der nächste Schritt, bei dem die Lösung Teil eines Exe-Plugin-Systems wird. Hier werden einzelne Programme dann mit dem Server arbeiten, die alle unter einer (insbesondere portablen) Oberfläche arbeiten. Deshalb kommt für mich auch nicht die embedded Variante in Frage.


Zitat von RWarnecke:
Wie kann ich das für eigene Anwendungen nutzen
Muss ich trotzdem etwas von Firebird installieren
Mit welchen Komponenten kann ich auf die Datenbank des Portable Firebird Servers zugreifen
Du brauchst halt nur noch die Datenbank und (m)eine Exe, startest diese und hast über einen voll funktionsfähigen FB-Server Zugriff auf die DB (multi-threaded und multi-user). Keine zusätzliche Datei ist dafür nötig ... aber möglich: jede einzelne Datei einer FB-Installation wird bei Vorhandensein genutzt. So kann man auch seine eigene security2.fdb, aliases.conf etc. mit ausliefern.

Als Komponenten würde ich mir UniDAC oder AnyDAC ansehen. Je nach Delphi-Version gibt es auch noch IBX, IBO, ZEOS, FUIB etc. Ab Delphi 2010 geht es auch nativ. Ich werde mich nun mit UniDAC unter D2009/2010 beschäftigen (und damit IBO seit 1997 das erste Mal untreu).

Den embedded FB-Server nutze ich schon sehr lange. Dort hat mich immer die vorgegebene Verzeichnis-Struktur gestört, die portable Anwendungen behindern. Nun kann ich den Server innerhalb meines Programmes ausliefern. Die Demo ist ja nur ... eine Demo . Schön ist auch, dass das Ganze in eingeschränkter Umgebung funktioniert: Lediglich eine Firewall meckert und schon läuft's, auch unabhängig von anderen bereits installierten Instanzen.


Zitat von mkinzler:
Für den embedded gelten aber Einschränkungen
Da diese Version einen normalen Server startet sollte jede Komponente funktionieren.
Yeaph, obwohl die 2.5er zumindest bereits Multithreading bringen soll.

--
Andreas
Andreas
  Mit Zitat antworten Zitat
HeinePotsdam

 
Delphi 7 Professional
 
#6
  Alt 16. Nov 2009, 07:06
Klingt ja sehr interessant - aber leider kann ich das Demo nicht laden,
da das Download-Anzahl-Limit erreicht ist.

Kannst du es mir trotzdem senden?

Mfg Olaf
  Mit Zitat antworten Zitat
netdope
 
#7
  Alt 16. Nov 2009, 14:55
Für mich klingt das auch interesant!
Würde mich sehr interessieren wie du das gelöst hast.
  Mit Zitat antworten Zitat
neo4a

 
Delphi XE2 Architect
 
#8
  Alt 16. Nov 2009, 18:54
Ich habe das Demo-Projekt noch einmal aktiviert (Download).

Hier noch ein paar Infos zur Vorgehensweise und zu verwendeten Tools:

Ein Standard-Firebird-Verzeichnis hat knapp 9MB. Das habe ich in eine Ressourcen-Datei gepackt. Mit BoxedApp kann ich die Ressourcen zur Laufzeit auspacken. Das sieht etwa so aus:

Delphi-Quellcode:
procedure TForm1.StartClick(Sender: TObject);
var s:string;path:string;
begin
  path:=ExtractFilepath(Application.ExeName)+'';
  if not FileExists(path+'\bin\fbclient.dll') then
    CreateVirtualFile(path+'\bin\fbclient.dll','RES__BIN_FBCLIENT_DLL');
  if not FileExists(path+'\bin\fbrmclib.dll') then
    CreateVirtualFile(path+'\bin\fbrmclib.dll','RES__BIN_FBRMCLIB_DLL');
  if not FileExists(path+'\bin\fbserver.exe') then
    CreateVirtualFile(path+'\bin\fbserver.exe','RES__BIN_FBSERVER_EXE');
  if not FileExists(path+'\bin\gbak.exe') then
    CreateVirtualFile(path+'\bin\gbak.exe','RES__BIN_GBAK_EXE');
  if not FileExists(path+'\bin\gfix.exe') then
    CreateVirtualFile(path+'\bin\gfix.exe','RES__BIN_GFIX_EXE');
  if not FileExists(path+'\bin\gsec.exe') then
    CreateVirtualFile(path+'\bin\gsec.exe','RES__BIN_GSEC_EXE');
  if not FileExists(path+'\bin\gstat.exe') then
    CreateVirtualFile(path+'\bin\gstat.exe','RES__BIN_GSTAT_EXE');
  if not FileExists(path+'\bin\ib_util.dll') then
    CreateVirtualFile(path+'\bin\ib_util.dll','RES__BIN_IB_UTIL_DLL');
  if not FileExists(path+'\bin\icudt30.dll') then
    CreateVirtualFile(path+'\bin\icudt30.dll','RES__BIN_ICUDT30_DLL');
  if not FileExists(path+'\bin\icuin30.dll') then
    CreateVirtualFile(path+'\bin\icuin30.dll','RES__BIN_ICUIN30_DLL');
  if not FileExists(path+'\bin\icuuc30.dll') then
    CreateVirtualFile(path+'\bin\icuuc30.dll','RES__BIN_ICUUC30_DLL');
  if not FileExists(path+'\bin\Microsoft.VC80.CRT.manifest') then
    CreateVirtualFile(path+'\bin\Microsoft.VC80.CRT.manifest','RES__BIN_MICROSOFT_VC80_CRT_MANIFEST');
  if not FileExists(path+'\bin\msvcp80.dll') then
    CreateVirtualFile(path+'\bin\msvcp80.dll','RES__BIN_MSVCP80_DLL');
  if not FileExists(path+'\bin\msvcr80.dll') then
    CreateVirtualFile(path+'\bin\msvcr80.dll','RES__BIN_MSVCR80_DLL');
  if not FileExists(path+'\bin\nbackup.exe') then
    CreateVirtualFile(path+'\bin\nbackup.exe','RES__BIN_NBACKUP_EXE');
  if not FileExists(path+'\firebird.conf') then
    CreateVirtualFile(path+'\firebird.conf','RES__FIREBIRD_CONF');
  if not FileExists(path+'\firebird.log') then
    CreateVirtualFile(path+'\firebird.log','RES__FIREBIRD_LOG');
  if not FileExists(path+'\firebird.msg') then
    CreateVirtualFile(path+'\firebird.msg','RES__FIREBIRD_MSG');
  if not FileExists(path+'\intl\fbintl.conf') then
    CreateVirtualFile(path+'\intl\fbintl.conf','RES__INTL_FBINTL_CONF');
  if not FileExists(path+'\intl\fbintl.dll') then
    CreateVirtualFile(path+'\intl\fbintl.dll','RES__INTL_FBINTL_DLL');
  if not FileExists(path+'\security2.fdb') then
    CreateVirtualFile(path+'\security2.fdb','RES__SECURITY2_FDB');
  if not FileExists(path+'\udf\fbudf.dll') then
    CreateVirtualFile(path+'\udf\fbudf.dll','RES__UDF_FBUDF_DLL');
  if not FileExists(path+'\udf\ib_udf.dll') then
    CreateVirtualFile(path+'\udf\ib_udf.dll','RES__UDF_IB_UDF_DLL');
  if not FileExists(path+'\aliases.conf') then begin
    CreateVirtualFile(path+'\aliases.conf',''); //Leere Datei
    CreateAliases(path+'\aliases.conf'); //Sammle die Datenbanken im Unterverzeichnis
  end;
  AliasListBox.Items.LoadFromFile(path+'\aliases.conf');
  if AliasListBox.Items.Count>0 then begin
    AliasListBox.ItemIndex:=0;
    SetCS;
  end;
  fbserverhandle:=0;
  s:=path+'\bin\fbserver.exe';
  caption:=s;
  if FileExists(s) then begin
    Caption:=Format(Application.Title+' (gestartet auf %s)',[JvComputerInfoEx1.Identification.IPAddress]);
    fbserverhandle:=ExecAndWait(s,Format(' -a -n -p %d',[PortEdit.Value])); //Starte den Child-Prozess
  end;
end;

procedure TForm1.StopClick(Sender: TObject);
begin
  if fbserverhandle>0 then begin
    Caption:=Format(Application.Title+' (gestoppt auf %s)',[JvComputerInfoEx1.Identification.IPAddress]);
    TerminateProcess(fbserverhandle, 1);
    CloseHandle(fbserverhandle);
    fbserverhandle:=0;
  end;

end;

initialization

   BoxedAppSDK_Init;

finalization
   BoxedAppSDK_Exit;
Die resultierende Exe hat ca. 11-12 MB, die dann mittels PECompact auf ca. 3MB eingedampft werden kann. Aus Sicht meines Programmes habe ich den FB-Server "voll im Griff" und kann ihn nach Belieben starten/stoppen, Datenbanken sichern, die Konfiguration on the fly anpassen etc. Bestehende Konfiguration sind dabei kein Problem und alles ist ohne Installation voll portabel.

--
Andreas
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

 
Delphi XE3 Enterprise
 
#9
  Alt 17. Nov 2009, 21:04
Den Downloadlink im 1.Beitrag hat es erlegt... // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
neo4a

 
Delphi XE2 Architect
 
#10
  Alt 18. Nov 2009, 06:59
Zitat von mschaefer:
Den Downloadlink im 1.Beitrag hat es erlegt... // Martin
Ich habe den Link in Post #1 mit dem aus #8 aktualisiert.

--
Andreas
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz