Entītes komponenti apraksta biznesa objektus, kuru dati glabājas patstāvīgajā datu glabātuvē, kas parasti ir relāciju datubāze. Parasti katram entītes komponentam ir atbilstoša datubāzes tabula. Entītes komponenta klases mainīgie atbilst tabulas kolonām, katra entītes komponenta instance atbilst vienai rindai (jeb ierakstam) datubāzes tabulā. Entītes komponentus var uzskatīt par relāciju-objektu attēlošanas (O/R mapping) standartu.
Piemērs: Komponenta klase:
public abstract class AccountEJBBean implements EntityBean {
public abstract String getKontaNumurs();
public abstract void setKontaNumurs(String newKontaNumurs);
public abstract BigDecimal getSumma();
public abstract void setSumma(BigDecimal newSumma);
}
Datubāzes tabula:

Izvietošanas deskriptorā tiek norādīti entītes klases mainīgie, kuru dati tiek glabāti datubāzē, kā arī primārā atslēga.
<entity>
<description>Entity Bean ( CMP )</description>
<display-name>AccountEJB</display-name>
<ejb-name>AccountEJB</ejb-name>
<local-home>ejbexample.ejb.AccountEJBLocalHome</local-home>
<local>ejbexample.ejb.AccountEJBLocal</local>
<ejb-class>ejbexample.ejb.AccountEJBBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.String</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>AccountEJB</abstract-schema-name>
<cmp-field>
<field-name>kontaNumurs</field-name>
</cmp-field>
<cmp-field>
<field-name>summa</field-name>
</cmp-field>
<primkey-field>kontaNumurs</primkey-field>
</entity>
Entītes komponentiem var būt sekojošas alternatīvas:
Entītes komponentu īpašības:
Piemēram, klientam var būt vairāki konti.
public abstract class CustomerEJBBean implements EntityBean {
public abstract Collection getKonti();
public abstract void setKonti(Collection newKonti);
}
Relācija ir aprakstīta izvietošanas deskriptorā.
<ejb-relation>
<ejb-relation-name>Customer-Accounts</ejb-relation-name>
<ejb-relationship-role>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>CustomerEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>konti</cmr-field-name>
<cmr-field-type>java.util.Collection</cmr-field-type>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<multiplicity>Many</multiplicity>
<cascade-delete/>
<relationship-role-source>
<ejb-name>AccountEJB</ejb-name>
</relationship-role-source>
</ejb-relationship-role>
</ejb-relation>
Entītes komponenta klases mainīgie var būt trīs tipu:
Patstāvīgie un relāciju lauki ir jānorāda izvietošanas deskriptorā.
Ja apvienojamās darbības ir vienkāršas un to ir nedaudz, var izmantot vienkāršus vadības mehānismus:
try {
// Atskaita summu no 1. konta
}
catch (Exception e) {
// Ja notika kļūda, neiet tālāk
return;
}
try {
// Pieskaita summu 2. kontam
}
catch (Exception e) {
// Ja notika kļūda, neiet tālāk
// un atgriež summu atpakaļ 1. kontā
return;
}
Problēmas:
Transakcijas nekalpo vienīgi programmēšanas ērtumam, jo dalītās aplikācijās var rasties tīkla, datubāzu utml. traucējumi, kuri transakciju nelietošanas gadījumā noved pie katastrofiskām sekām.
No šīm situācijām iespējams izvairīties, pienācīgi izmantojot transakcijas.
Pastāv dažādi transakciju modeļi, t.sk. plakanās transakcijas (flat transactions) un saliktās transakcijas (nested transactions). EJB specifikācija prasa, lai būtu plakano transakciju atbalsts.

Bieži to uztver kā "nobalsošanas modeli" - ja no daudzajiem soļiem, kuri ir atomārajā darbībā, kaut viens nobalso "pret", tad transakciju atritina.
Saliktas (nested) transakcijas veidotā stāvokļu diagramma drīzāk atgādina sazarotu koku. Kursā sīkāk šo modeli neaplūkosim.
EJB komponenti tieši nesadarbojas ne ar transakciju pārvaldnieku, ne ar resursu pārvaldniekiem. Aplikācijas loģika ir augstākā abstrakcijas līmenī. EJB komponenti toties var nobalsot par to, vai transakciju vajag atritināt.
Svarīgi zināt, kurš uzsāk transakciju, kurš izraisa komitēšanu vai atritināšanu, un kad tas notiek. Šīs darbības var uzskatīt par transakcijas robežu nospraušanu (demarcating transactional boundaries). EJB tehnoloģijās ir iespējami 2 veidi, kā nospraust transakciju robežas:
Ja lietojam deklaratīvas transakcijas, tad deskriptorā src/metadata/ejb-jar.xml attiecīgajam sesijas EJB komponentam rakstām sekojošo.
<ejb-jar>
<enterprise-beans>
...
<session>
<description>Session Bean ( Stateless )</description>
<display-name>BankSessionEJB</display-name>
<ejb-name>BankSessionEJB</ejb-name>
<home>ejbexample.ejb.BankSessionEJBHome</home>
<remote>ejbexample.ejb.BankSessionEJB</remote>
<ejb-class>ejbexample.ejb.BankSessionEJBBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
...
</session>
...
</enterprise-beans>
...
</ejb-jar>
Tā kā entītes EJB komponenti uztic datu ielādi un ierakstīšanu EJB konteineram, tad tiem vienmēr jālieto deklaratīvās transakcijas - t.i. arī transakciju veikšanu jāuztic konteineram.
Sesijas EJB komponents lieto deklaratīvās transakcijas. Kāda izskatās viena atomāra darbība?
public void deposit(double amt) throws AccountException {
System.out.println("deposit(" + amt + ") called.");
balance += amt;
}
Kas jādara, lai tekošo transakciju piespiestu atritināties? Piemēram, ja ir aizliegts noguldīt 1,000,000.00 vai vairāk. Vai pietiek ar to, ka metam šajā klasē AccountException? Analoģisks kods, kurš izmanto programmējamās transakcijas:
public void deposit(double amt) throws AccountException {
javax.transaction.UserTransaction userTran = null;
try {
System.out.println("deposit(" + amt + ") called.");
userTran = ctx.getUserTransaction();
userTran.begin();
balance += amt;
userTran.commit();
}
catch (Exception e) {
if (userTran != null) userTran.rollback();
throw new AccountException("Deposit failed because of " +
e.toString());
}
}
Šo otro variantu mēs saprotamu iemeslu dēļ šajā kursā nelietosim.
No šiem izmantojam "Required"
Ir sekojošas nevēlamas situācijas (sākot ar pašām nevēlamākajām):
Transakciju izolācijas līmeņi un iespējamās problēmas
| Izolācijas līmenis | Netīri nolasījumi? | Neatkārtojami nolasījumi? | Fantomu nolasījumi? |
| READ UNCOMMITTED | jā | jā | jā |
| READ COMMITTED | nē | jā | jā |
| REPEATABLE READ | nē | nē | jā |
| SERIALIZABLE | nē | nē | nē |