2010-03-01 29 views
6

Weblogic 10.3'te, bir EAR'den uzaktaki bir EJB'yi, aynı kapsayıcıya yerleştirilmiş olan EAR'lerin diğerinin Vatansız bir fasulyesine nasıl enjekte edebilirim? İdeal olarak ek açıklamalarla mümkün olduğunca çok şey yapmak isterim. Aşağıdaki EJB tarafından uygulananEAR'daki bir uzaktan EJB'yi diğerinden nasıl ararım?

public interface HelloService { 
    public String hello(); 
} 

:

@Stateless 
@Remote 
public class HelloServiceBean implements HelloService { 
    public String hello() { 
     return "hello"; 
    } 
} 

onlar paketlenir ve server.ear konuşlanmış varsayın

Yani şu arayüze olduğunu varsayalım. Şimdi client.ear yılında, şu var:

Ben Weblogic client.ear içinde HelloClientBean ve server.ear yılında HelloServiceBean arasında doğru kablolama anlamadan böylece eklemem gerekir mi ne
@Stateless 
public class HelloClientBean { 
    @EJB 
    HelloService helloService; 

// other methods... 
} 

? Resmi belgelere ve/veya kitaplara işaretçiler sıcak karşılanır.

+0

Utanmaz yumru. Şimdiye kadar anladığım kadarıyla, Weblogic, @Stateless (mappedName = "foo") ile JNDI'da "foo # fully.qualified.interface.name" şeklinde açıklanmış bir vatansız fasulye bağlayacaktır. Ancak HelloClientBean'da "helloService" alanımı nasıl ekleyebilirim? – lindelof

cevap

4

Şimdiye kadar bulduğum en kolay çözüm şudur:

İlk olarak bir mappedName özelliği olan vatansız fasulye açıklama:

@Stateless(mappedName="HelloService") 
@Remote 
public class HelloServiceBean implements HelloService { 
    public String hello() { 
     return "hello"; 
    } 
} 

http://forums.oracle.com/forums/thread.jspa?threadID=800314&tstart=1 göre, Weblogic bir EJB için Jndi girişi oluşturmak asla bir Jndi adı mappedName niteliği olarak verilen (ya da sürece dağıtım tanımlayıcısı veya tescilli bir açıklamada).

Sonraki, artık sunucu fasulyesi üzerine niteliği olarak aynı olmalıdır bir mappedName özniteliği ile @EJB ile müşteri alanını açıklama ekleyebilirsiniz. (Dürüst olmak gerekirse bu şaşırmış tarafından NameNotFoundException when calling a EJB in Weblogic 10.3 Ben mappedName#interfaceName sözdizimi kullanmak mümkün olmalıdır, ama benim testlerde bu işe yaramazsa düşündürmektedir..):

@Stateless 
public class HelloClientBean { 
    @EJB(mappedName="HelloService") 
    HelloService helloService; 

// other methods... 
} 

Bu şimdi sürece her iki kulakta olduğu gibi, işleri Aynı kapta dağıtıldı. Daha sonra, farklı makinelere yerleştirildiklerinde doğru sözdizimini anlamaya çalışacağım.

+0

Adlandırmanın kullanılması yararlıdır ve iyi çalışıyor ancak özelleştirme için uygun değil. Herhangi bir yapılandırma değişikliği kodunuzu etkileyecektir. CDJ yoluyla başlangıçta EJB jar xml yapılandırması veya bazı yapılandırma enjeksiyonu/proksifikasyonu aynı şeyi yapar, aynı zamanda bunu parametreleştirmenizi, bakım ve dağıtım kapasitesini artırmanızı sağlar. – kij

+0

Haritalanmış isimleri kullanan EJB'ler taşınabilir olmayabilir. –

İlgili konular