Inheritance

Class Diagram Inheritance

Öncelikle bu yazı sizlere geniş ve akademik bir biçimde  Inheritance kavramını öğretmek amacı gütmemektedir.  Önemli ve ayrıntı sayılabilecek veya alışageldiğimiz Inheritance kavramlarının temelindeki mantığı size sunmayı ummaktadır. Inheritance ileilgili geniş bilgiyi bulabileceğiniz Türkçe kaynağa bu link ile erişebilirsiniz.

Inheritance object oriented programalamada kullanılan bir prensiptir. Türkçeye  türeme olarak çevirilebilir.  Inheritance objelerdeki IS-A bağıntısını kurmak için kullanılır. Örneğin  yukarıdaki resimdeki gibi CAT IS A PET. veya  CAR IS A VEHICLE gibi.   Bu örnekler şunu gösteriyor ki,  bir otomobil bir aracın tüm özelliklerini göstermeli ve ayrıca kendine ait başka özellikler de barındırabilir. Birde HAS-A bağıntısı vardır. Bu bağıntılar ise COMPOSITION prensibini belirtir.

Programlamada da objeler ile çalışırken de aynı prensipten yararlanırız. Örneğin bir otomasyon programımız olsun ve bu otomasyon programında 2 adet nesne kullanıyor olalım: ÖĞRENCİ ve İŞÇİ.

Bu iki nesnenin adı,soyadı gibi özellikleri ortaktır. Ama öğrencinin not ortalaması ile işçinin maaşı ortak özellikleri değildir. Bu yüzden class yapımızı oluşturuken bu ortak özellikleri içeren bir nesne bulabiliriz. Düşündüğümüzde şunu söyleyebiliriz: öğrenci ve işçi birer insandır. o halde bu nesnelerin ortak özelliklerini ortak bir nesnede oluşturabilirim.

İNSAN—-> ÖĞRENCİ,   İNSAN—->İŞÇİ.

Öğrenci ve İşçi insan nesnesinden türeyebilir. Her insanın adı soyadı bilgileri vardır. İşte bu oluşturduğumuz mantığa inheritance diyebiliriz.

Bu mantık girişinden sonra inheritance’ın bazı özelliklerini yazalım.  Detaylı bilgileri internetten kolayca bulabilirsiniz.

Türemede Genel Özellikler:

Türemede Tip kullanımı:

    Student s=new Student("Özgür","KOÇ");
    Person p=s;
    println(p.getAdSoyad());  // SONUÇ: Özgür KOÇ.

Yukarıdaki satırlar şunu gösterir: Base classtan türeyen classlara ait objeler base class tipindeki referanslar aracılığı ile erişilebilir.  Çünkü Student classı Person classından türemiştir. Ve “s” nesnesi aslında p nesnesinin tüm özelliklerini içerir.  Ama eğer P classın gerNotOrtalaması metodu yok ise s nesnesi içindeki not ortalaması bilgisini alamayız.

POLYMORPHISM:

Polymorphism kavramı temelde şudur. Referansın alacağı tipin run time’da belli olmasıdır. Yani dinamik bir olaydır. Öreğin:

    Student s1=new Student("Özgür","KOÇ");
    Employee e1=new Employee("Yaşar","USTA");
    Person p=null;
    if(today.equals("PAZARTESI")){
        p=s1;
    } else{
       p=e1;
    }
    println(p.getAdSoyad());  // Eğer bugun pazartesi ise SONUÇ: Özgür KOÇ. değilse Yaşar Usta

Görüldüğü üzere,  Person tipindeki referansın hangi tipte bir nesneyi refere edeceği run-time’da belli olmuştur. Eğer bugun pazartesi ise p bir öğrenci tipindeki nesneyi gösterecektir. Buna polymorphism denir.

 

Java Tips & Tricks

java

Welcome to Java world !

1- Java’da String diğer dillerdeki gibi primitive type değildir. Bildiğin reference type’dır.

2- Unary operators: Prefix increment, Postfix increment.

a++ ile ++b arasındaki fark nedi

int a=10;
int b=20; olsun.
int c=a++ + ++b dersek,
OUTPUT:

a=11, b=21, c=31 olur.

Peki a=11, b=21 ise neden c=32 olmadı? Çünkü a++ dediğimizde a’yı 10 olarak aldı,sonradan 1 ekledi.yani a burada 10 olarak alındı. ++b dediğimizde önce 1 artırdı sonra b değerini aldı. yani b burda 21 olarak alındı.

3-  Reference Types: Java’da 8 primitive type vardır ve geri kalan herşey reference type’dır. reference type nedir peki? örnek olarak:

Button myRefType=new Button();

yukarıdaki cümlede, myRefType adında bir değiken tanımlanıyor. Bu değişken Button tipinde bir objenin adresini tutuyor. Yeni button yaratıldığında bu yeni obje memory’de bir yerlerde durur. myRefType ise, işte bu memorry’nin adresini tutar. Yani myRefType objenin kendisini tutmaz. Eğer new Button() denmeseydi, myRefType hiçbir objeye referans etmeyeceğinden null olurdu.

4-Overload: C++ ‘ın aksine Java’da Reference types’lar arithmetic overload edilmezler. Sadece String tipi + gibi overload edilmiş metodları vardır. Reference type’lar için sadece =, ==, != operatorları kullanılabilir.

5-Garbage Collection: Farzedelim ki, bir obje yaratıldı ve bu obje bir reference ile point edildi. daha sonra bu referans başka bir objeyi point edilmesi istendi. peki ilk başta üretilen obje ne olacak? artık onun yernin kimse bilmiyor? ve bu obje artık ulaşılamaz. bu yüzden memoryde kalıp boşyere yer kaplayacak. işte bu durumda JVM bu tür ulaşılamaz objeleri bulur ve otomatik yok ederi. buna garbage collection denir.

6-Object passing to methods: Bir metoda reference türünde bir parametre yollarsanız, ve o method içinde bu referans tipindeki obje üzerinde işlem yaparsanız, bu orjinal objeyi direk etkiler. Neden ? Çünkü java’da objeler call-by-reference ile methodlara gönderilir.

Örnek:

{….

        ClassA newA=new ClassA();

	newA.deger=10;

	Change(a);

}

	public static void Change(ClassA aX){

		aX.deger=15;

		aX=null;

	}

Şimdi burada, orjinalobje newA, Change metoduna gönderilmiş, ve bu metod içinde deger özelliği 15 olarak set edilmiş. ama orjinal objede 10 olarak set edildiğini görüyoruz. Peki chagen metodu çağırıldıktan sonra orjinal objenin deger özelliği sizce kaç olacaktır? cevap: 15.  çünkü call-by-referece ile metod içine objenin özelliği değişmiştir.

7- Java’da String tipi immutable’dır . Yani bir kez set edildikten sonra değeri değişmez. Stringleri concate ederken append özelliği kullanlmalıdır. Çünkü + ile concate etmek çok yer kaplar.

A=11
B=21
C=31
Java Teknolojileri kategorisinde yayınlandı. Etiketler: , , . » yorum bırak;

Sharepoint 2007 Problemleri

Microsoft Sharepoint 2007 bir büyüğün dediği gibi “immature” bir yazılımdır. Sharepoint ile yazılım geliştirmelerimizde akla hayale sığmayan hatalarla karşılaştık ve gördükki, microsoft bu şekilde dizayn etmiş yazılımı. Ne mi bu hatalar? hemen en önemli hataları listeliyeyim.

 

1. İş akışlarında sonsuz döngü (Infinite Loop in Workflows)

Bir döküman listesi için iş akışı oluşturdunuz ve döküman eklendiğinde ve değiştirildiğinde iş akışının çalışmasını istediniz. Bunun için de out-of-box, yani ürün ile beraber gelen iş akışını kullandınız. Ayrıca, haklı olarak içerik onayı özelliğini de aktfi ettiniz, yani eğer bir döküman admin tarafından onaylanmamışsa, publish edilmesin istiyorsunuz.

adım adım neler olduğunu görelim:

a. Döküman yüklendi, ve iş akışı başladı. 

İçerik onayı: Beklemede.

İş akışı: Sürüyor.

 

b. Admin dökümanı gördü ve onayladı.

İçerik onayı: Onaylandı.

İş akışı: Tamalandı.

 

c. Öğe değiştiğinde iş akışını başlat seçeceğini işaretlediğinizden iş akışı tekrar başladı.

 

İçerik onayı: Beklemede.

İş akışı: Sürüyor.

….

ve yukarıdaki durum A noktasına geri dönüp sonsuza dek sürer. Çünkü Öğe onaylandığında, öğe değiştiği için iş akışı tekrar başlar. Ve iş akışı hiç bitmez. 

Peki öğe neden değişiyor?

Öğeye ait olan İçerik Onayı sütunu, iş akışı tamalandığın değiştiğinde, Sharepoint bunu belgenin değiştiği olarak algılıyor. 

Peki bu sorununu çözümü yok mu? Cevap : Elbette var.

İlk önce out-of-box iş akışı kullanmaktan vazgeçin. Sharepoint Designer kullanın. 

Veya daha sağlam ama uzun yol olan Workflow Foundation kullanın ve Visual Studio ile iş akışı geliştirin.

Service Pack 2′de düzeltileceği söyleniyor Microsoft tarafında ama bakıp göreceğiz.

2. Yeni Klasör’de iş akışı başlamıyor.

Diyelim, bir döküman kütüphanesinde hem içerik onayı kullanıyorsunuz hem de onay iş akışı. Bir belge yüklendiğinde, iş akışının çalıştırılmasını istiyorsunuz.

Fakat, eğer bu kütüphanede bir klasör yaratırsanız ne olacak ? Klasör bir öğe olarak algılanmadığı için iş akışı başlamayacak. Fakat, içerik onayı isteyecek. Haydaa, oldu mu şimdi?

Madem yeni klasörü öğe olarak algılamıyorsun neden içerik onayı istiyorsun?  Yönetici ne yapacak peki? tüm listelere girip acaba onaylanmayan klasör var mı diye araştıracak ?

İşte bu notkada yine iş başa düşüyor ve yeni bir EventHandler yazmanız gerekiyor. Bu eventHandler’i custom content type olarak yarattığını Yeni Klasöre attach edeceksiniz ve klasör oluşturlduğunda iş akışını başlatmış oalcaksınız. Bu eventhandler’i da Visual Studio ile geliştirmek zorundasınız. Ama burda yapılmışı var : CodeProject sağolsun :)

 

3.Web Part düzeyinde izinler.

Örneğin sharepoint ile oluşturduğunuz siteninizde, birden çok webpart kullanılıyor.  Bu webpartlardan biri yüklenirken bir yerden (DB, file,  SPList’ten öğe) bir veri okuması gerekiyor.

Fakat bu noktada,  bu webpart için bir kullanıcının bu veriyi okuma yetkisi olmasın. İşte burada tam veriyi okuma esnasında erişim reddedildi hatası alıyor ve tüm site bu hataya yönleniyor.

Exception handling’te yapılamıyor burada.

Biz ne beklerdik?

Eğer bu webpart’ta erişim sorunu var ise, sadece bu webpart bir hata mesajı ile gelsin. Tüm sitenin kapanmasına gerek yok.

Ayrıca,  sharepointte izinler liste ve site düzeyinde verilebiliyor. Peki ya webpart düzeyinde?

benim iki webpartım var ve birincisi için A grubuna EDİT izni veririken,  diğer webpart için A grubuna yalnızca görüntüle hakkı vermek istiyor olabilirim ,ve bu çok mantıklı bir istektir.

Malesef, Sharepoint’te web-part düzeyinde izin bulunmamaktadır.

 

 

——

aklıma geldikçe bu tür problemlerden bahsedeceğim. takip edin…

Anket

Diğer Yazılar kategorisinde yayınlandı. Etiketler: , , , , . » yorum bırak;

WF Yazıları | Developing Custom Activities

WF yazılarımıza devam ediyoruz. Bu yazıda , windows workflow foundation’da nasıl özgün aktivite

(custom activity) oluşturulur ?, unit test’i nasıl yapılır ? ve nasıl validation ayarlamaları yapılır? gibi konulardan bahsedeceğiz.

Öncelikle; neden bir custom aktiviteye ihtiyacımız oluyor, bundan bahsetmek gerekir. 

Neden Custom Activity

Custom activity aslında CodeActivity’e benzeyen kod blokları içerir. İçinde kendi business logic’i kendi değişkenlerini barındırır. CodeActivity ise workflow’un değişkenlerini kullanır.

Ayrıca, CustomActivity’i bir component gibi düşünebiliriz, dış dünyadan bağımsız, sadece kendi değişkenlerini kullanarak kendi işlemleri yerine getirir. Bir custom activity’i istediğimiz workflowlarda, business logic’i ile beraber kullanabiliriz.

Örneğin; öyle bir custom activity tasarladık ki, bu aktivitenin görevi kullanıcının hesap numarasını getirmek olsun. İşte bu custom aktiviteyi  hesap numarası getirme işlemine ihtiyacımız durumlarda workflowda kullanabiliriz.

Diğer avantajları ise, kendi başına test edilebilir ve  toolbox’a koyarak drag-drop işlemi ile workflow’a entegre edelebilir.

Elbetteki bazı dezavantajları da var: Normalde custom activity,  CodeActivity re-usable olmadığından kullanılır. Ama siz öyle bir işlem yapmak istersiniz ki, bir daha aynı işlem karşınıza çıkmayacak. O halde custom activity’e bulaşmaya hiç gerek yok. CodeActivity işimizi görür. Custom aktivite adı üstünde custom olduğundan daha çok efor ve daha çok kod gerektirir.

Custom Activity Oluşturuyoruz: 

– will be updated–

 

WF Yazıları | Exploring Standart Activities

İlk başta WinFX ile anılmaya başlanan windows foundation serileri Windows Communication Foundation,Windows Presentation Foundation , Windows Workflow Foundation ve Windows Cardspace olarak piyasaya sunulmuştur.

Forum ve sitelerde bu teknolojiler ile yeterince makale bulunmaktadır. Ben ise bu blog’ta ilk önce Workflow ile başlayıp, bir yazılım geliştiricinin ihtiyaç duyabileceği özellikleri yazmaya çalışacağım.

Öncelikle workflow foundation nedir, ne için kullanılır diyen arkadaşların YazGelistir.com‘da Çağdaş Davulcu‘nun kaleme aldığı bu makaleyi okumalarını tavsiye ederim.

Bu ilk Workflow yazımda ise standart aktivitlerin üzerinden hızlıca bir geçiş yapacağız, aslına bakılırsa bu yazı geliştiriciler için aktivite türleri hakkında bir referans olarak algılanabilir.

Herhangi bir worfklow projesi açtığımızda visual studio toolbox’ta aşağıdaki öğeler görünecektir. Bu öğeler workflow standart aktiviteleridir ve “out-of-box” adıyla anılmaktadır.

Şimdi bu aktiviteleri hızlı referans olması amacıyla kısa kısa açıklayalım:

workflow-activities

 

Yukarıdaki aktiviteler aslında fonksiyonalite olarak gruplara ayrılırlar. Bu gruplar:

  • Custom Workflow Logic
  • Flow Control
  • State Management
  • Event Handling
  • Local Service Management
  • Rules
  • Web Services
  • Transactions,Compensation,Synchronization
  • Exceptions and Error Handling.

Custom Workflow Logic

Code Activityİş akışına kod eklemenin kolay yoludur. İş akışı CodeActivity’e geldiğinde ExecuteCode eventi çalışır. Business Logic’i encapsulate etmesi açısından kullanışlıdır fakat re-usable değildir. Aynı CodeActivity’i başka bir workflow’da kullanamazsınız. Bunun yerine Custom Activity yazılmalıdır.

Flow Control

IfElseActivity ve IfElseBranchActivity 

– will be updated–

Youtube EDU hizmetinizde

YouTube , kolej ve üniversite öğrenci, öğretim görevlileri için EDU programını açtı. YouTube EDU adresinden başta amerikan üniversiteleri olmak üzere birçok üniversitedeki dersler, seminerler izlenebilir.

İlk olarak MIT OpenCourseWare ile derslerin video görüntüleri insanlığın hizmetini sunulmuştu. Şimdi YouTube  EDU ile öğrenciler derslere gitmek zorunda kalmayacak. 

YouTube EDU

Diğer Yazılar kategorisinde yayınlandı. Etiketler: , , , . » yorum bırak;

Görselleri BLOB olarak veritabanında saklama

Web projelerimizde bazen altyapı tercihleri veya kısıtlmaları sebebiyle upload edilen resim veya görselleri filse system üzerinde saklayamabiliriz. Bunun yerine bu görselleri veritabanına saklayarak, resimlerin gösterilmesi, eklenmesi ve bunun gibi işlemleri veritabanı kullanılarak gerçekleştirebilir. Burada söz konusu olan işlem imajı BLOB ( Binary Large Object ) olarak veritabanında saklama işlemidir.

Aşağıda bu işlemin nasıl yapılacağında dair bir örnek gösterilmektedir.

Görseli veritabanına upload etme işlemi  (VB.NET)

 

// Tanımlamalar
Dim fileName As String
Dim fileType As String
Dim namePosition As Int16
Dim stream As IO.Stream

//DB
Dim conn As New Data.SqlClient.SqlConnection
Dim connectionString As String = ConfigurationManager.AppSettings("MY_CONNECTION_STRING")
conn.ConnectionString = connectionString

//FileUpload kontrolü ile göreseli okumaya başlıyoruz.

stream = FileUploadObj.PostedFile.InputStream
Dim uploadedFile(stream.Length) As Byte  //
stream.Read(uploadedFile, 0, stream.Length)

conn.Open()

//Upload edilen dosyanın özellikleri alınıyor.
namePosition = FileUploadObj.PostedFile.FileName.LastIndexOf("\") + 1
fileName = FileUploadObj.PostedFile.FileName.Substring(namePosition)
fileType = FileUploadObj.PostedFile.ContentType

Dim description As String = TXT_Description.Text

Dim command As Data.SqlClient.SqlCommand =
              New Data.SqlClient.SqlCommand("INSERT INTO tblImage (Description,FileType, DFile,FileName,)
              Values(@Description, @DocumentFileType,@DocumentFile, @DocumentFileName)", conn)

command.Parameters.Add("@Description", SqlDbType.NVarChar, 100).Value = description
command.Parameters.Add("@DocumentFileType", SqlDbType.NVarChar, 50).Value = fileType
command.Parameters.Add("@DocumentFile", SqlDbType.Image, uploadedFile.Length).Value = uploadedFile
command.Parameters.Add("@DocumentFileName", SqlDbType.NVarChar, 50).Value = fileName

//upload edilen dosya, artık veritabanında BYTE olarak kayıt edildi.
command.ExecuteNonQuery()
conn.Close()
Görseli veritabanından okuma ve resimi gösterme işlemi

Görseli veritabanına kaydettikden sonraki işlem ise, byte şeklinde bu veriyi okuyup tekrar image haline çevirmek. Burada elbette en başta veritbanında ilgili tablonun ilgili column’ı byte tipinde olmalıdır.

// tblImage'den veri okuma.	

myConnection.Open()

Dim myDataReader As SqlDataReader

myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)

 

Do While (myDataReader.Read())

   If Not IsDBNull(myDataReader.Item("DFile")) Then

   Response.ContentType = myDataReader.Item("FileType")

   //byte tipinde columu okuma biçimi ve binarywrite yöntemi	

   //BinaryWrite görseli ekranda direk gösterir.	

   Response.BinaryWrite(myDataReader.Item("DFile"))

  Else

     Exit Do

  End If

Loop

myConnection.Close()

IBM’den Sun’ı satın alma girişimi

Son haberlere göre, IBM SUN Microsystems’i satın almak için 6,5 milyar dolarlık teklif sundu. IBM’in  java ve linux tabanlı sistemleri için hayati öneme sahip bu satın alma girişimi, ibm’i hem donanım hem de yazılım alanında bir deve dönüştürecek. RSA , WebSphere gibi java tabanlı yazılımları ile şirketlerde söz sahibi olan ibm için javayı kontrol alma girişimi heyecan yaratıcı bir olay.

Bakalım Microsoft bu satın alma girişimi karşısında nasıl bir hamle yapacak. Çünkü, eğer bu satın alma gerçekleşirse Microsoft’un pazar payı ciddi şekilde etkilenebilir.

Bir diğe soru ise, acaba açık kaynak teknolojisi Java yine aynı şekilde büyümeye devam edecek mi yoksa java ibm’in kontrolünde kapalı bir kutu olma yoluna mı girecek ?

deatylı bilgi için tıklayın.

Internet Programming örnek sınav cevapları

Bu linkte, Boğaziçi Üniversitesi Bilgisayar Mühendisliği bölümünde okutulan CMPE473 dersinin örnek sınav soruları bulunmaktadır.

Aşağıdaki cevaplar  ise, benim bu dersin 2.sınavına hazırlandığım gecenin sabahında çalışma amaçlı yazılmıştır. 

Sorulara bakabilir ve cevapları yorumlayabilirsiniz. 

Bu yazıyı okuyan arkadaşlara yardımcı olması dileğiyle.

 

MIDTERM-1:

=============

1. JMS’de mesajlar birer communication nesnelerdir. Böylece, JMS’te objeler remote node’lara gönderilebilirler. Socketslerde obje pass etme olayı yoktur. sadece data alış verisi olur. RMI ile objeler serialize edilip bu objelerin methodları çağırılır. 

 —A remote object passed as a parameter can only implement remote interfaces. 

 —By reference, not value.

 —when a non-remote object is passed as an argument in a remote method invocation, the content of the non-remote object is copied before invoking the call on the remote object.

 

2.Birinci forma bir actionListener metodu ekleriz. actionPerformed() metodu ile event’i handle edip bu eventin hangi item seçilip yapıldığını anlarız. combobox.selectedItem gibi. daha sonra JMS provider kullanarak bir point to point messaging yaratıp bu selectedItem’ı queue ekleyip ikinci formun bu mesajı almasınını sağlarız. Java event delegate model ile onMessage methodunda bu mesajı alır ve ikinci formu doldururuz.

 

3.

–RMI can be used in remote situations where JNDI cannot be used. EJB components are named and looked up with JNDI. rmi registry’de objenin url’si parametre olarak geçilirken, JNDI ile obje/componentin ismi geçilir.

–JNDI provides a “naming and directory service” within a JVM,

–RMI provides the ability to execute procedures in a remote JVM from another [remote] JVM

 

4.In point-to-point messaging, there are only one consumer and producer. There are a queue and messages in the queue may be expire if it is defined as. In publish/subscribe messaging, there may be many consumers and producers. consumers should subscribe themselves to topic to receieve messages. Topic is expire whene all messages delivered to all subscribes.

Use PTP messaging when every message you send must be processed successfully by one consumer.

the subscriber must continue to be active in order for it to consume messages.

Use pub/sub messaging when each message can be processed by zero, one, or many consumers.

 

MIDTERM-2

1. a. application server will take care of security,transactionimultithreading.

appserver–>webserver+ejb container.

   b.a web server handles HTTP protocol.Receives HTTP requests, process it and response static or dynamic response with program.an application server provides access to business logic for use by client application programs

   c.application server accessed thin adn thick client. but webserver is accessed only thin client.

   d.An Application Server may include a Web Server inside it.

 

2. container supports components. container is interface between components and low-level functionalities of app server. So programmers no need to know underlying details. components are assembled into J2ee module and deploed its container. the container manages nonconfigurable services such as enterprise bean and servler life cycles. they contain components. EJB container, web container,app client container,applet container.Container settings customize the underlying support provided by the J2EE server,The container is responsible for creating the enterprise bean, binding the enterprise bean to the naming service. container-managed persistence. Naming and finder methods. db connections and store persistence.

 

3.similarities: both of them is servlet. because JSP page dynamically compiled to servlet. both of them  need java-complient server.both of them use Java language.

differences: servlet is java class. changing in even html part in servlet should be compiled. in JSP changing automatically complied. require java knowledge. JSP: extends servlet. JSP seperate application logic from presentation more than servlet.JSP includes scriptlet,directives, tags.

JSP is docuemnt centric.

 

4.starts with a set of seed url. retrieve web page from that url. detect links from that url. add these url to seed.

memory management is challenges because, a url is about 16kb. and serach engine store much more secondary storage and memory.

also, traversal between URL requires strong graph algorithms to determine which url comes next.

then, link extracting is challenger issue because there are many links in pages and there are many types of pages such as html,doc,pdf.

 

7. I will use and implement 3 EJBs. They are: stateless session bean, steteful session bean and entity bean.

I use stateless session bean because first item, returned value is not client specific. showing times and movies is always same for all clients. I can use here stateful session bean also, however I worry about performance of my app. because staeful session beans holds values user-centric until clients over. I will use stetuful session beans because in the 2nd item there is an operaiont client-specific. Soi my app. should be hold state between method invocations. In here, I cannot use any other type of beans.

GetMovieBean  as stateful session bean.

MovieBean     as Entity bean. persistent.

customer bean ???

 

stateful bean and steteless bean

both can be used for 1st operation. getMovie(today) can manage first operaion in stateful bean.

customerBean

 

customerbean,moviebean.

getMovie()–>