8.1. EJB ievads

Dalīto aplikāciju dzīvotspēju nosaka to veidošanas ražīgums, mērogojamība, integrācija ar eksistējošām sistēmām, brīvība platformas izvēlē un drošības risinājumi. Šādu aplikāciju izstrādātājam jārēķinās ar daudziem apstākļiem:

  • Datubāzu un transakciju serveri prasa pavisam citu programmēšanas stilu nekā, teiksim, dinamiskais HTML (tehnoloģiju diverģence). Bet tie bieži jāintegrē vienā sistēmā.
  • "Enterprise" aplikācijai var būt jāatbalsta gan Web klienti, gan citi - specifiski klienti
  • Aplikācijai jātiek galā ar lielu skaitu vienlaicīgu klientu pieprasījumu
  • Aplikācijai jāvar izmantot eksistējošu sistēmu funkcionalitāte un pašai jābūt piemērotai dažādu piegādātāju videi un rīkiem.

J2EE platforma šos jautājumus risina, piedāvājot daudzslāņu izstrādes modeli (vienā no slāņiem ir EJB komponenti), kā arī karkasu (framework), kurš atbrīvo programmētāju no vistipiskāko uzdevumu veikšanas.

Sun J2EE elementu sadarbība

Šajā kursā aplūkosim J2EE platformas centrālo sastāvdaļu - EJB, to izsaukšanu no Web un DOS aplikācijām, pašu EJB komponentu programmēšanu un EJB konteinera servisu mērķtiecīgu izmantošanu.

EJB komponentu ievads

Mērķi

  • Motivēt EJB nepieciešamību un saprast servisus, kurus šī vide nodrošina
  • Prast izvietot (deploy) gatavu EJB aplikāciju
  • Prast izsaukt EJB sesijas komponentus no klienta
  • Konfigurēt OC4J, lai darbinātu EJB, t.sk. konfigurēt DataSource

EJB motivācija

  • Veicināt servera puses programmu atkalizmantojamību
  • Atkalizmantojamībai lietot aplikācijas sadalīšanu komponentos (moduļos ar precīzi definētiem interfeisiem)

Lielu dalītu sistēmu (distributed systems) veidošanā parasti rodas šādas problēmas:

Attālinātie izsaukumi
klientam jāvar izsaukt servera komponentes, arī ja tās ir uz citas mašīnas
Serveru klasteri un slodzes izlīdzināšana
pārāk noslogotie serveri pieprasījumus atdod citiem
datu slāņa integrācija
objektu saglabāšana relāciju datubāzēs, unificēta piekļuve senajām - legacy sistēmām
Transakcijas
vienlaicīga piekļuve datiem, datubāzes atgriešanās konsistentā stāvoklī)
Dinamiska programmatūras atjaunošana
t.i. dynamic redeployment - kodu maina, sistēmu neapturot tīra serveru apturēšana vienlaikus netraucēt klientu apkalpošanu, kuri lietoja šo serveri
Notikumu reģistrācija un uzraudzība
t.i. logging and auditing - noskaidrot radušos kļūdu cēloņus
Daudzpavedienu serveris
spēj apkalpot vienlaikus vairākus klientus
Ziņojumorientēta starpprogrammatūra (middleware)
klienti un serveri var būt vāji sapāroti un apmainīties ar ziņojumiem
Objektu dzīvescikli
servera objekti dzīvo savā redzamības apgabalā atbilstoši sistēmas slodzei
Resursu baseini
klientu neizmantotie resursi atgriežas sistēmas kopīgo vajadzību apmierināšanai, piemēram, soketi (datubāzu konekcijas), atmiņas objekti
Drošība
pārbauda lietotāju tiesības veikt darbību
Kešošana
bieži lietotu datu glabāšana ātri pieejamā atmiņā)

EJB - komponentu arhitektūra

  • EJB standarts - vienošanās jeb interfeisu kopums, kas ļauj jebkuram aplikāciju serverim apkalpot jebkuru komponenti (specifikācija un interfeisi)
  • EJB komponentus sauc arī par enterprise beans

EJB alternatīvas:

  • MS .NET komponentes .NET platformā
  • Vieglsvara Javas ietvari, piemēram, Spring Framework

EJB un J2EE

EJB ir daļa no Sun piedāvātās J2EE (Java 2 Platform, Enterprise Edition). Vispār ir 3 javas platformas:

  • J2ME (Java 2, Micro Edition)
  • J2SE (Java 2, Standard Edition)
  • J2EE (Java 2, Enterprise Edition)

J2EE apvieno dažādas servera puses tehnoloģijas. Tas no Sun Microsystems viedokļa satur šāda veidu sastāvdaļas.

Specifikācijas
Katrai J2EE tehnoloģijai ir PDF specifikācija; šīs specifikācijas dažreiz numurējas atšķirīgi. Piemēram, tekošā J2EE versija ir 1.3.1, bet JSP versija ir 2.0, EJB versija ir 2.1, un JMS (Java Messaging Service) versija ir 1.1
Testu virkne
Sun var piešķirt J2EE atbalsta programmatūras izstrādātājam Sun sertifikātu (programmatūra var būt J2EE-certified jeb J2EE-compliant)
Paraugimplementācija
Sun'a bezmaksas implementācija, kura var būt nepiemērota komerciālai lietošanai

Arī Sun'a ieteikumi J2EE lietošanai, piemēram, http://java.sun.com/blueprints/enterprise/, utml.

J2EE tehnoloģiju pārskats

J2SE un J2EE satur atbalstu daudziem servera puses programmēšanas mehānismiem, kurus var lietot gan atsevišķi, gan kopā ar EJB. Šajā kursā atklāti izmantosim sekojošas "enterprise" Javas sastāvdaļas:

  • JNDI - piekļuve vārdu servisam
  • JDBC
  • JSP un Servletus
  • EJB

EJB vidē "aiz kulisēm" darbojas arī RMI-IIOP, transakcijas, u.c. Uzskaitīsim visas būtiskākās J2EE tehnoloģijas:

EJB tehnoloģijas (Enterprise Java Beans (EJB))
Definē, kā rakstīt EJB komponentus, kā arī kontraktu starp komponentiem un aplikāciju serveri.
Attālinātie metožu izsaukumi RMI (Java Remote Method Invocation (RMI))
Attālinātie procedūru izsaukumi (RPC) starp Javu un Javu. RMI vēlāk paplašinājās par RMI-IIOP (Internet Inter-ORB Protocol), lai Java varētu piedalīties CORBA integrācijā ar citām tehnoloģijām.
Javas IDL valoda (Java IDL - Interface Definition Language)
Interfeisu apraksts integrācijai ar CORBA
Javas vārdu un direktoriju interfeiss JNDI (Java Naming and Directory Interface (JNDI))
JNDI definē Javas sadarbību ar vārdu un direktoriju servisiem; ar JNDI var piekonektēties, piemēram, EJB komponentēm. JNDI ļauj pieslēgties arī citiem vārdu servisiem, piemēram, Microsoft Exchange vai Lotus Notes.
Datubāzu interfeiss JDBC (Java DataBase Connectivity (JDBC))
"Standard Edititon" pakotnes java.sql un javax.sql, bet tās nepieciešamas arī "Enterprise" Javai.
Javas transakciju interfeiss JTA (Java Transaction API (JTA))
Bibliotēka sadarbībai starp Javas aplikāciju un transakciju servisu
Javas transakciju serviss (Java Transaction Service (JTS))
Transakciju atbalsts komponentiem
Javas ziņu serviss (Java Messaging Service)
Ziņas ir alternatīva sadalītu aplikāciju saziņai, salīdzinot ar RMI
Servleti un JSP
Bieži kalpo par lietotāja interfeisa slāni EJB aplikācijām
Javas pasts (JavaMail)
Ļauj sūtīt pastu platformneatkarīgā veidā
"Enterprise" Javas konektoru arhitektūra (J2EE Connector Architecture)
Piekļuve "enterprise" sistēmu (IBM'a CICS, BEA's Tuxedo, utml.) resursiem vienotā veidā
Javas interfeiss XML parsēšanai (Java API form XML Parsing (JAXP))
Apstrādā XML datus, var veidot Web servisus
Javas autentikācijas/autorizācijas serviss (Java Authentication and Authorization Service (JAAS))
Sadarbība ar drošības sistēmām

Sadalītie objekti

Dalīts objekts (distributed object) ir tāds, kuru var izsaukt attālināti (remotely). Tas notiek sekojoši:

  • Klients izsauc klienta starpnieku (stub, client-side proxy object). Starpnieks atbild par tīkla komunikāciju klienta pusē, piemēram izsaukuma parametru nosūtīšanu konkrētam TCP soketam.
  • Klienta starpnieka izsaukums nonāk pie servera starpnieka (skeleton, server-side proxy). Tas saņem soketa izsaukumus un pārveido parametrus atpakaļ uz Javas mainīgo reprezentāciju.
  • Servera starpnieks deleģē izsaukumu dalītajam objektam, kurš to apstrādā, un tāpat caur abiem starpniekiem rezultātu atgriež klientam.

Atklāta (explicit) starpprogrammatūras lietošana

Starpprogrammatūru, piemēram, transakcijām, drošībai, datubāzu piekļuvei var izmantot tieši - izsaucot dalītajā objektā atbilstošās programmatūras API. Tas notiek apmēram šādi:

transfer(Account account1, Account account2, long amount) {
  // 1. Izsauc drošības API, lai pārbaudītu tiesības
  // 2. Izsauc transakciju API, lai sāktu transakciju
  // 3. Izsauc DB API, lai ielādētu vajadzīgos ierakstus
  // 4. Atskaita "amount" no viena konta, pieskaita otram
  // 5. Izsauc DB API, lai noglabātu izmainītos ierakstus
  // 6. Izsauc transakciju API, lai beigtu transakciju
}

Pieejas īpatnības:

  • Var izmantot pēc vēlēšanās dažādus starpprogrammatūras risinājumus
  • Grūti rakstīt: Garš kods, un biznesa loģika sajaukta ar starpprogrammatūras izsaukumiem
  • Grūti uzturēt: Ja starpprogrammatūras piegādātāji mainās, kodu var nākties pārtaisīt

Slēpta (implicit) starpprogrammatūra

EJB, CORBA un MS .NET īpatnība ir iespēja izmantot starpprogrammatūru, to atklāti neizsaucot:

transfer(Account account1, Account account2, long amount) {
  // 1. Atskaita "amount" no viena konta, pieskaita otram
}

To sasniedz ar sekojošiem soļiem:

  • Deklarē starpprogrammatūras servisus, kurus mums vajag, atsevišķā deskriptorfailā
  • Iedarbina "pieprasījumu pārtvērēju", kurš saņem klienta pieprasījumus, nodrošina vajadzīgos starpprogrammatūras izsaukumus un pēc tam deleģē pieprasījumu tālāk dalītajam objektam

Dalītās skaitļošanas modelis (Distributed computing)

Aplikācijas kodu var sadalīt trīs vai vairāk daļās. Parasti izdala 3 slāņus:

Datu slānisNodrošina pieeju datiem (relāciju vai objektu datubāzēm)JDBC
Biznesa loģikas slānisSatur aplikācijas biznesa loģikuEnterprise JavaBeans
Klienta saskarnes slānisNodrošina saskarni ar klientuServleti, JSP lapas

Kad lietot EJB komponentus:

  • Aplikācijai ir jābūt mērogojamai.
  • Ir nepieciešami servisi, kurus nodrošina EJB arhitektūra. Piemēram, lai nodrošinātu datu integritāti, ir jālieto transakcijas.
  • Aplikācijai ir jānodrošina dažādu tipu klienti, piemēram, WEB bāzēts un tradicionālais GUI.

EJB izmantošanas trūkumi:

  • Sarežģītāka aplikācijas izvietošana (deployment).
  • Grūtāka programmas skaņošana (debug).
  • Zemāka aplikācijas ātrdarbība.

Enterprise JavaBeans arhitektūras servisi un iespējas:

Vārdu un direktoriju serviss
Serviss ļauj tīklā atrast dažādus objektus, izmantojot standarta saskarni (Java Naming and Directory Interface - JNDI).
Datu saglabāšana (persistence)
EJB konteiners var veikt EJB komponentu datu automātisku saglabāšanu datubāzē. Tam ir paredzēts atsevišķs komponentu tips - entītes komponents. Šis serviss ļauj izveidot DBVS neatkarīgas datu apstrādes sistēmas, kurām nav nepieciešams programmēt SQL pieprasījumus. EJB konteiners atbalsta arī JDBC standartu un datubāzes savienojumu (connection) dīķi.
Iebūvēts transakciju atbalsts
Šis serviss veic transakciju vadību. Rezultātā tiek nodrošināta datu integritāte un nav vajadzīgs programmēt ROLLBACK vai COMMIT tipa SQL izsaukumus. Lai izmantotu šo servisu, komponentu metodēm ir nepieciešams norādīt transakciju atribūtus.
Komponenta dzīves cikla kontrole
EJB komponentiem piemīt dzīves cikls, kuru automātiski kontrolē komponentu izpildes vide - EJB konteiners. Piemēram, retāk izmantotie komponenti var tiek serializēti un izdzēsti no operatīvās atmiņas. Vajadzības gadījumā tie tiek atjaunoti.
Drošības serviss (Java Authentication and Authorization Service - JAAS)
Serviss veic lietotāju autentifikāciju - identitātes noskaidrošanu un autorizāciju - lietotāja tiesību kontroli. Komponentu metodēm ir iespējams norādīt lietotāju lomas, kuri drīkst šo metodi izsaukt. EJB konteiners automātiski veic pieejas kontroli.
Daudzlietotāju atbalsts (multithreading)
EJB konteiners nodrošina daudzlietotāju atbalstu un pats uzņemas pavedienu vadību. Programmatoriska pavedienu izmantošana EJB komponentos nav nepieciešama un ir aizliegta.

EJB komponentu tipi:

Sesijas EJB komponenti
Sesijas komponenti modelē biznesa procesus. Tie veic dažādas darbības, piemēram, saskaita skaitļus, pārbauda kredītkartes numuru, veic bankas pārskaitījumus vai izsauc citus EJB komponentus. Sesijas komponentu piemēri: bankas kasieris, kredītkartes validētājs; nosaukumu pamatā ir kāds darbības vārds vai darbība.
Entīšu EJB komponenti
Entīšu komponenti modelē biznesa datus. Tie reprezentē biznesa entītes objektus, kuri eksistē patstāvīgajā datu glabātuvē (parasti relāciju datubāzē). Entītes komponenti var būt, piemēram, darbinieks, produkts, kredītkarte utml.; nosaukumu parasti veido kāds lietvārds vai jēdziens.
Ziņojumu EJB komponenti
Ziņojumu komponenti ir līdzīgi sesijas komponentiem, arī tie veic noteiktas darbības. Atšķirībā no sesijas komponentiem, ziņojumu komponentu var izsaukt tikai nosūtot tam ziņojumu. Komponents asinhronā režīmā saņem klientu sūtītos JMS (Java Messaging Service) ziņojoumus.

Enterprise JavaBean komponenta sastāvdaļas:

  • EJB komponenta klase.
  • Home saskarne un komponenta objekta saskarne. Šīs saskarnes var būt lokālas vai attālinātas.
  • EJB izvietošanas deskriptors. Tas apraksta komponenta konfigurāciju un tam nepieciešamos servisus, ko sniedz EJB konteiners.
  • Entītes komponenta primārās atslēgas klase.
  • Citas palīgklases.

EJB komponenta saskarnes:

Attālinātā saskarneLokālā saskarne
Home saskarneRemote home interfaceLocal home interface
Komponenta saskarneRemote object interfaceLocal object interface

Home saskarnei ir šādas īpašības:

  • Tā satur komponenta dzīves cikla metodes, piemēram, komponenta instances izveidošana, dzēšana, meklēšana.
  • Lai to izsauktu, komponenta instance nav nepieciešama.

Komponenta saskarnei ir sekojošas īpašības:

  • Tā satur komponenta biznesa metodes (ko komponents "dara").
  • Šī saskarne piemīt konkrētai komponenta instancei.

JNDI serviss

Ar JNDI var atrast tīklā dažādus objektus. JNDI ir Java standarta interfeiss ar kura palīdzību piekļūst vārdu un direktoriju servisiem. Vārdu serviss veic sekojošas funkcijas:

  • Objektiem piekārto vārdus. To sauc par binding.
  • Vārdi tiek sakārtoti kokveida struktūrās.
  • Nodrošina iespēju atrast objektus pēc vārda. To sauc par lookup.
  • Dod iespēju vārdiem piekārtot dažādus attribūtus. Šādus vārdus sauc par direktoriju objektiem.

Piemēri:

  • DNS (Domain Name System)
  • failu sistēma.

Direktoriju serviss ir vārdu serviss ar iespēju manipulēt ar direktoriju objektu atribūtiem. Piemēri:

  • LDAP (Lightweight Directory Access Protocol).
  • NDS (Network Directory System).

Direktoriju servisi ir līdzīgu datubāzēm, tie parasti tiek implementēti uz to pamata. EJB serveris parasti satur JNDI implementāciju, kas tiek izmantota sekojošiem mērķiem:

  • Komponentu attēlošana JNDI vārdu kokā, kas ļauj tos sameklēt tīklā.
  • Dažādu resursu, piemēram, datu avotu (DataSource) attēlošana JNDI kokā.

EJB komponentu piemērs

  • Entītes komponents CustomerEJBBean, kas apraksta bankas klientus.
  • Entītes komponents AccountEJBBean, kas apraksta kontus, kuri pieder kādam no bankas klientiem.
  • Sesijas komponents BankSessionEJB. Tas satur metodes, kas veic dažādas darbības, piemēram, atver jaunu kontu vai palielina konta naudas summu.
EJB komponentu klases:
EJB komponenti un to saskarnes:
Vērtības objektu klases:
Izņēmumi (exceptions):

Sesijas komponents BankSessionEJBBean

// attālinātā home saskarne
public interface BankSessionEJBHome extends EJBHome {
  BankSessionEJB create() 
    throws RemoteException, CreateException;
}

// attālinātā komponenta saskarne
public interface BankSessionEJB extends EJBObject 
{
  CustomerVO[] readCustomers() throws RemoteException;

  void openNewAccount(String personasKods, String kontaNumurs) 
    throws RemoteException,
      DoesntExistException,
      AlreadyExistsException;
       
  void deposit(String kontaNumurs,BigDecimal amount) 
        throws RemoteException, DoesntExistException;
}

// komponenta klase
public class BankSessionEJBBean implements SessionBean {
  private SessionContext ctx;

  public void addCustomer(CustomerVO cust) 
      throws AlreadyExistsException {
    try {
      CustomerEJBLocalHome home 
          = this.getCustomerEJBLocalHome();
      CustomerEJBLocal customer 
          = home.create(cust.getPersonasKods());
      customer.setAdrese(cust.getAdrese());
      customer.setDzimsanasGads(cust.getDzimsanasDatums());
      customer.setUzvards(cust.getUzvards());
      customer.setVards(cust.getVards());
    }  
    catch (DuplicateKeyException ex) {
      throw new AlreadyExistsException("Customer already exists");
    } 
        catch (Exception ex) {
      throw new EJBException(ex);
    }
  }
}

Entītes komponents AccountEJBBean:

// lokālā home saskarne
public interface AccountEJBLocalHome extends EJBLocalHome {
  AccountEJBLocal create(String kontaNumurs) 
    throws CreateException;
  AccountEJBLocal findByPrimaryKey(String primaryKey) 
    throws FinderException;
  Collection findAll() throws FinderException;
}

// lokālā komponenta saskarne
public interface AccountEJBLocal extends EJBLocalObject {
  String getKontaNumurs();
  BigDecimal getSumma();
  void withdraw(BigDecimal amount) 
    throws InsufficientAmountException; 
  void deposit(BigDecimal amount);
} 

// komponenta klase

public abstract class AccountEJBBean implements EntityBean {
  private EntityContext context;

  public abstract String getKontaNumurs();
  public abstract void setKontaNumurs(String newKontaNumurs);

  public abstract BigDecimal getSumma();
  public abstract void setSumma(BigDecimal newSumma);

  public String ejbCreate(String kontaNumurs)
  {
    this.setKontaNumurs(kontaNumurs);
    this.setSumma(new BigDecimal("0.00"));
    return null;
  }
}

Sesijas komponenta atrašana tīklā un izsaukšana:

  • Inicializē JNDI klasi javax.naming.InitialContext. Šī klase reprezentē savienojumu ar Java vārdu servisa JNDI serveri.
  • Pēc norādītā vārda meklē sesijas komponenta home saskarni. Ja vārdu serveris atrod šādu saskarni, tad tā tiek atgriezta kā klases java.lang.Object instance.
  • Atrasto objektu pārveido par nepieciešamo saskarni ar klases javax.rmi.PortableRemoteObject palīdzību.
  • Izsauc home saskarnes metodi, kas izveido sesijas komponenta instanci. Šī metode atgriež komponenta saskarni.
  • Komponenta saskarne izmantojama, lai izsauktu komponenta implementētās metodes.

    Koda piemērs:

    // 1
    env.put(Context.INITIAL_CONTEXT_FACTORY, 
      "com.evermind.server.rmi.RMIInitialContextFactory");
    env.put(Context.SECURITY_PRINCIPAL, "login");
    env.put(Context.SECURITY_CREDENTIALS, "password");
    env.put(Context.PROVIDER_URL, 
      "ormi://localhost/applicationName");
    InitialContext ic =  new InitialContext(env);
    
    // 2 
    Object obj = ic.lookup("SessionBeanName");
    
    // 3
    SessionBeanHome home = 
      (SessionBeanHome)PortableRemoteObject.narrow(obj,
        SessionBeanHome.class);
    
    // 4
    SessionBean bean = home.create();
    
    // 5
    bean.doBusinessMethod(String arg1);
    

Data source konfigurēšana OC4J

Data source objekts ir datubāzes savienojumu fabrika. Tas parasti ir reģistrēts JNDI vārdu kokā. Datu avotus un to JNDI vārdus nepieciešams konfigurēt.

<data-source
  class="com.evermind.sql.DriverManagerDataSource"
  name="OracleDS"
  location="jdbc/OracleCoreDS"
  xa-location="jdbc/xa/OracleXADS"
  ejb-location="jdbc/OracleDS"
  connection-driver="oracle.jdbc.driver.OracleDriver"
  username="scott"
  password="tiger"
  url="jdbc:oracle:thin:@sidecar:1521:ora92"
  inactivity-timeout="30"
/>

Daži J2EE termini

  • ACID properties of transactions = transakciju ACID īpašības
  • alias = segvārds
  • atomic name = atomārs vārds
  • atomic operation = atomāra darbība
  • atomicity = atomaritāte
  • auditing = uzraudzība
  • binding = saistījums (vārdam ar objektu JNDI servisā)
  • commit = komitēšana
  • compound name = salikts vārds
  • consistency = nepretrunīgums, saskanīgums
  • context = konteksts (JNDI saistījumu kopa)
  • crash, catastrophic failure = avārija
  • declarative transactions = deklaratīvas transakcijas
  • demarcating transactional boundaries = nospraust transakciju robežas
  • deployment descroptor = izvietojuma deskriptors ("ejb-jar.xml" fails)
  • descriptor file = deskriptorfails (piem., dalītas aplikācijas iestatījumu glabāšanai)
  • directory object = direktorijs (vārdu sistēmas jēdziens)
  • dirty read = netīrs nolasījums
  • distributed component = dalītais komponents
  • distributed object = dalīts objekts
  • dynamic redeployment = dinamiska programmatūras atjaunošana
  • EJB component = EJB komponents, EJB komponente (nejaukt ar "Java Bean" - parasto "Javas pupiņu")
  • entity bean = entīšu EJB komponents
  • explicit middleware = atklāta starpprogrammatūra
  • failure = atteice
  • flat transaction = plakana/vienkārša transakcija
  • hanging = uzkāršanās
  • implicit middleware = slēpta starpprogrammatūra
  • Java 2 Enterprise Edition = Javas 2 "Enterprise" izlaidums
  • Java API form XML Parsing (JAXP) = Javas interfeiss XML parsēšanai
  • Java Authentication and Authorization Service (JAAS) = Javas autentikācijas/autorizācijas serviss
  • Java Messaging Service (JMS) = Javas ziņu/vēstu serviss
  • Java Naming and Directory Interface (JNDI) = Javas vārdu un direktoriju interfeiss JNDI
  • Java Remote Method Invocation (RMI) = attālinātie metožu izsaukumi RMI
  • Java Transaction API (JTA) = Javas transakciju interfeiss JTA
  • Java Transaction Service (JTS) = Javas transakciju serviss
  • legacy systems = senās/mantotās sistēmas
  • logging = notikumu reģistrācija, žurnalēšana
  • lookup = sameklēšana
  • message bean = ziņojumu EJB komponents
  • message-oriented = ziņojumorientēts
  • middleware = starpprogrammatūra
  • multitier = daudzslāņu-
  • namespace = vārdtelpa (vārdu sistēmas vārdu kopums); vārdapgabals
  • naming service = vārdu serviss (piemēram JNDI)
  • naming system = vārdu sistēma
  • nested transaction = salikta transakcija
  • parent directory = vecāku direktorija? (1 līmenis augstāk failu sistēmā)
  • permanent state = ilgstošs/permanents stāvoklis
  • persistent storage = pastāvīga atmiņa (faili un datubāzes atšķirībā no programmu mainīgajiem)
  • phantom read = fantomu nolasījums
  • programmatic transactions = programmējamas transakcijas
  • recoverable resource = atjaunojams resurss (pastāvīgās atmiņas, piemēram, datubāzes atjaunojamība pēc avārijas)
  • reference implementation = paraugimplementācija (piemēram, Sun standartam)
  • remotely = attālināti
  • robustness = robustums
  • rollback = atritināšana
  • session bean = sesijas EJB komponents
  • shutdown = (servera) apturēšana
  • skeleton = servera stabs/starpnieks/skeletiņš/svira
  • stub = klienta stabs/starpnieks/končiks/svira
  • test suite = testu virkne
  • to abort = pārtraukt (nejaukt ar "interrupt" - datorarhitektūrā); sk. "rollback"
  • to crash = avarēt
  • transaction manager = transakciju pārvaldnieks (koordinē transakciju komponentu sadarbību
  • transactional component = transakciju komponents (dalītas aplikācijas komponente, kura iniciē atomāras darbības)
  • unrepeatable read = neatkārtojams nolasījums