In the preceding step you created an entity bean that models a visit. That bean represents a row of visit data in the database. In this step, you'll create the session bean (another kind of EJB) that models visit tracking.
As described in the WebLogic Server topic, How Do Applications Use EJBs?, a session bean implements business logic and acts on behalf of the client. In the case of the application you're building with this tutorial, the client will be a test web page (and, by extension, you, the page's user). In order to meet its client's requests, the session bean you're about to create will know how to find a visitor by name, know how to increment the visit number, and so on.
In this section, you will create the VisitTrackerBean source files.
To Create VisitTrackerBean Source Files
- In the Project Explorer, expand VisitEJBProject>
src, right-click hello, then select New
> WebLogic Session Bean.
- In the New Session Bean dialog, in the File name
box, enter VisitTrackerBean, then click Finish.
As with the VisitBean entity bean, this new session bean
comes with a few annotations already entered for you. These are:
@Session— Defines the class-scope properties of
a session bean.
 |
 |
 |
 |
| Attribute |
Description |
ejbName |
Descriptive name of the session
bean. |
|
 |
 |
 |
 |
@JndiName — Specifies the local and remote JNDI
name of an EJB; that is, the JNDI name associated with its local and
remote interface. The attributes shown here in code include:
 |
 |
 |
 |
| Attribute |
Description |
remote |
Remote JNDI name of the EJB. |
|
 |
 |
 |
 |
@FileGeneration — Specifies the interface, compound
primary key, and value classes that are to be auto-generated during
build.
 |
 |
 |
 |
| Attribute |
Description |
localClass |
Whether to generate the local interface of the EJB.
|
localHome |
Whether to generate the local home interface of the
EJB. |
remoteClass |
Whether to generate the remote interface of the EJB. |
remoteHome |
Whether to generate the remote home interface of
the EJB. |
valueClass |
Specifies whether to generate the value class for
this EJB. |
|
 |
 |
 |
 |
- Add the following
import statements to support code you're
about to add.
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.ejb.EJBException;
import javax.ejb.FinderException;
import javax.ejb.CreateException;
import weblogic.ejbgen.EjbLocalRefs;
import weblogic.ejbgen.EjbLocalRef;
- Above the
@Session annotation, paste the following @EjbLocalRefs
annotation, along with the nested @EjbLocalRef annotation.
@EjbLocalRefs({
@EjbLocalRef(home = "hello.VisitBeanLocalHome",
jndiName = "ejb.VisitBeanLocalHome",
local = "hello.VisitBeanLocal",
name = "ejb/VisitBean",
type = Constants.RefType.ENTITY)
})
The following table describes the attributes you're setting.
 |
 |
 |
 |
| Attribute |
Description |
home |
Local home interface of the referenced EJB. |
jndiName |
Local JNDI name of the referenced EJB. |
local |
Local (business) interface of the referenced EJB. |
name |
Name used to reference the other bean. |
type |
EJB type of the referenced bean. |
|
 |
 |
 |
 |
- Add the following
visitHome field above the ejbCreate
method that was added for you. Your code will use this variable later to
create a VisitBean instance for a particular visitor.
private VisitBeanLocalHome visitHome;
- Edit the
ejbCreate method so that it looks like the following.
This code will retrieve a VisitBean instance.
public void ejbCreate()
{
try
{
javax.naming.Context initialContext = new InitialContext();
visitHome = (VisitBeanLocalHome) initialContext.lookup("java:comp/env/ejb/VisitBean");
} catch (NamingException ne)
{
throw new EJBException(ne);
}
}
- Beneath the
ejbCreate method code, add the following greetVisitor
method code.
public String greetVisitor(String visitorName)
{
VisitBeanLocal theVisit;
int visitNumber;
try
{
// Try to find the visitor in the database.
theVisit = visitHome.findByPrimaryKey(visitorName);
} catch (FinderException fe)
{
try
{
// If the visitor isn't in the database,
// create a new visitor with the name given.
visitHome.create(visitorName);
// Greet the new visitor.
return "Hello, " + visitorName + "!";
} catch (CreateException ce)
{
throw new EJBException(ce);
}
}
// Get the returning visitor's visit number and
// increment it from this visit.
visitNumber = theVisit.getVisitNumber();
theVisit.setVisitNumber(visitNumber + 1);
// Greet the returning visitor.
if (visitNumber == 1)
{
return "Hello again, " + visitorName + "!";
} else
{
return "Hello, " + visitorName + "! This is visit number "
+ theVisit.getVisitNumber() + ".";
}
}
- With a cursor in the
greetVisitor method code, locate the
RemoteMethod property in the Properties view.
- Right-click the RemoteMethod property, then click Add
Annotation. The
@RemoteMethod() annotation should
be added immediately preceding the greetVisitor method.
- Press Ctrl+S to save your work.
With code for your entity and session beans, you're ready to start testing them. You'll get set up to do this in the next step.