Lookup de EJB local no Weblogic 10.3

Alguém que trabalha com EJB no Oracle Weblogic Server 10.3 sabe como fazer um lookup de EJB local por nome JNDI?

Investiguei todos os lugares e não encontrei referências para tal.

Há casos que não vou usar injeção de dependência (@EJB), por isso preciso de um simples lookup de EJB local.

Tenho seguinte EJB:

@Local({My.class}) @Remote({MyRemote.class}) @Stateless(name="My",mappedName="My") public class MyBean implements My, MyRemote { public void foo() { //do something } }

Para lookup do EJB remoto:

Para o EJB local eu não consegui com nenhum tipo de nome JNDI imaginável.

Dicas???

Achei algo: http://m-button.blogspot.com/2008/07/reminder-on-how-to-use-ejb3-with.html

Vamos ver se resolve!

A solução é tosca demais. Dá vontade de regurgitar.
E dizem por ai que Weblogic é o melhor app server.

[quote=danieldestro]A solução é tosca demais. Dá vontade de regurgitar.
E dizem por ai que Weblogic é o melhor app server.
[/quote]
Qual era a solução afinal? :?:

Esta: http://m-button.blogspot.com/2008/07/reminder-on-how-to-use-ejb3-with.html
Mas é tosca!

WebLogic é um lixo cara…
O compilador de ejbs deles não consegue trabalhar direito com generics, tipo vc nao pode sobreescrever um metodo numa subclasse que é um ejb e tenha generics, se nao da um pau de compilação kkkkkk
ou seja: pode esquecer Generic DAO

Na empresa que trabalho temos que usar WL porque é feito pela Oracle agora kkkkk

aquele link ai de cima foi o que usei pra achar os ejbs de dentro do WAR,
mas tem uma coisa que nunca consegui fazer ( e acho que nao vou): como fazer lookup local apartir de um InitialContext?
Tipo no jboss vc faz

new Initialcontext();
ctx.lookup(LOCAL_JNDI_NAME);

O problema é que no weblogic eu nao encontro em lugar nenhum o padrão da string de lookup LOCAL ( a de lookup remote é aquela que tem um #)
alguem sabe como faz isso?
valeu

Seguindo o link, você criou um Servlet para cada EJB que você precisa fazer lookup no WAR?

Sobre lookup de Ejb local. Eu abri chamado na Oracle e nem eles sabem como resolver isto.

entao PODEMOS FICAR TRANQUILOS né Daniel?

Se a DONA do java não sabe como fazer isso…

aheauiahieauhiauehaiue

quem somos nós pra saber?

é pákabá!

nao percebi que era uma pergunta sory :slight_smile:

nao criei um servlet pra cada EJB, mas toda vez q eu preciso de um EJB eu faço lookup assim:

// em algum backing bean do jsf
private ContratoDAO contratoService = (ContratoDAO) getEJB(ContratoDAO.JNDI_NAME);




//dentro do meu metodo de lookup
private static final String ROOT_LOCAL_ENV_JNDI = "java:comp/env/ejb/";

                try {
			return ctx.lookup(ROOT_LOCAL_ENV_JNDI + jndiName);
		} catch (NamingException e) {
			throw new RuntimeException(e);
		}

e o jndiName eu sempre coloco o valor que vc coloca no @stateless(name=JNDI_NAME) assim:


@Stateless(name = "ContratoDAO", mappedName = "ejb/ContratoDAO")
@Local( { ContratoDAO.class })
public class ContratoDAOImpl extends GenericDAOImpl<Contrato, Long> implements ContratoDAO {}

meu web.xml

<ejb-local-ref>
		<ejb-ref-name>ejb/ContratoDAO </ejb-ref-name>
		<ejb-ref-type>Session</ejb-ref-type>
		<local>pt.coface.billy.ejb.business. ContratoDAO </local>
	</ejb-local-ref>

valeu

Então você consegue fazer lookup de ejb local pelo JNDI, só precisa fazer o registro no web.xml, certo?

o que eu consigo:
de algum lugar dentro do war (servlet, jsf) lookup no ejb por jndi, mas cada ejb tem q ter aqela tag no web.xml (ejn-ref)

o que eu nao consigo:
dentro de um ejb (OU qualquer coisa que rode no fora do WAR) fazer lookup em outro ejb atraves de jndi ( neste caso o unico jeito eh usar @EJB nas referencias as interfaces locais;

algo assim:

class PaiEJBDAO{
@ejb
private OutroEJBLOCALINTErface outroejb;
}

valeu

A não ser que seja lookup pela interface remota, certo?

ejb = (MeuEjb) ctx.lookup(“MeuEjb#meu.pacote.MeuEjbRemote”);

eu nunca tentei, talvez ateh de

mas tipo isso seria que nem comer pao com fanta em restaurante de luxo, (em casa tem igualzinho e é bem mais barato)
eu me recuso a fazer um lookup remoto em ejbs do mesmo jar. credo!

Sim, claro.
Por isso insisto em Lookup de EJB local. Mas o Weblogic 10.3 não faz transparentemente. Imperdoável.

Destro vc ta sendo obrigado a usar weblogic né? eu acho que essa é a única explicação pra alguem usar isso.
cara tenta convencer quem tá te a te obrigar pra mudar pro jboss o quanto antes bicho
quando chegar a JCDI (WebBeans) vai ser um inferno pra rodar no weblogic ( se rodar!)
eu nao consigo fazer nenhum exemplo do seam rodar no weblogic, NENHUM!

Bom dia Daniel
Desculpe reabrir este tópico, mas estou com um problema semelhante a este que você teve.
Tenho uma pequena aplicação de teste que funciona perfeitamente no JBOss porém, quando publico no weblogic 11 não consigo fazer o look up. Lí o link que você postou, configurei os properties de initial context e url conforme o blog e também tomei cuidado no nome da minha interface remota.
Há alguma configuração para realizar no servidor para o look up poder funcionar? Quando vejo no servidor, tenho a informação que o ejb está ok porém, não consigo visualizar os nomes dos ejb’s.

Obrigado

Os nomes de lookup dos EJBs muda a cada application server. É ridículo ter uma especificação JEE e deixar os nomes a gosto de quem fez o app server. Enfim.

Em geral, no JBoss, o lookup é “nome-do-jar-ou-ear/nome-do-ejb”.

[quote=Icecold]Bom dia Daniel
Desculpe reabrir este tópico, mas estou com um problema semelhante a este que você teve.
Tenho uma pequena aplicação de teste que funciona perfeitamente no JBOss porém, quando publico no weblogic 11 não consigo fazer o look up. Lí o link que você postou, configurei os properties de initial context e url conforme o blog e também tomei cuidado no nome da minha interface remota.
Há alguma configuração para realizar no servidor para o look up poder funcionar? Quando vejo no servidor, tenho a informação que o ejb está ok porém, não consigo visualizar os nomes dos ejb’s.

Obrigado[/quote]
No WLS 10.3, escolhe o server onde foi feito o deploy e clica no JNDI Tree, conforme a imagem.


[quote=danieldestro]Os nomes de lookup dos EJBs muda a cada application server. É ridículo ter uma especificação JEE e deixar os nomes a gosto de quem fez o app server. Enfim.

Em geral, no JBoss, o lookup é “nome-do-jar-ou-ear/nome-do-ejb”.[/quote]
Daniel,

Vc já fez algum projeto em que um EJB (3.X) dentro do EAR x1 conversava com um EJB (3.X) dentro de um EAR x2 estando eles em servers diferentes?

Nunca, graças a Deus… rsrs…
No OC4J eu fiz assim, gerava os pacotes JAR dos meus EJBs, configurava no XML do oc4j (não usava o esquema de bibliotecas do Enterprise Manager dele não) e ai chamava os EJBs entre sim.