Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
java
java
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
java
java
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
xml
<?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
xml
<?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
java
java
{
<%@ 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
java
java
{
	MyPhonebookLocalHome myPhonebookHomeLocal = 
            (MyPhonebookLocalHome)context.lookup("java:comp/env/ejb/MyPhonebookBean");
	MyPhonebookLocal myPhonebookLocal = myPhonebookHomeLocal.findByPrimaryKey(searchName);
	number =  myPhonebookLocal.getNumber();
}

...

Code Block
xml
xml
<?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
xml
<?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
xml
<?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
xml
<?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
xml
<?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>

...