Remote client + ejb3 + jpa + weblogic

3 respostas
vitenho

Alguém usa weblogic 10 e já tentou acessar um ejb3 que retorna entities jpa através de um teste junit no eclipse?
há!
Se voce procurar no site da bea nao existe exemplo nem tutorial de como fazer isso, no maximo o client chama um metodo hello() no ejb. (poiseh vc tem que pagar 35 mil euros por ano pra aprender a fazer hello world no ejb)

Eu acho que os caras da bea quando fizeram o wls 10 pensaram: esses programadores java tem que sofrer mais pra fazer um ejb3, ficou muito facil com as annotations e coisarada, vamos complicar a vida deles, YES! vamos…

1 - wls 10 nao aguenta Generics nos metodos da interface remota
2 - wls 10 nao aguenta sobreescrever metodos em subclasses ( lembra do generic dao e o getPersistenceClass?)
3 - wls 10 nao aguenta reflection de generics
4 - wls 10 nao aguenta lookup de ejb local interfaces atravez de jndi!!! como isso eh possivel???
5 - nos forums os proprios empregados da bea dizem q existem esses bugs e q vao ser corrigidos, infelizmente soh dizem.

só com essas 5 já dava pra descartar esse lixo de ser um servidor jee5 certificado.

Como é possivel que todos os servers OPENSOURCE possuam tais coisas basicas e os caras que tem grana até pra limpar a bunda nao conseguem fazer?

O problema eh q as empresas pensam que o maldito suporte da oracle vai salvar elas qndo as coisas tiverem explodindo. Não caia nessa mentira, se você encontrar um bug q eles tem q resolver, vai esperar 6 meses pelo patch ou vai atraz do workaround pelo google? eh logico que vai no google.
Até hj eu nao sei pra que servem esses suportes pagos, se as coisas nunca sao resolvidas em tempo. Com jboss ou glassfish os bugs sao muito menores pq existe muita gente usando e a margem para bugs stopping é muito pequena. se é q existe e quando existe tem workaround.

E aquela historia de que weblogic eh muito mais rapido eh bullshit. Em 2007 ja aviam benchmarks que o glassfish era O MAIS rapido.

Ok agora que vc ja sabe que nao deve usar weblogic mas eh obrigado, pq quem manda nessas decisoes nao eh vc, aqui vai como fazer o q titulo do topico fala:

1 - crie no eclipse um projeto ear e outro ejb.

2 - crie um ejb e a interface, e uma entity jpa pro retorno do metodo

note que nao existe nenhum uso de generics aqui, pq senao o client nao consegue chamar

@Remote
class MyBeanRemote{
    public MyEntity get(Long id);

// alguem entende esse pattern? pelamor, ah e nao use reflection aqui, tbm dah pau
    public static final String JNDI = "MyBeanImpl #seu.pactoe.MyBeanRemote ";
    
}

@STAteless
class MyBeanImpl implements   MyBeanRemote{
    public MyEntity get(Long id){
           return em.find(MyEntity.class, id);
   }
}

class MyEntity implemts serializable {

  @id
   long id;

   @enumerated
   Sexo sexo;
 
   @MAnyTomany(lazy)
   List<MyEntity> friends;
}

enum  Sexo{ M , F}

agora a parte remote client:

1 - crie um projeto java normal
2 - crie esse client

public class EJB3WLSBoot {
	Context ctx;

	public EJB3WLSBoot() {
		Properties h = new Properties();
		h.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
		h.put(Context.PROVIDER_URL, "t3://localhost:7001");
		try {
			ctx = new InitialContext(h);
		} catch (NamingException e) {
			throw new RuntimeException(e);
		}
	}
        
         void test(){
            ejb= (MyBeanRemote) ctx.lookup(MyBeanRemote.JNDI);       
            ejb. get(1L);
        }
     }

ateh agora parece tudo facil e simples o problema eh qndo vc tenta rodar o client e perder quase 3 dias lutando contra as exceptions:

no projeto client:
1 - adicione o jar do weblogic.jar - sim aquele de 50 mbs! e nao coloque o weblogc-client.jar pq nao funciona
( esse é o mais legal, se vc quiser usar um client swing pro ejb no minimo seu jar vai pesar 50 mbs! cooool

2 - esse aqui nao eh relacionado com wls, mas sim a jpa, (isso acontece em qualquer provedor toplink, hiber, openjpa): adicione todos os jars necessarios pelo jpa provider no classpath do projeto client, pq senao as relacoes lazy vao lançar classnotfound durante a deserializacao

3 - nao coloque aqela lib chamada WEBLOGIC SYSTEM LIBRARIES no classpaht do client, ela faz com q o weblogic.jar de pau.

se vc tiver sorte acho q vai conseguir chamar o ejb e retornar entities agora.

foi mal ai pelo portugues, mas nao vale a pena arrumar pra falar dessa porcaria de wls

valeu

3 Respostas

Alexandre_Saudate

Cara, assim…

Já trabalhei com:

-> JBoss
-> OAS (OC4J)
-> Websphere
-> Weblogic

E, até agora, em nível de funcionalidades, e tudo mais, tá dando Weblogic DISPARADO no meu conceito.

[]´s

vitenho

como vc faz pra usar Generics em retorno de metodos em interfaces remotas?

Alexandre_Saudate

Uso herança… (não tem jeito, mesmo. Mas, de um ponto de vista de infra-estrutura, e tudo mais, continuo com Weblogic).

Criado 15 de janeiro de 2010
Ultima resposta 15 de jan. de 2010
Respostas 3
Participantes 2