Chapter 3.

Creating a Stateless Session Bean
This chapter covers how to create a stateless session EJB component. This bean will be responsible for authenticating the user by communicating with the database using Data Access Object (DAO) which encapsulates Java Database Connectivity (JDBC) code. A DAO has all attributes (fields) and behavior (methods) corresponding to the bean it is being used for.

All customers, supplier and manager of MyStore have been assigned a unique username and userid to access services of MyStore, but in order to access these services all these entities have to first login into the system (MyStore). The method for authentication is named loginUser, which takes two String parameters, username and password and returns the userID if authentication is successful.
Note : This method loginUser is a business method, normally business methods carry out operations or processing on values EJB components. From clients perspective, clients can see only business methods and invoke them on bean.
Tasks :
Create a J2EE project named MyStore.
Create a Stateless Session Bean named StoreAccess.
Add a business method in bean named loginUser with the following signature
public String loginUser (String username, String password)
Create a DAO named StoreAccessDAOImpl under package au.com.tusc.dao. Generate the DAO interface.
Implement the method named loginUser, generated in DAO interface, in StoreAccessDAOImpl. Method signature is
public String loginUser (String username, String password)
Add callback methods and implement them.
Deploy StoreAccess bean.
Create your test client named SessionClient under package au.com.tusc.client.
Run your client and test the bean.
Create J2EE Project :
Now, lets start to write our first component of this tutorial.
Go to File > New > LombozJ2EE Project, project creation wizard will pop up.
Insert Project Name MyStore > Next .
Under Java Settings Check source, should be MyStore/src , libraries pointing to $JAVA_HOME > Go Next as shown in fig below.
Note: This step is shown in chapter1, as there is a bug in eclipse 2.1, so its important that you check your library settings are right.

Under Create J2EE Module, select Web Modules tab > Add.., enter Module name as OnlineStore > OK as shown in figure below.

Under Create J2EE Module, select EJB Modules tab > Add.., enter Module name as MyStoreMgr > OK .
Under Create J2EE Module, select Targeted Servers tab > Select JBOSS 3.2.1 ALL > Add.. > Finish.
Create Stateless Bean :
Go To Package Explorer > Expand Mystore (project) node > select src, right click and menu will pop up.
On pop up menu > New > Lomboz EJB Creation Wizard.
Enter package name au.com.tusc.session, bean name StoreAccess and select bean type as stateless > Finish.
This will create a package named au.com.tusc.session under src and StoreAccessBean under that package as shown in the figure below.

As we can see from the figure below it has created a class level tag @ejb.bean, which has assigned the bean type, name and its JNDI name which will be generated in Home interface. This tag will also generate deployment descriptors in ejb-jar.xml and jboss.xml file as well once you generate your EJB classes, which is covered later on in this chapter.

Note: It will generate the bean name, jndi-name and type of bean in the file. Also, the name of file is appended with word 'Bean' as you gave the name of the bean as StoreAccess only. Again, be careful with naming conventions, specifying the bean name only in the wizard without adding the word 'Bean' to the name as the wizard appends that for you.
Expand MyStoreMgr/META-INF node under Package Explorer. You will find there are seven files which are generated by Lomboz using Xdoclet as shown in the figure below.

Now we are going to generate all the interfaces including Home, Remote, DAO and other helper classes. We will explain why later on, but for the time being just follow the steps.
But before we get too excited, there are a few concepts to cover here.
Go to MyStoreMgr/META-INF > select and open ejbGenerate.xml.
Note: Lomboz uses this file to generate required interfaces and helper classes, so in the event that you have special needs then you will have to customize this file. See ejbdoclet under the Xdoclet documentation.
'ejbGenerate.xml' file is generated only once when you create your EJB module. So any changes made in this file will be reflected even if you modify your bean class and generate your classes again and again.
As we can see from the code snippet of file shown in figure at right, there are following tags defined. <dataobject/> is defined for generating data Objects for holding values of EJB component's persistent fields, which correspond to columns in the associated table in the database. Note: <dataobject/> has been deprecated in favour of Value Object which is more powerful in terms of relationships (1-1, 1-n and n-m). <utilobject/> Creates method for generating GUID and for accessing Remote and Local Home objects. <remoteinterface/> Generates remote interfaces for EJBs. <localinterface/> Generates local interfaces for EJBs. <homeinterface /> Generates remote home interfaces for EJBs. <localhomeinterface/>Generates local home interfaces for EJBs. <entitypk/>Generates primary key classes for entity EJBs. <entitybmp/>Creates entity bean classes for BMP entity EJBs. <entitycmp/> <session/> Generates session bean class. Note : There is no tag for generating a DAO. So, we have to include this <dao/> tag. For details, please refer ejbdoclet under Xdoclet documentation.
|