Conhecimento mORMot Framework
Alguém tem conhecimento sobre desenvolvimento com o mORMot Framework ([url]http://synopse.info/fossil/wiki/Synopse+OpenSource[/url])?
Victor Bianchi
Melhor post
Aparecido Silva
30/06/2015
construí o meu modelo usando o sequinte exemplo
e até agora tem funcionado bem
http://synopse.info/forum/viewtopic.php?pid=12973#p12973
http://synopse.info/forum/viewtopic.php?pid=12621#p12621
implementei esses exemplos, e a partir dele fui criando os meu métodos,
uso como front-end o extjs
abraços
cido
Mais Respostas
Questor Sistemas
11/01/2013
Edinei Colli
11/01/2013
Se precisar de alguma dica me avise.
Gerasoft Ltda
11/01/2013
Edinei Colli
11/01/2013
Ultimamente não tenho utilizado tanto, mas já utilizei o mORMot para persistência com SQLite, para serviços Rest e também como servidor para uma página criada com AngularJS.
Abraço
Aparecido Silva
11/01/2013
minha dificuldade esta em outros DB como por exemplo o firebird, nao acho nada entendivel para meu nivel de connhecimento de appserver, se tiver alguma indicacao o modelo de fontes ajuda a gente...
Edinei Colli
11/01/2013
Somente utilizei com SQLite.
Pelo que procurei, firebird pode funcionar com mORMot utilizando FireDac.
Você está utilizando com qual versão do Delphi?
Vou tentar fazer um exemplo funcionar.
Abraço
Aparecido Silva
11/01/2013
Se tiver algum custo, terei o maior prazer em contribuir,
o Delphi que estou usando é o XE6 e o XE7
estou estudando full time o mormot me simpatizei muito com ele.
o exemplo ideal pra mim que resolveria os meus problemas usando o Firebird 2.5
e um exemplo que vem com o FrameWork.
18 - AJAX ExtJS Grid, é a forma como uso com o Php
Obrigado por responder.
cido
Aparecido Silva
11/01/2013
abraços
cido
Aparecido Silva
11/01/2013
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, SynDBFireDAC,
Dialogs, StdCtrls, SynCommons, SynLog, mORMotDB,SynDB,FireDAC.Phys.IB, mORMot, mORMotSQLite3,
SynSQLite3Static, mORMotHttpServer,
SynCrtSock,SynSQLite3,mORMotMVC,SynDBZEOS;
type
TSQLSampleRecord = class(TSQLRecord)
private
fName: RawUTF8;
fQuestion: RawUTF8;
fTimeD: TDateTime;
public
published
property TimeD : TDateTime read fTimeD write fTimeD;
property Name : RawUTF8 read fName write fName;
property Question: RawUTF8 read fQuestion write fQuestion;
end;
TForm1 = class(TForm)
Label1: TLabel;
btnQuit: TButton;
Label2: TLabel;
btnShowLogs: TButton;
procedure btnQuitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure btnShowLogsClick(Sender: TObject);
private
public
Model: TSQLModel;
DB: TSQLRestServerDB;
Server: TSQLHttpServer;
end;
var
Form1 : TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.btnQuitClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
aProps : TSQLDBZEOSConnectionProperties;
begin
aProps := TSQLDBZEOSConnectionProperties.Create(
TSQLDBZEOSConnectionProperties.URI(
dFirebird,
'localhost:3050',
'C:\fbclient.dll',
False),
'c:\webserver\basefirebird\dados\samosdb.fdb',
'SYSDBA',
'masterkey');
Model := TSQLModel.Create([TSQLSampleRecord], 'contact');
DB := TSQLRestServerDB.Create(Model);
VirtualTableExternalRegisterAll(Model, aProps);
// customize RESTful URI parameters as expected by our ExtJS client
DB.URIPagingParameters.StartIndex := 'START=';
DB.URIPagingParameters.Results := 'LIMIT=';
DB.URIPagingParameters.SendTotalRowsCountFmt := ',"total":%';
// initialize and launch the server
// DB.CreateMissingTables;
Server := TSQLHttpServer.Create('8090',[DB],'+',useHttpApiRegisteringURI);
Server.AccessControlAllowOrigin := '*';
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Server.Free;
DB.Free;
Model.Free;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Label1.Caption := Caption;
end;
procedure TForm1.btnShowLogsClick(Sender: TObject);
begin
AllocConsole;
TextColor(ccLightGray); // to force the console to be recognized
with TSQLLog.Family do begin
Level := LOG_VERBOSE;
EchoToConsole := LOG_VERBOSE; // log all events to the console
end;
btnShowLogs.Hide;
end;
end.
Dorivan Sousa
11/01/2013
Aparecido Silva
11/01/2013
to usando o DelphiXE8 com FireDac e Firebird 2.5
Dorivan Sousa
11/01/2013
Almir Sousa.
11/01/2013
Poderiam postar um exemplo com o Firebird. Ajudaria bastante a galera que está com dúvida.
Agradeço desde já.
Aparecido Silva
11/01/2013
to usando com o extjs (sencha) mas nao coloquei em producao ainda,
apenas tenho testando.
https://www.dropbox.com/s/udozap9xdjm0k1z/AppMormotSample.rar?dl=0
abraços
cido
Paulo Monteiro
11/01/2013
Obrigado pelo exemplo.
Estou usando o datasnap gerando json padrão para integrar com o extjs ou outro tipo de Ria, mas estou tempo muito problema, acho que vou mudar para o Mormot ou TMS Sparkle.
No lugar do extjs puro, estou usando o unigui, gostei muito do resultado, faz um teste, vai reduzir bastante o tempo de desenvolvimento.
Abraços
Paulo
Aparecido Silva
11/01/2013
testei bastante o DataSnap, e achei o Mormot Melhor na performace, uso da memoria e
simplicidade na comunicacao com o ExtJs.
com o DataSnap tive que usar os recursos do http://enable-cors.org/ no Mormot cumunicou puro.
tudo que tenho feito funciona sempre de primeira, acho que vale mais a pena o MorMot.
Abraços
Paulo Monteiro
11/01/2013
Não sei se a estrutura que envio como exemplo é a mesma da que está trabalhando, se não se importar vou deixar uns pontos para revisar, conforme os teste que fiz:
Os TFDQuery estão acumulando na memoria;
Sugiro criar um FDConection por conexão, caso contrário irá ter problema com múltiplos acesso, tive esse problema, use o FDManager para gerenciar http://docwiki.embarcadero.com/RADStudio/XE6/en/Multithreading_(FireDAC)
Estou usando o JMeter para testar a carga, se fizer o teste na sua aplicação, vai consegui observar o que estou explicando.
Aproveitando, sabe como tirar o result:[], e só aparecer o json que gerou? No datasnap, precisei mudar a forma de retorno.
Abraços,
Paulo
Aparecido Silva
11/01/2013
sobre tirar o result fiz da sequinte forma
Texto := StrSubst(json,'{"result":[','',999);
Texto := StrSubst(Texto,'}]}','}',999);
contatei até o forum do mormot mas nao me deram solucao
http://synopse.info/forum/viewtopic.php?id=2400
// StrSubst
//******************************************************************//
function StrSubst(const S, Del, Ins: string; Count: Integer): string;
//*******//**********************************************************//
var
I, Found: Integer;
R: string;
begin
R := S;
if (S = '') or (Del = '') or (Del = Ins) then
R := ''
else
begin
Found := 0;
I := 1;
while ((Count = 0) or (Found < Count)) and (I <= Length(R)) do
begin
if Copy(R, I, Length(Del)) = Del then
begin
Inc(Found);
Delete(R, I, Length(Del));
Insert(Ins, R, I);
Inc(I, Length(Ins));
end
else
Inc(I);
end;
end;
Result := R;
end;
Aparecido Silva
11/01/2013
tem como voce me mostrar como fez o FDConection por conexão ?
tentei fazer aqui e ele nao traz mais dados
retorna uma query vazia.
abraços
Paulo Monteiro
11/01/2013
Como não conheço o mormot, não sei como ele trata essa parte, vi no blog deles que parece que tem um classe do mormot para usar com firedac.
No datasnap fiz da seguinte forma:
Criei um data module, com o FDManger, no create, carrego as configurações de conexão.
procedure TDMConexao.FormCreate(Sender: TObject);
var
oParams: TStrings;
begin
oParams := TStringList.Create;
oParams.Add('Database=localhost:C:\FireBird\EMPLOYEE.FDB');
oParams.Add('User_Name=SYSDBA');
oParams.Add('Password=masterkey');
oParams.Add('Pooled=True');
FDManager.AddConnectionDef('Fenix_Pooled', 'FB', oParams);
FreeAndNil(oParams);
FDManager.Open;
end;
function TDMConexao.getSFConn: TFDConnection;
var
SFConn: TFDConnection;
begin
SFConn := TFDConnection.Create(nil);
SFConn.ConnectionDefName := 'Fenix_Pooled';
SFConn.Open();
Result := SFConn;
end;
//na classe que será consumidas os metodos, coloque algo parecido com isso
procedure TCliente.getQtde:Integer;
var
qry: TFDQuery;
con: TFDConnection;
begin
result := -1;
con := FDConecao.getSFConn;
qry := TFDQuery.Create(nil);
qry.Connection := con;
Try
Try
qry.SQL.text := 'select count(*) as Qtde from EMPLOYEE';
con.Open();
qry.Open();
Result := qry.fieldbyname('Qtde').AsInteger;
con.Close;
Except
on e: exception do
addLog(e.message);
End;
end;
end;
finally
con.Free();
qry.Free();
end;
end;
Depois atualiza o seu exemplo e me envio o link, assim que acalmar um pouco as coisas aqui, vou fazer um implementação nele e te devolvo, mas vai me passando as atualizações, por favor.
Aparecido Silva
11/01/2013
tava no caminho certo, ja tinha alterado pra essa forma depois que vc me avisou...
achei uns modelos na NET
obrigado.
Paulo Monteiro
11/01/2013
Sendo assim deveria está tragando o envio através do get/post/put/delete (restful), desta forma que fez, irá ter problema quando enviar bastante dados e tem a questão de segurança.
Vitorino Almeida
11/01/2013
Por favor, tem como você postar o código de conexão do mORMot com Firebird que conseguiu?
Agradeço antecipadamente
Adriano Dias
11/01/2013
Para personalizar o retorno do teu metodo, mude o tipo do retorno para TServiceCustomAnswer (com ele você pode especificar um conteúdo personalizado).
Exemplo:
function ReverseString(AText: RawJSON): TServiceCustomAnswer;
begin
Result.Header := TEXT_CONTENT_TYPE_HEADER;
Result.Content := FormatUTF8('%',[SO(System.StrUtils.ReverseString(AText)).AsJSon]);
end;
Aparecido Silva
11/01/2013
Aparecido Silva
11/01/2013
Adriano Dias
11/01/2013
Aparecido Silva
11/01/2013
Aparecido Silva
11/01/2013
mas nao tenho muita experiencia em OOP, podem me dar uma dica
https://www.dropbox.com/s/udozap9xdjm0k1z/AppMormotSample.rar?dl=0
Adriano Sérgio
11/01/2013
Abri teu exemplo e esta rodando, quais seria tuas dúvidas e no que você precisa de ajuda, mais especificamente?
Aparecido Silva
11/01/2013
via get faço com uma mão nas costas.
ja pesquisei muito na net e nao consigo entender as explicacoes e no forum ninguem responde
Abraços
Aparecido Silva
11/01/2013
ja pesquisei muito e nao consigo achar nada que eu entenda o que fizeram
abraços
Aparecido Silva
11/01/2013
ja pesquisei muito e nao consigo achar nada que eu entenda o que fizeram
abraços
Aparecido Silva
11/01/2013
enviando os dado via POST pelo ExtJs 6.01, e meu problema tem sido como pegar
esses dados no mormot, ele até passa pelo metodo mas como os dados vem pelo
request payload nao consigo entender como faço para pega-lo e deserializar.
tenho sentido muita firmeza no mormot, esse acredito tem sido o meu ultimo
carma com ele, resolvendo to feliz.
Abraços
cido
Leugim Legna
11/01/2013
Estou muito interessado em aprender Mormot / Delphi, até agora tenho trabalhado bem com DataSnap , mas como eu entendo Mormot é muito melhor, gostaria de criar um aplicativo cliente / servidor conectado a Firebird e não sabe como fazê-lo com Mormot ,
Cooperação ¿ poderia me dar uma mão , por favor?
Agradeço a atenção e ajudar
Aparecido Silva
11/01/2013
senao solicite pelo email suporte@samos.com.br
que te envio.
Aparecido Silva
11/01/2013
https://github.com/GitStorageOne/mORMot.REST