90 lines
2.8 KiB
ObjectPascal
90 lines
2.8 KiB
ObjectPascal
/// MVC sample web application, publishing a simple BLOG and PostgreSQL as DB
|
|
program MVCServerPostgreSQL;
|
|
|
|
{$APPTYPE CONSOLE}
|
|
|
|
|
|
// please select one of the two! :)
|
|
{$define USEZEOSPOSTGRESQL}
|
|
{.$define USEFIREDACPOSTGRESQL}
|
|
|
|
// direct ZDBC/FireDAC driver needs only libpq.dll and libintl.dll e.g. from
|
|
// http://www.enterprisedb.com/products-services-training/pgbindownload
|
|
|
|
uses
|
|
{$I SynDprUses.inc} // will enable FastMM4 prior to Delphi 2006
|
|
SynCrtSock,
|
|
SynCommons,
|
|
SynTable,
|
|
mORMot,
|
|
SynSQLite3,
|
|
SynSQLite3Static,
|
|
mORMotSQLite3,
|
|
mORMotHttpServer,
|
|
mORMotMVC,
|
|
SynDB,
|
|
mORMotDB,
|
|
{$ifdef USEZEOSPOSTGRESQL}
|
|
SynDBZeos, // use at least R3435 testing-7.2 - see synopse.info/forum
|
|
{$endif}
|
|
{$ifdef USEFIREDACPOSTGRESQL}
|
|
SynDBFireDAC,
|
|
{$ifdef ISDELPHIXE5} FireDAC.Phys.PG, {$else} uADPhysPG, {$endif}
|
|
{$endif}
|
|
MVCModel,
|
|
MVCViewModel,
|
|
SysUtils;
|
|
|
|
var aModel: TSQLModel;
|
|
aExternalDB: TSQLDBConnectionPropertiesThreadSafe;
|
|
aServer: TSQLRestServerDB;
|
|
aApplication: TBlogApplication;
|
|
aHTTPServer: TSQLHttpServer;
|
|
begin
|
|
aModel := CreateModel;
|
|
try
|
|
{$ifdef USEZEOSPOSTGRESQL}
|
|
aExternalDB := TSQLDBZEOSConnectionProperties.Create(
|
|
TSQLDBZEOSConnectionProperties.URI(dPostgreSQL,'localhost:5433'),
|
|
{$endif}
|
|
{$ifdef USEFIREDACPOSTGRESQL}
|
|
aExternalDB := TSQLDBFireDACConnectionProperties.Create(
|
|
'PG?Server=localhost;Port=5433',
|
|
{$endif}
|
|
'postgres','postgres','postgresPassword');
|
|
try
|
|
aExternalDB.ThreadingMode := tmMainConnection; // force SINGLE connection
|
|
VirtualTableExternalRegisterAll(aModel,aExternalDB,[regMapAutoKeywordFields]);
|
|
aServer := TSQLRestServerDB.Create(aModel,SQLITE_MEMORY_DATABASE_NAME);
|
|
try // PostgreSQL uses one fork per connection -> better only two threads
|
|
aServer.AcquireExecutionMode[execORMGet] := amBackgroundThread;
|
|
aServer.AcquireExecutionMode[execORMWrite] := amBackgroundThread;
|
|
aServer.CreateMissingTables;
|
|
aApplication := TBlogApplication.Create;
|
|
try
|
|
aApplication.Start(aServer);
|
|
aHTTPServer := TSQLHttpServer.Create('8092',aServer,'+',useHttpApiRegisteringURI);
|
|
try
|
|
aHTTPServer.RootRedirectToURI('blog/default'); // redirect localhost:8092
|
|
writeln('"MVC Blog Server" launched on port 8092 using ',aHttpServer.HttpServer.ClassName);
|
|
writeln(#10'You can check http://localhost:8092/blog/mvc-info for information');
|
|
writeln('or point to http://localhost:8092 to access the web app.');
|
|
writeln(#10'Press [Enter] to close the server.'#10);
|
|
readln;
|
|
finally
|
|
aHTTPServer.Free;
|
|
end;
|
|
finally
|
|
aApplication.Free;
|
|
end;
|
|
finally
|
|
aServer.Free;
|
|
end;
|
|
finally
|
|
aExternalDB.Free;
|
|
end;
|
|
finally
|
|
aModel.Free;
|
|
end;
|
|
end.
|