Software Terms Glossary
Terms Glossary
Design Patterns
Factory pattern (aka
Abstract factory pattern): a software design pattern that provides a way to encapsulate a group
of individual factories that have a common them. The client does not know (or
care) about which concrete objects it gets from each of these internal
factories since it uses only the generic interfaces of their products. This
pattern separates the details of implementation of a set of objects from its
general usage.
Factory Method pattern an object-oriented design pattern
(specifically, a creational pattern). It deals with the problem of creating
objects without specifying the exact cloass of objct that will be created. The
pattern handles the problem by defining a separate method for creating the
objects, whose subclasses can then override to specify the derived type of
product that will be created. The term factory
method is often used to refer to any method whose main purpose is the
creation of objects.
Singleton pattern a design pattern
that is used to retrict instantiation of a class to one object. This is useful
when exactly one object is needed to coordinate actions across the system.
Prototype pattern a creational design pattern
used when the type of object to create is determined by a prototypical instance,
which is cloned to produce new objects.
Domain model pattern a web of
interconnected objects, where each object represents some meaningful
individual, whether as large as a corporation or as small as a single line on
an order form.
Software Concepts
Persistence refers to the characteristic of
data that outlives the execution of the program that creatied it. Without this
capability, data only exists in RAM, and will be lost when the memory loses
power. Achieved in practice by storing data in non-volatile storage such as a
file system or relational database. Design patterns which solve the persistence
problem are container based persistence,
component based persistence, and the
Data Access Object model. Java examples include using serialization to store
Objects on disk or using JEE to store EJBs in a relational database.
Serialization (aka deflating,
marshalling): the
process of converting an object into a sequence of bits so that it can be
stored on a storage medium (such as a file or memory buffer) or transmitted
across a network connection link. When the resulting series of bits is reread
according to the serialization format, it can be used to create an identical
clone of the original object. The opposite operation is called deserialization, inflating and unmarshalling.
DAO Data Access Object: an object that provides an
abstract interface to some type of database or persistence mechanism, providing
some specific operations without exposing details of the database. This pattern
separates the public interface of the DAO (application data objects and data
types) from the implementation (DBMS, schema, …)
DI Dependency injection: the process of supplying an
external dependency to a software component. It is a specific form of Inversion
of Control (IOC) where the concern being inverted is the process of obtaining
the needed dependency. DI promotes loose coupling and convenient unit testing.
There are three ways an oject can get a reference to an external module: 1) interface injection, the exported module
provides an interface that its users must implement in order to get the
dependencies at runtime, 2) setter
injection, the dependent modue exposes a setter method which the framework
uses to inject the dependency, and 3) constructor
injection, the dependencies are provided through the class constructor.
IOC Inversion of Control: an abstract principle describing
an aspect of some software architecture designs in which the flow of control of
a system is inverted in comparison to the traditional architecture of software
libraries. Examples include event driven programming, or the use of call-back
methods to allow the caller of a method to determine specific procedures.
AOP Aspect Oriented
Programming: is a
programming paradigm that increases modularity by allowing the separation of
cross-cutting concerns, forming a basis for Aspect-oriented software
development. Logging is the archetypal example of a crosscutting concern
because a logging strategy necessarily affects every single logged part of the
system. Logging thereby crosscuts all logged classes and methods.
Domain Model a conceptual model of a system
which describes the various entities involved in that system and their
relationships. The domain model is created in order to document the key
concepts, and the domain-vocabulary of the system being modelled. The model
identifies the relationships among all major entities within the system, and
usually identifies their important methods and attributes.
Layered architecture Layering is
a way of organizing an application’s classes by concern. Layers communicate from top to bottom and a layer is
unaware of any other layers except for the one just below it. A typical layered
architecture uses three layers: presentation, business logic, persistence.
RELATIONAL DATABASE Concepts
Data independence the principle that a relational
database is not specific to a particular application. Data lives longer than
any application does.
DDL Data Definition
Language: subset
of the SQL language consisting of CREATE and ALTER statements for creating a
database schema.
DML Data Manipulation
Language: a
subset of the SQL language consisting of manipulation operations including
insertions, updates, and deletions.
UDT User Defined Types: a concept in SQL databases
allowing for users to define new non-trivial datatypes for use as database
columns. UDT support is one of a number of object-relational extensions to
traditional SQL. However, in practice, UDT is an obscure feature of most RDBMS
and is not portable between systems.
Surrogate key a primary key column with no
meaning to the user; i.e. a key that isn’t presented to the user and is only
used for identification of data. The main purpose of a surrogate key is to
eliminate any of the row’s data columns from serving as the key to the row’s
identity. Attaching the row’s identity to a field makes it difficult to change
the value of the field since it might be referenced as a foreign key by another
table.
Object Oriented Concepts
Object/relational paradigm
mismatch: the
idea that object-oriented programming objects and relational database
structures are fundamentally different and the clash between the two negatively
affects productivity. The mismatch incudes the following problems:
Granularity Problem: Java allows any number of
different levels of granularity of Classes, for example, coarse-grained Users,
fine-grained Addresses, and POJO String Zip Code. In contrast an RDBMS provides
only two levels of granularity: tables and columns.
Inheritance Problem: SQL does not provide a means of
defining supertables and subtables, hence there is no straightforward way to
duplicate the Java concept of inheritance from superclasses to subclasses
Polymorphism Problem:
A related problem is that of polymorphism. The Java concept is that an
object may be defined to have a reference to a superclass and be able to
reference any of the subclasses at runtime. SQL does not provide a means of
writing polymorphic queries. A database foreign key cannot refer to multiple
tables.
Identity Problem: Java’s definition of sameness differs
from SQL’s. In Java, two objects have the same identity if they occupy the same
memory location (a == b) or if their values are equal (a.equals(b)). In SQL, a
row’s identity in a table is determined by the primary key.
Association Problem: Association mapping and the
management of entity associations are central concepts in any object
persistence solution. Java represents associations using object references, but
in a relational database, an association is represented as a foreign key
column.Object references are navigational and inherently directional. Foreign
key associations are not directional. There is no concept of relational
navigation because you can create arbitrary associations with table joins. Java
associations can have many-to-many multiplicity. In a relational database,
multiplicity is one-to-one or one-to-many, unless you create a link table to
facilitate a many-to-many association.
Navigation Problem: In Java, you walk the object network to navigate from an object to associated
data (aUser.getBillingDetails().getAcctNum()). In a relational database, you
attempt to minimize the number of SQL queries to improve performance, so
typically you navigate by retrieving all data then navigating to the rows you
want. In Java, you locate the specific instance and then retrieve the data.
Modeling Problem: If you design a Java application
to match the limitations imposed by a relational database, you lose some of the
advantages of object orientation. However, as we’ve seen, there is often no
practical way to design a relational database schema to mirror an existing
object oriented application.
ORM Object-relational
mapping (aka O/RM, O/R mapping): programming technique for converting data between
incompatible type systems in relational databases and object-oriented
programming languages
Factory object In an object-oriented programming
language, a Factory object is an
object for creating other objects. It is an abstraction of a constructor and
can be used to implement various allocation schemes, such as the singleton
pattern. A factory object typically has a method for every kind of object it is
capable of creating. These methods optionally accept parameters defining how
the object I created, and then return the created object.
Polymorphism a programming language feature that
allows values of different data types to be handled using a single uniform
interface. In object-oriented programming, polymorphism is a concept wherein a
name may denote instances of many different classes as long as they are related
by some common super class.
OODB Object Oriented Database
Systems (OODBMS): Object
oriented databases were an attempt to eliminate the object relational paradigm
mismatch by designing a database to fit the object-oriented model. Object
oriented databases have not been widely adopted and it is not likely they wll
be, mostly due to predefined deployment environments and the common requirement
for data independence.
Software Platforms & Applications
Web Server a computer program that is
responsible for accepting HTTP requests from clients (such as web browsers) and
serving them HTTP responses along with optional data contents (such as HTML
documents and linked objects). Top 5 web servers are Apache, MS IIS, Google
GWS, lighttpd, nginx, and Oversee.
Application Server a server that hosts an API to
expose business logic and business processes for use by third-party
applications. Sometimes used to refer to a Java EE application server,
including JBoss (Red Hat), WebSphere Application Server (IBM), Sybase Enterprise Application Server
(Sybase), WebLogic Server (BEA), Jrun (Adobe), Apache Geronimo (Apache Software Foundation), Oracle OC4J (Oracle), Sun
Java System Application Server (Sun), SAP
Netweaver AS (SAP), and Glassfish
Application Server (based on the Sun Java System Application Server).
Microsoft’s contribution to application servers is the .NET Framework.
Servlet Container (aka Web Container, Web Engine): a specialized web server that supports Servlet execution, combining the basic functionality of a web server with certain Java/Servlet specific optimizations and extensions, and the ability to translate specific URLs into Servlet requests. Servlet containers include: Apache Tomcat (ASF), Jetty, BEA WebLogic Server (aka WebLogic Express), Borland Enterprise Server, GlassFish, Java System Application Server (Sun), JBoss, JRun (Adobe), LiteWebServer, Oracle Application Server, Orion Application Server (IronFlare), WebObjects (Apple), WebSphere (IBM), Netweaver (SAP).
Apache Apache HTTP Server: an open source, free web server
developed and maintained by an open community of developers under the name
Apache Software Foudnation. The most popular HTTP server on the web, serving
over 51% of all websites. http://www.apache.org.
JBoss JBoss application
server: a free,
open source Java EE-based application server. The JBoss application server is
cross-platform: usable on any OS that Java supports. http://www.jboss.org.
Tomcat Apache Tomcat: a servlet container deployed by the Apache
Software Foundation. It implements the Java Servlet and JavaServer Pages (JSP)
specifications, and provides a pure Java HTTP web server environment for Java
code to run.
LAMP Lamp web server
application stack: Linux, Apache, MySQL/mSQL,
Php/Perl/Python/Ruby.
AndroMDA a tool that generates POJO source
code from UML diagram-files.
Java
POJO Plain Old Java Object: an ordinary Java Object, not a
special object.
Reflection the Java Reflection API allows a Java
application to get the definition of classes and operate on them at runtime
without having them available at compile time. That allows the easy creation of
applications that wouldn’t otherwise be possible. For example, you can use the
Reflection API to inspect objects, browse classes, and create callback methods,
such as event handlers, without extending a specific class or implementing an
interface. Hibernate uses reflection to create Java Objects that have been
established as mapping to database entities.
Servlet Java programming language objects that dynamically process requests and construct responses. Servlets are the Java counterpart to dynamic Web content technologies such as PHP, CGI, and ASP.NET. Servlets can maintain state across server transactions via HTTP cookies, session varialbes or URL rewriting. Compiling a JSP generates a Servlet.
SLF4J Simple Logging Façade
for Java: various
logging APIs allowing the end-user to plug in the desired implementation at
deployment tiem. Includes an advanced abstraction of various logging systems,
including JDK 1.4 logging, log4j and
logback. http://www.slf4j.org
J2ME Java Platform, Micro
Edition (aka Java ME): specification of a subset of the Java platform aimed at providing a
certified collection of Java APIs for the development of software for tiny,
small and resource-constrained devices (e.g. cell phones, PDAs, set-top boxes).
EJB
EJB 3.0 Reinvention of EJB which eliminated virtually
all complaints with the original version and EJB 2, and made EJB a practical
alternative to Spring.
JPA Java Persistence API: a Java programming language
framework that allows developers to manager relational data in Java SE and Java
EE applications.
JTA Java Transaction API: one of the Java EE APIs allowing
distributed transactions to be done across multiple XA resources. JTA provides
for demarcation of transaction boundaries, and X/Open XA API allowing resources
to participate in transactions.
JDBC Java Database
Connectivity API: how
Java issues SQL statements to the database.
JNDI Java Naming and
Directory Interface:
a Java API for a directory service that allows Java software clients to discover
and look up data and objects via a name. The API provides a mechanism for
binding an object to a name, a directory lookup interface that allows general
queries, an event interface that allows clients to determine when directory
entries have been modified, and LDAP extensions.
JMX Java Management
Extensions: a Java technology that supplies tools
for managing and monitoring applications, system objects, devices and
service-oriented networks. Those resources are represented by objects called
MBeans (managed beans). In the API, classes can be dynamically loaded and
instantiated.
Entity Bean a type of Enterprise JavaBean (EJB3.0), a
server-side Java EE component, that represents persistent data maintained in a
database. An entity bean can manage its own persistence (Bean managed
persistence) or can delegate this function to its EJB Container (Container
managed persistence). An entity bean is identified by a primary key. If the
container in which an entity bean is hosted crashes, the entity bean, its
primary key, and any remote references survive the crash.
Session Bean a type of Enterprise Bean. In the
Java EE architecture, the other two types are Entity Beans and Message-driven
beans. Contrary to Entity Beans which represent persistent data maintained in a
database, a Session Bean implements a business task and is hosted by an EJB
container. A Session Bean is created by a client and usually exists only for
the duration of a single client-server session. A session bean performs
operations, such as calculations or database access, for the client. Although a
session bean can be transactional, it is not recoverable should a system crash
occur. Session bean objects either can be stateless or can maintain
conversational state across methods and transactions. If a session bean
maintains state, then the EJB container manages this state if the object must
be removed from memory. However, the session bean object itself must manage its
own persistent data.
EntityManager Interface
used to interact with the persistence context. An EntityManager instance is
associated with a persistence context. A persistence context is a set of entity
instances in which for any persistent entity identity there is a unique entity
instance. Within the persistence context, the entity instances and their
lifecycle are managed. This interface defines the methods that are used to
interact with the persistence context. The EntityManager API is used to create
and remove persistent entity instances, to find entities by their primary key,
and to query over entities. The set of entities that can be managed by a given
EntityManager instance is defined by a persistence unit. A persistence unit
defines the set of all classes that are related or grouped by the application,
and which must be colocated in their mapping to a single database.
JSF Navigation Rule Java Server Faces uses navigation
rules established in the application configuration file to determine the page
flow in the application. For simple applications Seam lets you return the JSF
page name as the outcome of a method, eliminating the requirement for a
navigation rule.
Facelets JavaServer Faces View
Definition Framework: View page for a Seam application, an alternative to JSP – supports
JSF.
Hibernate
Hibernate a free, open source ORM library
for Java, providing a framework for mapping an object oriented domain model to
a traditional relational database. It replaces direct persistence-related
database accesses with high-level object handling functions. Hibernate delivers
database portability to all supported SQL databases with very little
performance overhead. Some benefits of using ORM and Hibernate are:
Productivity: Hibernate eliminates the grunt work of repetitive and redundant SQL
queries, allowing developers to focus on the business problems.
Maintainability: Fewer lines of code make a system more understandable and easier to
refactor. Also, ORM provides a buffer between the object model and the
relational model reducing the number of minor changes that must be made to each
model to accommodate changes to the other.
Performance: Hibernate allows many optimzations to be used all the time across all
database platforms without requiring hand-tuning optimization.
Vendor
Hibernate Configuration File typically an XML file named hibernate.cfg.xml which specifies
database connection info, JDBC connection pool info, SQL variant (dialect),
session context management, caching, mapping resource files, and other options.
The file configures Hibernate’s SessionFactory
– a global factory responsible for a particular database. Multiple databases
require multiple <session-factory> configurations, usually in separate
configuration files. The file needs to reside in the root of the classpath, on
startup.
Hibernate Mapping File typically
an xml file which tells Hibernate what table in the database it has to access
and what columns in that table it should use, along with the corresponding
mappings to Java classes and variables. Usually there is a separate mapping
file for each table/class. By convention, each mapping file is named <<Class>>.hbm.xml.
Hibernate Mapping Types converter types
within Hibernate that are not Java data types and not SQL database types. These
types can translate from Java to SQL data types and vice versa. A mapping file
may specify the type attribute for any given element. If an element does not
have a type attribute, then Hibernate will try to determine the correct type
conversion.
HQL Hibernate Query
Language: object-oriented
query language for retrieval and management of data in Hibernate.
Open Session in View a Hibernate pattern in which the
Hibernate session is kept open until the application view has been rendered.
This is one method of solving a typical web (JSP) view related issue: the view
is rendered after the main logic of the action has been completed and the
database transaction has ended, resulting in detached objects and unloaded
collections (potentially leading to a closed-session LazyInitializationException).
Transient state an object is transient if it has
just been instantiated using the new operator and is not associated with a
Hibernate Session. It has no persistence.
Persistent state a persistent instance has a
representation in the database and an identifier value. It might just have been
saved or loaded, however it is in the scope of a Session. Hibernate will detect any changes
made to an object in persistent state and synchronize the state with the
database when the unit of work completes.
Detached state a Hibernate Java object that has
been persistent, but its Session has been closed. The reference to the object
is still valid, and the detached instance might even be modified in this state.
A detached instance can be reattached to a new Session a later point in time,
making it persistent again. This feature enables a programming model for long
running units of work that require user-think time.
Session single-threaded nonshared object
that represents a particular unit of work with the database. It has the persistence
manager API you call to load and store objects.
Transaction There are four options for a
transaction API for setting transaction boundaries programmatically: Hibernate
Transaction API, JDBC transaction demarcation, JTA interface, container-managed
transactions with EJBs.
Query The Query interface allows you to
create queries, bind arguments to placeholders in the query, and execute the
query in various ways.
Automatic dirty checking a feature that saves the
programmer the effort of explicitly asking Hibernate to update the database
when the state of any object is modified inside a unit of work.
Cascading save a feature that saves the
programmer the effort of explicitly making a new obect persistent by calling
save(), as long as it’s reachable by an already persistent interface.
Transacational write-behind a sophisticated algorithm to
determine an efficient ordering that avoids database foreign key constraint
violations but is still sufficiently predictable to the user.
Spring
Spring Framework open source application
framework for the Java platform and .NET platform. It is popular in the Java
community as a replacement for, alternative to, or addition to the Enterprise
JavaBean (EJB3.0) model and was developed initially as a reaction against
complexities of the original EJB.


Great info.I like all your post.I will keep visiting this blog very often.It is good to see you verbalize from the heart and your clarity on this important subject can be easily observed..
Reply to this