Selamlar,
Ejb ile kurumsal bir proje geliştiriyoruz. Jpa de @OneToMany ilişkilerde karşılaştığımız sorunlar var. Sizinde fikirlerinizi almak istiyorum. Mimaride EJB ile Clint aynı pakette (EAR) olmasına rağmen Remote Interface şablonu tasarlanmış. Yani EJB lere remote interface üzerinden erişiliyor. Bunun bizim proje için çok doğru bir şablon olmadığını az çok biliyorum. Ve karşılaştığım sorunlarda bu şablonun etkisininde olduğunu düşünüyorum.
- Jpa version : 2.1
- ORM : EclipseLink 2.5
- Application Server : WebLogic 12
Örnek olarak Policy entitysinde
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY, mappedBy = "policy", orphanRemoval = true)
private List<Indendity> indendityList;
Şu şekilde bir ilişki tutuluyor. İlişkiden de göreceğiniz üzere FetchType.LAZY.
Remote Interface :
Policy objesini id ile sorguladığım zaman debugda indendityList paketini Inspect ettiğimde "indirectlist not instantiated " olarak görüyorum.
Bunun çözümü olarak 2-3 senaryo var.
örneğin Servisten dönmeden önce indendityList.size() method ile yada JPQL de indendityList i JOIN FETCH ederek listeyi alabiliyorum.
Yukarıdaki çözümleri kullanmadan client tarafında listeyi almam mümkün olmuyor. Her ilişkide .size() foksiyonun çağırılmasının çok doğru olmadığını düşünüyorum.
Servisten dönen objenin ilişkilerinin (örn : indendityList in) get metodunu çağırdığımda o an ilgili ilişkinin yüklenmesi gerekmez mi ? Yoksa FetchType.LAZY olarak tutulan her bir ilişki için ayrı ayrı servis yazılıp öylemi çekilmesi gerekir.
Locale Interface :
Diğer bir senaryoda ilişki şu şekilde tepki veriyor.
Remote EJB leri weblogic-ejb-jar.xml de ilgili servisi
<weblogic-enterprise-bean>
<ejb-name>policyService</ejb-name>
<enable-call-by-reference>True</enable-call-by-reference>
</weblogic-enterprise-bean>
Locale çektiğimde servisten dönen Policy objesinin ilişkileri "indirectlist not instantiated " olarak dönüyor fakat ilişkileri get Metod ları ile çağırdığımda bu sefer ilişkiler yükleniyor.
Bu durum esasında normal çalışması gerektiği gibi çalışıyor.
Fakat remote tasarımı üzerinden verileri çektiğimde "indirectlist not instantiated" senaryosunu nasıl aşabilirim. Bu konuda düşüncelerinizi paylaşmanızı rica ediyorum.