CMP e BMP

Boas,

Já à algum tempo que não participava aqui no forum, embora tenha vindo ao site de vez em quando ler as noticias e artigos novos.
Preciso da vossa ajuda… alguem me consegue explicar claramente a diferença entre CMPs e BMPs (EJBs) ?
Um link para uma pagina onde explique isto será suficiente…

Obrigado :slight_smile:

Exemplificando da maneira que um programador em white space faria, mas acho que será o suficiente para entender.

Consideremos a classe Pessoa, que tem getNome e setNome

BMP:

setNome( String nome )
{
    String sql = "UPDATE tabelaPessoa ..."
    ... transação, datasource, conexão
    Statement.execute( sql );
}

getNome()
{
    String sql = "SELECT FROM tabelaPessoa ... WHERE ..."
    ResultSet  = Statement.executeQuery( sql );
    ... transação, datasource, conexão, manipular ResultSet

    return nome;
}

É claro que não é só isso. Utilizando BMP há o controle sobre ciclos de vida de um montão de coisas bacanas e tudo mais. Porém, em suma, quem vai fazer todo o trabalho sujo (pools, transações, sql etc) é você.

CMP:

setNome( String nome )
{
    this.nome = nome;
}

getNome()
{
    return nome;
}

Cadê o sql??? Bem guardadinho num arquivo xml de 40 milhões de linhas. Dá trabalho para escrever, mas depois é só alegria. Ou seja, o CONTAINER vai ser responsável por todo o trabalho sujo do sql, transações, pools etc.
Maravilha então? Ah … nem tanto. Tem umas limitações beeem complicadinhas :expressionless: Prefiro Hibernate :smiley:

no caso dos CMPs quando eu faço um setXXXX ele actualiza logo o campo na base de dados?

Depois de escrever o xml de 40 milhões de linhas? Sim.

Mas nem sou a pessoa mais indicada para falar de ejbs, ainda mais de CMP, pois só li o livro. Depois de ver as limitações dele desencanei rapidinho. “Sem order by não dá.”

O Paulo manja bastante bem de EJBs, talvez ele possa te guiar melhor nas vantagens e desvantagens.

Um amigo meu tinha me dito que o pessoal do GUJ não era grande fan de EJBs… parece que ele tinha razão :stuck_out_tongue:

Já agora LIPE… diz-me uma coisa… esse XML de 40 milhões de linhas incluiu os SQLs da aplicação certo? ou seja… em vez de ficar no código, fica no XML… qualquer SQL vale ?

PS: Na realidade não estamos a falar de SQL mas sim de EJB QL certo?