...
Code Block |
---|
|
package myphonebookpak;
import javax.ejb.*;
public abstract class MyPhonebookBean implements EntityBean {
public void ejbLoad() {}
public void ejbStore() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setEntityContext(EntityContext ctx) {}
public void unsetEntityContext() {}
public void ejbRemove() throws RemoveException {}
public void ejbPostCreate(String name, String number) throws javax.ejb.CreateException {}
public String ejbCreate(String name, String number) throws javax.ejb.CreateException {
setName(name);
setNumber(number);
return null; // ejbCreate must return null according to ejb spec. Why? Thats what asked to...
}
public abstract String getName() ;
public abstract void setName(String name) ;
public abstract String getNumber() ;
public abstract void setNumber(String number) ;
}
|
...
Code Block |
---|
|
package myphonebookpak;
import javax.ejb.*;
public interface MyPhonebookLocalHome extends EJBLocalHome {
public MyPhonebookLocal create() throws javax.ejb.CreateException;
public MyPhonebookLocal findByPrimaryKey(String pk) throws FinderException;
}
}
The findByPrimaryKey is like a SQL select statement (Select * from phonebook where name = ?).
This is the local interface called MyPhonebookLocal:
{
package myphonebookpak;
import javax.ejb.*;
public interface MyPhonebookLocal extends EJBLocalObject
{
public String getName() ;
public void setName(String name ) ;
public String getNumber() ;
public void setNumber(String number ) ;
}
|
...
Code Block |
---|
|
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" version="2.1">
<enterprise-beans>
<entity>
<description>An EJB named MyPhonebookBean</description>
<ejb-name>MyPhonebookBean</ejb-name>
<local-home>myphonebookpak.MyPhonebookLocalHome</local-home>
<local>myphonebookpak.MyPhonebookLocal</local>
<ejb-class>myphonebookpak.MyPhonebookBean</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>
<cmp-field>
<description>A persons name</description>
<field-name>name</field-name>
</cmp-field>
<cmp-field>
<description>A persons phone number</description>
<field-name>number</field-name>
</cmp-field>
<primkey-field>name</primkey-field>
</entity>
</enterprise-beans>
</ejb-jar>
|
...
Code Block |
---|
|
<?xml version="1.0" encoding="UTF-8"?>
<openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1"
xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.1"
xmlns:pkgen="http://www.openejb.org/xml/ns/pkgen-2.0"
xmlns:sec="http://geronimo.apache.org/xml/ns/security-1.1"
xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.1">
<sys:environment>
<sys:moduleId>
<sys:groupId>default</sys:groupId>
<sys:artifactId>MyPhonebookBean_openejb_artifactId</sys:artifactId>
<sys:version>1.0</sys:version>
<sys:type>car</sys:type>
</sys:moduleId>
</sys:environment>
<cmp-connection-factory>
<resource-link>PhonebookPool</resource-link>
</cmp-connection-factory>
<enterprise-beans>
<entity>
<ejb-name>MyPhonebookBean</ejb-name>
<local-jndi-name>MyPhonebookBean</local-jndi-name>
<table-name>phonebook</table-name>
<cmp-field-mapping>
<cmp-field-name>name</cmp-field-name>
<table-column>NAME</table-column>
</cmp-field-mapping>
<cmp-field-mapping>
<cmp-field-name>number</cmp-field-name>
<table-column>NUMBER</table-column>
</cmp-field-mapping>
</entity>
</enterprise-beans>
</openejb-jar>
|
...
Code Block |
---|
|
{
<%@ page contentType="text/html" import="myphonebookpak.*, javax.naming.* " %>
<%
String searchName = "";
if (request.getParameter("searchname") != null) {
searchName=request.getParameter("searchname");
}
%>
<html><head><title>Phonebook</title></head><body>
<form action="index.jsp">
<b>Search number</b>:<br>
Enter name: <input type="text" name="searchname" value="<%=searchName%>">
<input type="submit" value="Search">
(Test with <a href="index.jsp?searchname=Mattias">Mattias</a>)
</form>
<%
if (! searchName.equals("")) {
String number="";
try {
Context context = new InitialContext();
MyPhonebookLocalHome myPhonebookHomeLocal =
(MyPhonebookLocalHome)context.lookup("java:comp/env/ejb/MyPhonebookBean");
MyPhonebookLocal myPhonebookLocal =
myPhonebookHomeLocal.findByPrimaryKey(searchName);
number = myPhonebookLocal.getNumber();
}
catch (Exception e) {
number=e.toString();
}
out.println("This is the number returned from the EJB when seachring for '"+
searchName+"' : " + number);
}
%>
</body></html>
|
...
Code Block |
---|
|
{
MyPhonebookLocalHome myPhonebookHomeLocal =
(MyPhonebookLocalHome)context.lookup("java:comp/env/ejb/MyPhonebookBean");
MyPhonebookLocal myPhonebookLocal = myPhonebookHomeLocal.findByPrimaryKey(searchName);
number = myPhonebookLocal.getNumber();
}
|
...
Code Block |
---|
|
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.1"
xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.1"
xmlns:sec="http://geronimo.apache.org/xml/ns/security-1.1"
xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.1">
<sys:environment>
<sys:moduleId>
<sys:groupId>default</sys:groupId>
<sys:artifactId>MyPhonebookWeb</sys:artifactId>
<sys:version>1.0</sys:version>
<sys:type>car</sys:type>
</sys:moduleId>
</sys:environment>
<context-root>/myphonebook</context-root>
</web-app>
|
...
Code Block |
---|
|
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>
MyPhonebookWeb</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<ejb-local-ref>
<ejb-ref-name>ejb/MyPhonebookBean</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>myphonebookpak.MyPhonebookLocalHome</local-home>
<local>myphonebookpak.MyPhonebookLocal</local>
</ejb-local-ref>
</web-app>
|
This is similar to what we saw in the former time bean example.
Finally there is the deployment descriptors for the EAR-file, that in this case also includes a database pool xml-file. The best thing to do is to start with the database pool. In Geronimo console there a link in the left navigation called "Database Pools". From there, click the link "Using the Geronimo database pool wizard". You will end upp here:
http://localhost:8080/console/portal/services/services_jdbc/
Image Added
_rp_services_jdbc_row1_col1_p1_adapterDisplayName/
Image Removed
1_TranQL0x8Generic0x8JDBC0x8Resource0x8Adapter/_rp_services_jdbc_row1_col1_p1_mode/1_rdbms/
_pm_services_jdbc_row1_col1_p1/view/_st_services_jdbc_row1_col1_p1/normal/_pid/
services_jdbc_row1_col1_p1/_md_services_jdbc_row1_col1_p1/view
...
Code Block |
---|
|
<?xml version="1.0" encoding="UTF-8"?>
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.1">
<dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.1">
<dep:moduleId>
<dep:groupId>console.dbpool</dep:groupId>
<dep:artifactId>PhonebookPool</dep:artifactId>
<dep:version>1.0</dep:version>
<dep:type>rar</dep:type>
</dep:moduleId>
<dep:dependencies>
<dep:dependency>
<dep:groupId>org.apache.derby</dep:groupId>
<dep:artifactId>derby</dep:artifactId>
<dep:version>10.1.1.0</dep:version>
<dep:type>jar</dep:type>
</dep:dependency>
</dep:dependencies>
</dep:environment>
<resourceadapter>
<outbound-resourceadapter>
<connection-definition>
<connectionfactory-interface>javax.sql.DataSource</connectionfactory-interface>
<connectiondefinition-instance>
<name>PhonebookPool</name>
<config-property-setting name="Driver">org.apache.derby.jdbc.EmbeddedDriver</config-property-setting>
<config-property-setting name="UserName">app</config-property-setting>
<config-property-setting name="ConnectionURL">jdbc:derby:PhonebookDB</config-property-setting>
<connectionmanager>
<local-transaction/>
<single-pool>
<max-size>10</max-size>
<min-size>0</min-size>
<match-one/>
</single-pool>
</connectionmanager>
</connectiondefinition-instance>
</connection-definition>
</outbound-resourceadapter>
</resourceadapter>
</connector>
<!--
Here is a comment with the text from the wizard explaining how to use this pool file
Add to EAR: Instead of deploying as a top-level database pool, you can deploy this pool as part of an EAR.
To add a database pool to an EAR using this plan:
Copy and paste the plan to a file
Save the plan file to the top level of your EAR
Copy the RAR file from GERONIMO_HOME/\repository\tranql\tranql-connector\1.2\tranql-connector-1.2.rar to
the top level of your EAR
Create a META-INF/geronimo-application.xml file in your EAR that has a module entry like this
(substituting the correct RAR file name and plan file name):
<application
xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-1.0"
configId="MyApplication">
<module>
<connector>rar-file-name.rar</connector>
<alt-dd>plan-file-name.xml</alt-dd>
</module>
</application>
-->
|
...
Code Block |
---|
|
<?xml version="1.0" encoding="UTF-8"?>
<application id="Application_ID" version="1.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">
<display-name>MyphonebookEJBApp</display-name>
<module>
<ejb>myphonebook-ejb.jar</ejb>
</module>
<module>
<web>
<web-uri>myphonebook-web.war</web-uri>
<context-root>/myphonebook</context-root>
</web>
</module>
<module>
<connector>tranql-connector-1.2.rar</connector>
</module>
</application>
|
...
Code Block |
---|
|
<?xml version="1.0" encoding="UTF-8"?>
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.1">
<dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.1">
<dep:moduleId>
<dep:groupId>console.dbpool</dep:groupId>
<dep:artifactId>PhonebookPool</dep:artifactId>
<dep:version>1.0</dep:version>
<dep:type>rar</dep:type>
</dep:moduleId>
<dep:dependencies>
<dep:dependency>
<dep:groupId>mysql</dep:groupId>
<dep:artifactId>mysql-connector-java</dep:artifactId>
<dep:version>3.1.12</dep:version>
<dep:type>jar</dep:type>
</dep:dependency>
</dep:dependencies>
</dep:environment>
<resourceadapter>
<outbound-resourceadapter>
<connection-definition>
<connectionfactory-interface>javax.sql.DataSource</connectionfactory-interface>
<connectiondefinition-instance>
<name>PhonebookPool</name>
<config-property-setting name="Password">book</config-property-setting>
<config-property-setting name="Driver">com.mysql.jdbc.Driver</config-property-setting>
<config-property-setting name="UserName">phone</config-property-setting>
<config-property-setting
name="ConnectionURL">jdbc:mysql://localhost:3306/PhonebookDB</config-property-setting>
<connectionmanager>
<local-transaction/>
<single-pool>
<max-size>10</max-size>
<min-size>0</min-size>
<match-one/>
</single-pool>
</connectionmanager>
</connectiondefinition-instance>
</connection-definition>
</outbound-resourceadapter>
</resourceadapter>
</connector>
|
...