Pegaram pesado!

59 respostas
saoj

Eu acho a idéia de prevalência muito interessante e o Klaus merece os méritos por ter reunido essas idéias no Prevayler.

Mas parece que a filosofia de jogar o banco de dados no lixo e o marketing agressivo do Klaus está incomodando algumas pessoas.

Vejam isso aí embaixo: :shock:

http://jroller.com/page/fate/20041230#the_real_interview_with_klaus

59 Respostas

Rafael_Steil

Ah, o Hani faz isso com todo mundo.

Rafael

kartler

Mas a maneira que o KLAUS faz propaganda do prevayler deixa qualquer um … OLHA A PERGUNTA “VOCÊ AINDA USA BANCO DE DADOS ?”
“Tome a pilula vermelha e seja liberto”, “Quem usa banco de dados está Ultrapassado”…," banco de dados é um Câncer"…

Por Favor dá licensa meu, só pelos motivos dessas frases nem mesmo cheguei a testar o produto. todos nós sabemos ninguém é bobo, os Bancos de dados “ainda” são um meio maduro e seguro de guardar dados . prefiro db4objects ou então Space4J que eu acho que é um projeto Brasileiro também(Ainda vou dar uma olhada em Space4J).

A ARROGANCIA É O PRIMEIRO E UNICO PASSO PARA A DERROTA.

100% PostgreSQL - License BSD AHAUHAUHAUHAUHAUHAUHUAHAUUAHUHAUHAUHAHAUHUAHAU
+Hibernate ou Ibatis AHAUHAHAUHUAHAUHAUH

Marketing maduro e Humilde tem bastante chanses de ser bem sucedido.

Rubem_Azenha

essa cara aí é bem sensacionalista…
o sistema do prevayler é bom, mas se o cara não manerar, o pessoal vai pegar raiva dele e não vai usar por causa dos exageiros que ele fala

Daniel_Quirino_Olive

HUAHAHUAHUHUAHAUHUAHUAHUAAHU!! :lol:

Quando eu crescer quero ser igual ao Hani :stuck_out_tongue:

louds

ficou menos comica que a original.

cv1

Tambem achei, mas po, imagino que seja MUITO dificil superar a entrevista original nesse quesito, louds…

(Alias, pra quem nao sabe, sim, eu dei uma mao no Prevayler. Sim, eu acho e sempre achei o marketing do Prevayler meio palhacada.)

saoj

Eu ainda acredito em prevalência, desde que o framework tenha:

:arrow: Cluster
:arrow: Indexação
:arrow: Passivação
:arrow: API o mais simples possível
:arrow: Um monte de comandos CRUD pré-prontos
:arrow: Um mecanismos de replicação assíncrona (de madrugada) dos comandos para um banco de dados, o tal do executeSQL, porque viver sem banco-de-dados ainda não é possível.
:arrow: Talvez uma linguagem tipo SQL para fazer writes sem ter que ficar codificando comandos sempre. (Não sei se isso é bom, nem se é possível)

Também ainda não sei como se previnir de um comando muito demorado que coloque o sistema todo num hault, já que por definição todos os writes são em série, e não em paralelo. Fazer lazy-evaluation de um comando é extramamente complicado e inviabiliza a replicação (cluster) e a premissa de um commit, eu acho… 8)

Ironlynx

Huhahaa…a original é a mais cômica!

É verdade… eu acho q a ausência de replicação automática(instant on),com um slave virando master na queda deste, o que falta de principal no Prevayler…(todo mundo de bd pega no meu pé com isso…)

Sérgio,ainda não usei o Space4J, mas estou animado em testar!
Vou dar uma passada e baixá-lo…
Acho q o excessivo “Hype” do Klauss vai fazer os desenvolvedores migrarem para outras soluções prevalentes logo,logo…

louds

Vejamos,

Clustering na forma como existe no prevayler/space4j não é clustering mas sim replicação master/slave que a única utilidade que conseguiram encontrar é para aliviar o problema do snapshot.

Indexação em um sistema ‘prevalente’ para mim é um java.util.Map, ou tem algo mais que tou perdendo?

Passivação, tirando que fazer isso sem usar uma JVM modificada é proibitivamente caro, vai meio de encontro com o lema da prevalência, que é “sempre e tudo na memoria”, não?

API simples? Ate ai as APIs já são simples, ou melhor, são simplorias.

Quando a uma linguagem de consulta e alteração mais simples e prática. Poderia se usar OGNL, por exemplo, ou XPATH/XQUERY/XUPDATE/XPQP. Já quebra um super galho.

Pessoalmente, eu sou muito mais usar http://research.sun.com/forest/opj.main.html que Prevayler.

saoj

louds:
Vejamos,

Clustering na forma como existe no prevayler/space4j não é clustering mas sim replicação master/slave que a única utilidade que conseguiram encontrar é para aliviar o problema do snapshot.

Verdade! Mas a idéia também do cluster seria para rodar o Prevayler/Space4j em ambientes distribuídos, como um site com várias máquinas web em load balance. O cluster do Space4J está bonitinho, só falta fazer um stress teste para validá-lo. Falta tb tratar o caso de quando o master cair, para algum slave assumir. Não tenho idéia de como fazer isso…

Na maioria dos casos vai ser isso mesmo, mas seria legal um framework para organizar isso, principalmente para oferecer reindexação automática de objetos mutáveis. Também tem o lance das chaves compostas. O Space4J tem um framework de indexaçáo com Observer/Observable para fazer a reindexação automática. Dessa maneira, o cara cria um índice e ignora que ele existe. Pode adicionar, remover, alterar os seus objetos numa lista comum e ignorar a indexação. Como nos bancos de dados…

Verdade, mas acaba sendo a única saída (eu acho) para os casos que não há memória suficiente. Por exemplo, se botássemos esse fórum todo aqui em memória, imagina quantos objetos inúteis ficariam em memória. Posts antigos que ninguém mais vê. E num site com um milhão de cadastros que só 10 mil aparecem para se logar por dia? Deixar essa galera toda na memória é desnecessário. Agora se o cara arranjou uma máquina com 40 Gb de RAM, beleza, esquece a passivação!

louds

saoj:

Verdade! Mas a idéia também do cluster seria para rodar o Prevayler/Space4j em ambientes distribuídos, como um site com várias máquinas web em load balance. O cluster do Space4J está bonitinho, só falta fazer um stress teste para validá-lo. Falta tb tratar o caso de quando o master cair, para algum slave assumir. Não tenho idéia de como fazer isso…

Para isso ou vc precisaria expor a interface de execução de comandos para as demais máquinas executarem remotamente os comandos no master e introduzir um spof ou então suportar replicação multi-master, que é seria mais dificil.

Quanto a passivação, da forma como você descreveu parece mais 1 OODBMS meia boca que um sistema ‘prevalente’.

velo

Mas Sergio,

me diz uma coisa, o db4o me parece, eh muito bom pra armazenar objetos em disco. E se fosse feita uma cama “intermediária” que tivesse a responsabilidade de descidir c o objeto vai pra RAM ou pro HD e que ainda ficasse vasculhando a RAM e “baixando” os objetos que estão sem uso, seria viável, ou não?

Alias, como posso ajudar no desenvolvimento do Space4J?

VELO

cv1

Nao eh viavel saber quais objetos devem ir pro disco sem uma boa dose de conhecimento sobre o grafo de objetos em questao, coisa que nao da pra ser implementada de forma generica tao facilmente. Nao que seja impossivel, mas eh um trabalho bem consideravel, e a performance no fim das contas ia ser um tanto quanto, uhm, como colocar isso de forma positiva? - ridicula. :wink:

Diogenes

Já viu alguma implementação disso cv?
Onde?

cv1

Real, mesmo nenhuma, mas o unico jeito de fazer isso sem partir pra ignorancia (por exemplo, usando AOP) que eu vejo eh embolhando todos os objetos persistentes em um dynamic proxy hiper-mega-inteligente, que tem algum algoritmo pra determinar o que vai pro disco e o que fica, e recuperar os objetos do disco quando algum acesso eh tentado. Falando, ate parece facil, mas interceptar absolutamente todos os acessos a todas as instancias do seu grafo sem deixar vazar nada, e sem estragar a brincadeira (ou seja, ter que mexer no grafo pra adaptar ele pra esse modelo), eh muuuuuuuito punk. Factivel, assim como construir uma bomba nuclear caseira tambem eh, mas se alguma coisa der errado, voce vai passar um longo tempo juntando os cacos :mrgreen:

velo

Eu tava pensando numa ideia diferente…

Colocar uma camada intermediaria responsável por colocar no db4o ou no space4j(ou prevayler), ou seja, a cama intermediaria escolhe entre o HD e a RAM. Na hora que for solicitado esse objeto à camada intermediária, ela vai realizar o GET no dois sistemas (HD e RAM), e vai retornar o que ele axar. Quando o objeto estiver na ram, maravilha, vai ser instantaneo, no HD vai demorar, mas se tah no HD algum motivo tem (eh velho, naum eh importante, sei lah). Essa camada intermediaria seria responsável por vasculhar a RAM e ir guardando as coisas “velhas” no HD. Objetos q são acessados no HD pode ser promovidos pra RAM. Eu toh brincando num negocio assim.

O unico problema é que o start do db4o é muito, mas muito mais simples que dos sistemas de persistencia em memoria. Com 3 linhas de codigo gravo um objeto. Nas persistencias toh tendo que fazer 3, 4 classes ou metodos, e ainda com um agravante, naum consigo gravar um objeto Object (pode ser cagada minha, mas prevayler eu comecei a mecher ontem).

Com relação a definir c vai pra ram ou pro HD, pode-se obrigar a implementação de interface que tenha um boolean e um Date. O boolean quando false é default no HD, não sobre pra RAM. E se o objeto tiver mais q X dias(date), vai pro HD. Mecheu nele, atualiza o Date e sobe pra RAM.

Sei lah, possivel é. Que nem diz uma cara q eu conheço, na informática tudo é possivel. Se alguem diz q não dá, ou é muito caro, ou o cara não qr fazer. A 2 anos atrás, o que vocês falariam do looking glass?

VELO

Diogenes

E se eu tivesse um “dynamic proxy hiper-mega-inteligente” que primeiramente procurasse meu querido objeto em um uma pilha atualizada de tempos em tempos com objetos randomicamente selecionados?

Qual a probabilidade de ele achar o objeto que ele quer lah?
Será que isso não seria mais eficiente que definir regras genéricas considerando outros fatores não?

Meio bobosort isso, não?! :wink:

velo

Diogenes:
E se eu tivesse um “dynamic proxy hiper-mega-inteligente” que primeiramente procurasse meu querido objeto em um uma pilha atualizada de tempos em tempos com objetos randomicamente selecionados?

Randomico?.. isso não inclui colocar objetos em desuso e memoria e acabar arquivos itens q são frequentemente usado?

Tem algum jeito de eu iniciar o prevayler ou o SPace4J simples assim?

public void inserir(Object o){ ObjectContainer db = Db4o.openFile("src/bancoObjetos/db4o/te.yap"); db.set(o); db.close();}

Eu não consigo iniciar ele simples assim, sou taum burro assim?

Rubem_Azenha

tipo um cache?

velo

Eh, ± um cache.

Mas na verdade, vc poderia definir q um objeto é obrigado a ficar na RAM. Quer esteja em uso, qr não.

Mas, pode-se pensar num cache sim.

VELO

PS: Alguem sabe? :oops:

Rubem_Azenha

ué, mas se ele não for ser usado, não tem pq deixar ele na ram

boaglio

Sinceramente eu não vejo isso com bons olhos…

Deixar uma tabela que é muito utilizada na memória…será
que nenhum fabricante de banco de dados pensou nisso antes?

Claro que sim!

O Oracle faz isso já de maneira otimizada, é só configurar o
espaço de memória pra isso.

Além disso é possível vc colocar rotinas (procedure,packages)
fixas na memória. Os dbas usam o verbo “pinar” pra isso…
“vamos pinar a procedure logon”.

Só imagino esse framework sendo usado com bases de dados
pequenas… esquemas de cluster,partição de tabelas,
flashback recovery nem pensar…

velo

Aff, presistência de objetos não é banco de dados, num tem tabela.

Eu também tenho um pé atrás sobre deixar dados na RAM, mas eu tenho os 2 pés atrás em ficar desmontando os objetos pra guardar no banco, e depois, precisando “remontar” para poder usar. Mesmo usando hibernate é isso, vc mata o objeto e depois dah um new denovo…

Eu acredito nos bancos de objetos, chau pra camada intermediaria, mas eh preciso evoluir.

VELO

Diogenes

Sim, mas haveriam objetos em uso tbém em memória!
É aih que estaria o ganho…

Talvez o fato de ser randômico abra muito mais possibilidade de carregar objetos úteis do que se eu tentasse definir regras de escolha para seleção dos objetos que ficarao carregados…

É esse o ponto!

kuchma

Diogenes:
Talvez o fato de ser randômico abra muito mais possibilidade de carregar objetos úteis do que se eu tentasse definir regras de escolha para seleção dos objetos que ficarao carregados…

É esse o ponto!

Se for pra fazer randomico, tente um algoritmo genetico. :mrgreen:

Marcio Kuchma

velo

Sei lah, ainda tem o risco de tudo que estiver na memoria seja inutil :frowning:

Concordo contigo, mais FACIL, mas, necessariamente num é melhor. Eu acho q o esquema é deixar mais transparente pro programador final…

Tipo, uma interface, com um boolean e um Date, mais nada.

O date a camada intermediaria* muda toda vez que o objeto for acessado.  O boolean vem pronto da aplicação.  Esse boolean vai ser um lock.  Alias, talvez um int.

0 - Fixo na RAM;

1 - Fixo no HD;

2 - Carrega na RAM ou descarrega de acordo com o uso.

VELO

  • alias, vocês acharam legal essa ideia de uma camada entre a aplicação e o local de armazenamento de objetos?
Diogenes

Bem que eu tentaria, mas matei essa aula no jardim de infância! :mrgreen:

velo

Interessante, serah que tem sabor framboeza ?!

Diogenes

Bem como tem o risco de tudo que vc tiver na memória ser útil naquele momento! :smiley:
Acho q tenho passado poucas horas de minha vida vendo jornal nacional! :lol:

velo

velo:

Tem algum jeito de eu iniciar o prevayler ou o Space4J simples assim?

public void inserir(Object o){ ObjectContainer db = Db4o.openFile("src/bancoObjetos/db4o/te.yap"); db.set(o); db.close();}

Eu não consigo iniciar ele simples assim, sou taum burro assim?

Tem como implementar simples assim?

VELO

cv1

Gente, se fosse tao facil desse jeito ja tinha vindo um treco desse na JDK desde a versao 1.2. Como voces vao saber quais objetos estao sendo usados e quais devem ser passivados? Como voces vao fazer queries? Como voces vao fazer replicacao? Como voces vao fazer a consistencia dos dados ser mantida aconteca o que acontecer?

velo

Facil naum eh, mas o JDBC eh facil? Naum existe o hibernate? Alias pq o hibernate naum vem desde o SDK 1.2?..

E eu ainda naum tive retorno, tem como usar o Space4J do jeito q eu falei, bem simples, em 3 linhas?

VELO

Rubem_Azenha

Diogenes:
velo:

Sei lah, ainda tem o risco de tudo que estiver na memoria seja inutil :frowning:

Bem como tem o risco de tudo que vc tiver na memória ser útil naquele momento! :smiley:
Acho q tenho passado poucas horas de minha vida vendo jornal nacional! :lol:

hum… isso ferra com a funcionalidade né?

acho que não da pra fazer as coisas na sorte…

velo

microfilo:

hum… isso ferra com a funcionalidade né?

acho que não da pra fazer as coisas na sorte…

Esse eh o ponto!

Pode ser que o randomico carregue os dados 100% aptos para a condição de trabalho atual.
Pode ser que o randomico carregue os dados 100% aptos para a condição de trabalho futura.
Mas, pode ser que o randomico carregue os dados 100% INUTEIS.

Mas eu vou me tornar repetitivo. Tem como carregar o Space4J de uma maneira bem simples como o db4o?

VELO

Rubem_Azenha

HelloWorld do Space4J

velo
microfilo:
HelloWorld do Space4J
Jah vi, mas se viu o tamanho?!

Tah, não é enorme, mas nem se compara, 3 linhas pra adicionar algo no db4o, no Space4J eh mais complexo, no prevayler, nossa, nem se compara.

o meu galho tá aqui:
public void addNumber(String user, String number) throws CommandException, 
                                                             LoggerException {
                                                             
        space4j.executeCommand(new MapPutCmd("phonenumbers", user, number));
    }
Eu queria fazer +- isso:
space4j.add(Object object);

Enfim, facilitar ao maximo o ADD...........

Toh tentando fazer isso (ontem eu tava hoje naum fiz), mas soh consegui exceptions.............

VELO

Rubem_Azenha

vc quer coisas realmente simples hein???

louds

Pegar objetos de uma área de armazenamento secundária * e trazer para memória principal é facil, até o cv consegue fazer isso. O problema, o ENORME problema, é como tirar da memoria ou saber quais objetos tirar/atualizar.

  • memória ram, disco, rede, ou tudo junto.

Pensando bem, se usar como tamanho mínimo de um objeto 4kb fica até fácil.

velo

Eu vou fazer um exemplo com 2 db4o, vou postar daih…

VELO

saoj
velo:
microfilo:
HelloWorld do Space4J
Jah vi, mas se viu o tamanho?!

Tah, não é enorme, mas nem se compara, 3 linhas pra adicionar algo no db4o, no Space4J eh mais complexo, no prevayler, nossa, nem se compara.

o meu galho tá aqui:
public void addNumber(String user, String number) throws CommandException, 
                                                             LoggerException {
                                                             
        space4j.executeCommand(new MapPutCmd("phonenumbers", user, number));
    }
Eu queria fazer +- isso:
space4j.add(Object object);

Enfim, facilitar ao maximo o ADD...........

Toh tentando fazer isso (ontem eu tava hoje naum fiz), mas soh consegui exceptions.............

VELO

Fala Velo !!! Me explica o que vc quer fazer e porque vc não achou a API do space4j simples. Talvez vc tenha razão e haja jeitos de melhorá-la.

Quando a linha space4j.add(Object obj) não funciona pois a premissa é vc fazer as alterações através de comandos, para que esses fiquem logados em disco.

Mas coloque aqui suas críticas ao space4j que com certeza deve haver coisas para melhorar. O que vc não entendeu ???

Tem como simplificar ainda mais a API do Space4J ??? Se tiver me fala que a gente faz na hora... :-)

saoj

Toda vez que eu converso com o Klaus ele me convence que Passivation é desnecessária, e que se o Prevayler/Space4J forem por esse caminho eles vão acabar virando um OODB.

Mas depois de um tempo, quando eu começo a ver que apesar de poucos, haverá casos em que vai faltar memória, eu começo a pensar na viabilidade da porcaria da passivação.

cv:
Como voces vao saber quais objetos estao sendo usados e quais devem ser passivados?

Todo o objeto passível de passivação é acessado via proxy e dentro desse proxy tem um lastAccessTime. De vez em quando um monitor corre o passivation map e passiva todos os objetos que estão sem acessos a X minutos.

Complicado isso realmente pois fazer um full sem índices percorrendo a lista inteira de objetos vai acabar trazendo todos os seus objetos de novo para a memória, a não ser que vc use úm índice, e índices nunca são passivados. Então em teoria as queries seriam feitas nos índices em memória e não no objeto que foi para o disco passivado.

Uma merda isso mesmo! Solução para evitar dores de cabeça: Cada máquina cuida da sua própria passivação isto é, um objeto passivado numa máquina pode não estar passivado em outra máquina, pois os acessos são diferentes, isto é, numa máquina ele pode ter sido acessado muitas vezes e em outra não.

E quando restartar o sistema, o que vale são os objetos passivados no MASTER, ou seja, a passivação dos slaves são ignoradas e vale a do master.

Não me lembro disso direito (faz quase um ano que eu não mexo no space4j) mas acho que o ato da passivação é uma alteração no space e fica logada no LOG. Isso é fundamental para garantir a consistência, ou seja, a passivação é um commando (writer) como qualquer outro, que remove um objeto do Space e mete ele no HD, deixando no lugar dele um proxy malandro.

Isso tudo aí em cima é bonito de se falar, mas quando vc vai implementar, dá um trabalho do cão e faz uma sujeira danada. Espero que um dia esse esforço se pague ou esse framework ficará perdido como um ELEFANTE no meio da simplicadide do Space4J.

Além disso, se vc não tomar cuidado, todos os seus objetos vãi ser passivados e vc vai acabar com um banco de dados de objetos serializados em disco. Nada performático como o CV falou!

cv1

Isso me parece mais uma receita de memory leak do que qualquer outra coisa. Como voce garante que todas as referencias ao objeto foram substituidas pelo “proxy malandro”?

louds

O maior problema de usar proxies é resolver o seguinte caso de uso:

class TodoProxyMeOdeia implements ModificationListener {
  public void fazX(IResource resource) {
     resource.truncate();
     resource.addContentModificationListener(this); // <-- KABOOM!!
  }
}
velo

Não axo a api do space4j complicada, em absoluto, achei muito mais facil de entender/usar do que o prevayler :stuck_out_tongue:

Mas eu axo que falta um caminho + simples.

As vezes o fulano só quer adicionar na memoria e pegar deSpois. Faltou uma maneira direta, digados, de adição.

Um codigo fala mais que mil palavras…

public void inserir(Object o){ ObjectContainer db = Db4o.openFile("src/bancoObjetos/db4o/te.yap"); db.set(o); db.close();}

Com o db4o dá pra fazer esse esquema, claro, não vou ficar abrindo e fechando o banco toda vez, mas é possivel adicionar qualquer coisa em 3 linhas, pra recuperar a info tbm precisa de poucas linhas.

Uma coisa, não é mais facil fazer a busca em arquivos XML?

<dados>
<nome>USERNAME=marvin</nome>
<data>2005-01-21 08:18:57.428 AM</data>
</dados>

Alias, o prevayler usa dados serializados, o Space4J faz como, se não me engano ele não me obriga a serializar… E porque não pode ser usado um XStream da vida, não fica mais facil de fazer query?

VELO

saoj

Talvez vc tenha razão e valha a pena colocar alguns métodos no space4j para encapsular comands CRUD (Create, Update, Delete). Vou pensar nisso…

Todos os objetos tem que ser serializados, se não não dá para tirar o snapshot. Da mesma maneira são todos os atributos de um comando, que vai ser serializado no log. (Não entendi a sua dúvida!)

saoj

Isso pode ser um problema mesmo, mas citando o Klaus:

Eu diria que programar com prevalência é como programar com threads. Se vc não prestar atenção no que está fazendo, vai acabar fazendo caca, independente das suas habilidades como programador.

Então para resolver esse problema, vc tem que lançar alguns postulados:

:arrow: Se vc for usar passiavation, vc vai colocar os seus objetos passíveis de passivação dentro do PassivationMap, e quando vc for pegar o seu objeto de dentro do PassivationMap, vc vai receber um PROXY e não o objeto em si, que pode estar dentro do proxy ou no disco.

:arrow: O seu programa só pode guardar referências ao Proxy e não referencias diretas ao objeto. Ele pode acessar o objeto que está dentro do proxy a qualquer momento, mas não pode criar uma hard reference para esse objeto, caso contrário a passivação não vai servir pra nada, pois o objeto não será coletado e continuará na memória, e pior ainda, ficará na memória e no disco criando uma inconsistência.

Prevalência tem um monte de outros postulados, e se o cara não conhecê-los, e caca na certa. Outro postulado importante:

:arrow: Vc não poderá, sob pena de morte, fazer alterações em seus objetos sem ser através de um Command.

Infelizmente nada impede um programador destraído ou maluco de sair alterando os objetos por fora de um comando.

Outro:

:arrow: Se vai fazer iteração numa lista, vc precisa de um safe iterator (Space4J) ou precisa enviar uma query (Prevayler) para não correr um risco de receber um ConcurrentModificationException.

Mas nada impede o cara de pegar uma lista e sair itinerando. :frowning:

Logo a conclusão é: Se for brincar com prevalência, conheça muito bem e aplique a toda hora os postulado, da mesma maneira que se vc for trabalhar com relatividade saiba que a velocidade da Luz terá que ser sempre constante no vácuo, independente da velocidade do observador. Se não é caca !!!

cv1

Eca. E esse monte de complicacao e regrinha decoreba era pra se livrar da dificuldade de mexer com bancos de dados? Hmm. Ah, tah, so pra saber.

jc_oz

É, prefiro continuar com banco de dados, muuuuito mais simples… :mrgreen:

marcelomartins

Isso, certa vez eu perguntei como fazer pra usar os mesmo objetos utilizados com o prevayler com outras linguagens.

Ai comecaram a me responder: "Tu cria uma camada e acessa com socket… "
sai antes de terminarem de responder.

saoj

marcelomartins:
Isso, certa vez eu perguntei como fazer pra usar os mesmo objetos utilizados com o prevayler com outras linguagens.

Não entendi o que vc queria fazer. Pode explicar melhor?

Eu não sou o Klaus, e não quero ser louco de defender com unhas e dentes a utilidade/viabilidade/performance/poder etc e tal do Prevayer/Space4J.

Eu apenas acho que prevalência é uma mudança de paradigma muito interessante, que te faz pensar nas coisas de maneira inversa ou louca. E isso sempre é bom para experiëncia/amadurecimento e outras coisas mais…

Isso é chato mesmo, principalmente para o cara que nunca viu prevalëncia e vai fazer o seu primeiro programa. Mas como fugir disso? Parece que o Hibernate foi o projeto mas bem sucedido nesse sentido, pois para fazer um bean do hibernate vc precisa fazer NADA.

Tá bom, vc precisa ter um construtor sem parametros, precisa preencher um arquivo XML (odeio preencher arquivo xml :cry: ), configurar o seu banco de dados, e colocar tudo pra rodar, mas pelo menos o código do seu bean fica praticamente virgem.

velo

marcelomartins:

Isso, certa vez eu perguntei como fazer pra usar os mesmo objetos utilizados com o prevayler com outras linguagens.

Ai comecaram a me responder: "Tu cria uma camada e acessa com socket… "
sai antes de terminarem de responder.

Mas eu tava querendo bem isso :smiley:

Pq um oracle o q eh, eh um socket q fika esperando SQL, fale o q falar, acaba sendo isso.

VELO

velo

Me diz uma coisa, objetos serializados com XML não são + faceis de fazer query e/ou montar visualizadores?

VELO

marcelomartins

velo:
Mas eu tava querendo bem isso :smiley:

Pq um oracle o q eh, eh um socket q fika esperando SQL, fale o q falar, acaba sendo isso.


Sim, a diferença é que no Oracle ou outros servidores de banco de dados é que já ta pronto, eu só preciso conectar e isso não vai influenciar no desenvolvimento do meu sistema. Vou me preocupar somente em resolver o meu problema.

Agora, se eu tiver que fazer isso então vou ter a impressão de estar voltando uns 30 anos (ou mais) no tempo.

Imagina uma empresa normal. Essa empresa tem sistemas em Java, VB, Foxpro e ZIM.

Como vou fazer os sistemas em VB, Foxpro e ZIM acessarem os dados que estão prevalecidos no Java?

Ou será que eu vou ter que ter minha base de clientes repetida nos varios sistemas? Ou será que eu vou ter que passar 6 meses criando um sistema pra integrar as linguagens? Será? Será? :lol:

Poiseh!

pcalcado

marcelomartins:

Imagina uma empresa normal. Essa empresa tem sistemas em Java, VB, Foxpro e ZIM.

Como vou fazer os sistemas em VB, Foxpro e ZIM acessarem os dados que estão prevalecidos no Java?

Ou será que eu vou ter que ter minha base de clientes repetida nos varios sistemas? Ou será que eu vou ter que passar 6 meses criando um sistema pra integrar as linguagens? Será? Será? :lol:

Poiseh!

Uhm…problemas. O Prevayler/Space4J não vai deixat você fazer isso, simplesmente porque não deveria.

Usar SGBD como middleware entre sistemas é uma péssima prática, que acaba em muitos problemas. Ok, isso é o que mais tem por ai, mas o que mais tem por ai eh programa em VB e nem por isso essa porcaria é boa :wink:

Seu sistema X não deveria consultar a tabela de clientes de um SGBD, alterá-la e coisarada, ele devia era consultar o subsistema/sistema de gerenciamento de clientes.

Um sistema prevalente ou com outro tipo de persistência pode muito bem transformar seus objetos em coisas flat como tabelas para passar numa consulta, a pergunta é: ele deveria fazer isso?

Resumo da ópera: [color=red][size=24]não[/size][/color] use SGBD como middleware. Vamos fazer mais uma campanha, desta vez com leões-marinhos…

[]s

cv1

Integracao atraves do banco de dados eh soh um dos jeitos de fazer duas aplicacoes conversarem. O ponto do shoes aqui eh que esse tem muitos contras, mas tambem alguns pros interessantes, que se forem realmente necessarios, devem ser aproveitados.

(licao de casa por hoje: http://www.eaipatterns.com :D)

marcelomartins

Hehe :smiley:

Shoes, concordo contigo 114%, mas tem uns detalhes.

Eu acho interessante levar nossa discução para o mundo real a nossa volta, e não ficar apenas imaginando o mundo perfeito. Ter um subsistema/sistema de gerenciamento de clientes é perfeito, mas eu particularmente nunca vi isso em lugar nenhum.

Agora pensando, em todas as empresas que conheci (de multinacional até o mercadinho), todas elas tinham vários sistemas e em todas elas em algum ponto o SGDB fazia o meio de campo (sem opção de mudar tudo). E é desse ponto e dessa minha experiência que eu coloco minha opinião.

E partindo desse principio que eu digo que na minha opinião, o conceito de prevalencia é muito restrito. Para mim serviria para o meu sistema de indexação de mp3, que é uma ilha e não esta inserido em um contexto maior.

Acho que enquanto as coisas forem assim, o não existe muito lugar pra prevalencia em grandes empresas, o Klaus querendo ou não. Essa é minha opinião.

PS.: Phoda é a galera postando num domingo com 35 graus la fora. O vicio :stuck_out_tongue:

pcalcado

Pois é, Marcelo, mas é como falei no post anterior. Você quer manter as cosias como estão ou buscar melhorar? Se for para ficar mais coerente com 99% dos lugares por aí, vamos falar de aplicativos em Delphi acessando Stored Procedures para sempre, ninguém evolui sem abandonar velhas práticas :wink:

Nem estou falando em prevalência exatamente, estou falando em usar um SGBD para a finaldiade do SGBD. Se você começar a colocar tabelas sendo acessadas por todo mundo, vai ter que garantir a integridade (uhm… stored procedures, triggers…essa bagaça toda) e vai elvar sua aplicação para dentro do SGBD, e isso é tema de vários outros tópicos.

[]s

rodrigousp


Pois é, Marcelo, mas é como falei no post anterior. Você quer manter as cosias como estão ou buscar melhorar? Se for para ficar mais coerente com 99% dos lugares por aí, vamos falar de aplicativos em Delphi acessando Stored Procedures para sempre, ninguém evolui sem abandonar velhas práticas

Radical!!! :twisted:

“Todo poder aos bolcheviques. Morte a bastilha. Liberdade (ainda que tarde)”.

Camaradas. O momento da luta não pode mais esperar. Vamos, companheiros!!! Peguemos nossas armas e lutemos contra os opressores tecnológicos, velhos gagas, matadores de foquinhas e violadores da justiça…

Mmmm … Tem alguma outra solução um pouco menos radical ? :wink:

rodrigousp

:oops: Mas, também estaria sendo radical se eu não contextualizar…

Acho que o negócio destas camadas de persistência é ter uma forma suave para fazer a transição dos SGBD atuais.

Por exemplo… “os bancos faziam o meio de campo…” Bom, então que objetos (gradualmente) façam o meio de campo. Já vi mais de um projeto cujo um dos princípios era tirar de foco o banco de dados como o grande centralizador dos sistemas. Começando ali uma historinha de objetos distribuidos e webservices… Este pessoal da OMG e da W3C, tem cada idéia né !? :roll: Onde já se viu criar um padrão para comunicação entre objetos distribuídos? Quem vai usar isto?

Enfim, pouco a pouco, tomando uma atitude simples, um novo paradigma é edificado.

ps: morte as foquinhas !!! :twisted:

Criado 4 de janeiro de 2005
Ultima resposta 24 de jan. de 2005
Respostas 59
Participantes 16