Kacang Sesi Java EE

1. Pengenalan

Kacang Sesi Perusahaan boleh dikelaskan secara meluas menjadi:

  1. Kacang Sesi Tanpa Statik
  2. Kacang Sesi Negeri

Dalam artikel ringkas ini, kami akan membincangkan dua jenis kacang sesi ini.

2. Persediaan

Untuk menggunakan Enterprise Beans 3.2 , pastikan untuk menambahkan versi terbaru ke bahagian dependensi pada fail pom.xml :

 javax javaee-api 7.0 provided 
Ketergantungan terkini boleh didapati di Maven Repository. Ketergantungan ini memastikan bahawa semua Java Java EE 7 API tersedia semasa waktu kompilasi. Yang disediakan ini untuk memastikan skop yang pernah digunakan; kebergantungan akan diberikan oleh kontena di mana ia telah digunakan.

3. Kacang Tanpa Statik

Bean sesi tanpa status adalah sejenis kacang perusahaan yang biasanya digunakan untuk melakukan operasi bebas. Ia tidak mempunyai keadaan klien yang berkaitan, tetapi mungkin mengekalkan keadaan kejadiannya.

Mari kita lihat contoh untuk menunjukkan bagaimana kacang tanpa statik berfungsi.

3.1 Membuat Kacang Tanpa Statik

Pertama, mari buat kacang StatelessEJB . Kami menggunakan anotasi @Stateless untuk menandakan kacang sebagai stateless:

@Stateless public class StatelessEJB { public String name; }

Kemudian kami membuat pelanggan pertama kacang tanpa statik di atas, yang dipanggil EJBClient1 :

public class EJBClient1 { @EJB public StatelessEJB statelessEJB; }

Kami kemudian menyatakan pelanggan lain, bernama EJBClient2, yang mengakses kacang tanpa status yang sama:

public class EJBClient2 { @EJB public StatelessEJB statelessEJB; }

3.2 Menguji Kacang Tanpa Statik

Untuk menguji kewarganegaraan EJB, kami dapat menggunakan dua pelanggan yang kami nyatakan di atas dengan cara berikut:

@RunWith(Arquillian.class) public class StatelessEJBTest { @Inject private EJBClient1 ejbClient1; @Inject private EJBClient2 ejbClient2; @Test public void givenOneStatelessBean_whenStateIsSetInOneBean _secondBeanShouldHaveSameState() { ejbClient1.statelessEJB.name = "Client 1"; assertEquals("Client 1", ejbClient1.statelessEJB.name); assertEquals("Client 1", ejbClient2.statelessEJB.name); } @Test public void givenOneStatelessBean_whenStateIsSetInBothBeans _secondBeanShouldHaveSecondBeanState() { ejbClient1.statelessEJB.name = "Client 1"; ejbClient2.statelessEJB.name = "Client 2"; assertEquals("Client 2", ejbClient2.statelessEJB.name); } // Arquillian setup code removed for brevity }

Kita mulakan dengan memasukkan dua pelanggan EBJ ke dalam ujian unit.

Kemudian, dalam kaedah ujian pertama, kami menetapkan pemboleh ubah nama di EJB yang disuntikkan ke EJBClient1 ke nilai Pelanggan 1. Sekarang, apabila kita membandingkan nilai pemboleh ubah nama di kedua-dua klien, kita harus melihat bahawa nilainya sama . Ini menunjukkan bahawa keadaan tidak dipelihara dalam biji tanpa stat .

Mari tunjukkan bahawa ini berlaku dengan cara yang berbeza. Dalam kaedah ujian kedua, kita melihat bahawa setelah kita menetapkan pemboleh ubah nama pada klien kedua, ia 'menimpa' apa sahaja nilai yang diberikan kepadanya melalui ejbClient1 .

4. Kacang Negeri

Kacang sesi bernegara mengekalkan keadaan di dalam dan di antara transaksi. Itulah sebabnya setiap kacang sesi bernegara dikaitkan dengan pelanggan tertentu. Bekas dapat menyimpan dan mengambil keadaan kacang secara automatik semasa menguruskan kumpulan contoh kacang sesi yang bernas.

4.1 Mencipta Kacang Negeri

Kacang sesi bernegara ditandai dengan anotasi @Status . Kod untuk kacang negeri adalah seperti berikut:

@Stateful public class StatefulEJB { public String name; }

Pelanggan tempatan pertama untuk kacang negeri kami ditulis seperti berikut:

public class EJBClient1 { @EJB public StatefulEJB statefulEJB; }

Pelanggan kedua yang dipanggil EJBClient2 juga dibuat sama seperti EJBClient1 :

public class EJBClient2 { @EJB public StatefulEJB statefulEJB; }

4.2 Menguji Kacang Negeri

Fungsi kacang negara diuji dalam ujian unit EJBStatefulBeanTest dengan cara berikut:

@RunWith(Arquillian.class) public class StatefulEJBTest { @Inject private EJBClient1 ejbClient1; @Inject private EJBClient2 ejbClient2; @Test public void givenOneStatefulBean_whenTwoClientsSetValueOnBean _thenClientStateIsMaintained() { ejbClient1.statefulEJB.name = "Client 1"; ejbClient2.statefulEJB.name = "Client 2"; assertNotEquals(ejbClient1.statefulEJB.name, ejbClient2.statefulEJB.name); assertEquals("Client 1", ejbClient1.statefulEJB.name); assertEquals("Client 2", ejbClient2.statefulEJB.name); } // Arquillian setup code removed for brevity }

Seperti sebelumnya kedua-dua pelanggan EJB disuntik ke dalam ujian unit. Dalam kaedah ujian, kita dapat melihat bahawa nilai pemboleh ubah nama ditetapkan melalui klien ejbClient1 dan dikekalkan walaupun nilai nama yang ditetapkan melalui ejbClient2 berbeza. Ini menunjukkan bahawa keadaan EJB dikekalkan .

5. Kacang Sesi Tanpa Statistik dan Negeri

Sekarang mari kita lihat perbezaan utama antara dua jenis kacang sesi.

5.1 Kacang Tanpa Statik

  • Kacang sesi tanpa status tidak mengekalkan keadaan dengan pelanggan. Atas sebab ini, mereka dapat digunakan untuk membuat kumpulan objek yang berinteraksi dengan beberapa pelanggan
  • Oleh kerana kacang polong tidak mempunyai keadaan bagi setiap pelanggan, mereka mempunyai prestasi yang lebih baik
  • Mereka dapat menangani pelbagai permintaan dari beberapa pelanggan secara selari dan
  • Boleh digunakan untuk mengambil objek dari pangkalan data

5.2 Kacang Kacang

  • Kacang sesi yang bernas dapat mengekalkan keadaan dengan beberapa pelanggan, dan tugas itu tidak dibahagi di antara pelanggan
  • Keadaan berlangsung selama sesi berlangsung. Setelah sesi hancur, keadaan tidak dikekalkan
  • Bekas boleh membuat siri dan menyimpan keadaan sebagai keadaan basi untuk kegunaan masa depan. Ini dilakukan untuk menjimatkan sumber pelayan aplikasi dan untuk menyokong kegagalan kacang dan bersifat pasif
  • Boleh digunakan untuk menyelesaikan masalah jenis pengeluar-pengguna

6. Kesimpulannya

Oleh itu, kami telah membuat dua jenis kacang sesi dan pelanggan yang sesuai untuk menggunakan kaedah dari kacang tersebut. Projek ini menunjukkan tingkah laku dua jenis kacang sesi utama.

Seperti biasa, kod sumber untuk artikel tersebut terdapat di GitHub.