Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

Corresponding openejb-jar.xml defines Geronimo specific features of EJBs. It has both EJB information and their relationships. In addition, it gives a link to the database pool of the application. Entity Beans in the application are dependent on this pool. Also note that the final part of this file defines a 1-N Container Managed Relation (CMR) between Customer and Account Entity Beans.

Code Block
xml
borderStylesolid
titleopenejb-jar.xml
borderStylesolid
xml
<?xml version="1.0" encoding="UTF-8"?>
<openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1">
	<dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.1">
		<dep:moduleId>
			<dep:groupId>default</dep:groupId>
			<dep:artifactId>BankEJB</dep:artifactId>
			<dep:version>1.0</dep:version>
			<dep:type>car</dep:type>
		</dep:moduleId>
		<dep:dependencies/>
		<dep:hidden-classes/>
		<dep:non-overridable-classes/>
	</dep:environment>
	<cmp-connection-factory>
		<resource-link>BankPool</resource-link>
	</cmp-connection-factory>
	<enterprise-beans>
		<session>
			<ejb-name>BankManagerFacadeBean</ejb-name>
			<jndi-name>org.apache.geronimo.samples.bank.ejb.BankManagerFacadeBean</jndi-name>
			<ejb-ref>
				<ref-name>ejb/Customer</ref-name>
				<ejb-link>Customer</ejb-link>
			</ejb-ref>
			<ejb-ref>
				<ref-name>ejb/Account</ref-name>
				<ejb-link>Account</ejb-link>
			</ejb-ref>
			<ejb-ref>
				<ref-name>ejb/ExchangeRate</ref-name>
				<ejb-link>ExchangeRate</ejb-link>
			</ejb-ref>
		</session>
	  	
		<entity>
			<ejb-name>Account</ejb-name>
			<local-jndi-name>AccountLocalEntity</local-jndi-name>
			<table-name>Account</table-name>
			
			<cmp-field-mapping>
				<cmp-field-name>accountNumber</cmp-field-name>
				<table-column>ACC_NO</table-column>
			</cmp-field-mapping>
			
			<cmp-field-mapping>
				<cmp-field-name>accountType</cmp-field-name>
				<table-column>ACC_TYPE</table-column>
			</cmp-field-mapping>
			
			<cmp-field-mapping>
				<cmp-field-name>customer</cmp-field-name>
				<table-column>CUSTID_FK</table-column>
			</cmp-field-mapping>
			
			<cmp-field-mapping>
				<cmp-field-name>balance</cmp-field-name>
				<table-column>BALANCE</table-column>
			</cmp-field-mapping>
			
			<resource-ref>
				<ref-name>jdbc/BankDataSource</ref-name>
				<resource-link>BankPool</resource-link>
			</resource-ref>
		</entity>
	  	
		<entity>
			<ejb-name>Customer</ejb-name>
			<local-jndi-name>CustomerLocalEntity</local-jndi-name>
			<table-name>Customer</table-name>
			
			<cmp-field-mapping>
				<cmp-field-name>customerId</cmp-field-name>
				<table-column>CUST_ID</table-column>
			</cmp-field-mapping>
			
			<cmp-field-mapping>
				<cmp-field-name>customerName</cmp-field-name>
				<table-column>CUST_NAME</table-column>
			</cmp-field-mapping>
			
			<resource-ref>
				<ref-name>jdbc/BankDataSource</ref-name>
				<resource-link>BankPool</resource-link>
			</resource-ref>
		</entity>
	  	
		<entity>
			<ejb-name>ExchangeRate</ejb-name>
			<local-jndi-name>ExchangeRate</local-jndi-name>
			<resource-ref>
				<ref-name>jdbc/BankDataSource</ref-name>
				<resource-link>BankPool</resource-link>
			</resource-ref>
		</entity>
	</enterprise-beans>

	<relationships>
		<ejb-relation>
			<ejb-relation-name>Customer-Account</ejb-relation-name>
			<ejb-relationship-role>
				<ejb-relationship-role-name>Account-to-Customer</ejb-relationship-role-name>
				<relationship-role-source>
					<ejb-name>Account</ejb-name>
				</relationship-role-source>
				<cmr-field>
					<cmr-field-name>customer</cmr-field-name>
				</cmr-field>
				<foreign-key-column-on-source/>
				<role-mapping>
					<cmr-field-mapping>
						<key-column>CUST_ID</key-column>
						<foreign-key-column>CUSTID_FK</foreign-key-column>
					</cmr-field-mapping>
				</role-mapping>
			</ejb-relationship-role>
		</ejb-relation>

	</relationships>

</openejb-jar>

BankPool.xml is a typical database pool configuration file, which will be connected to the BankDB defined through the inbuilt Derby database. Entity beans of the application refer the defined database via this configuration file.

Code Block
borderStyle
xmlsolid
titleBankPool.xml
borderStylesolid
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>BankPool</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: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>BankPool</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:BankDB</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>

geronimo-application.xml and application.xml define the main components of the EAR. Both EJB component and Web archive information are given in these files. Additionally, these two XML files define application scoped database connection pool with tranql-connector-1.2.rar and BankPool.xml.

Code Block
borderStyle
xmlsolid
titlegeronimo-application.xml
borderStylesolid
xml
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-1.1">
	<dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.1">
		<dep:moduleId>
			<dep:groupId>default</dep:groupId>
			<dep:artifactId>Bank</dep:artifactId>
			<dep:version>1.0</dep:version>
			<dep:type>car</dep:type>
		</dep:moduleId>
		<dep:dependencies/>
		<dep:hidden-classes/>
		<dep:non-overridable-classes/>
	</dep:environment>
	<module>
		<connector>tranql-connector-1.2.rar</connector>
		<alt-dd>BankPool.xml</alt-dd>
	</module>
</application>
Code Block
xmlborderStylesolid
titleapplication.xml
borderStylesolid
xml
<?xml version="1.0" encoding="UTF-8"?>
<application
		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"
		version="1.4">
	<module>
		<ejb>BankEJB.jar</ejb>
	</module>
	<module>
		<web>
			<web-uri>BankWeb.war</web-uri>
			<context-root>/Bank</context-root>
		</web>
	</module>
	<module>
		<connector>tranql-connector-1.2.rar</connector>
	</module>
</application>

Since Banking Web Application is a part of EAR, the BankManagerFacade Session Bean will be referred as a local interface. Those additional configuration information required for the EJB reference can be found in the web.xml.

Code Block
xmlborderStylesolid
titleweb.xml
borderStylesolid
xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
		version="2.4">
	
	<welcome-file-list>
		<welcome-file>/jsp/index.jsp</welcome-file>
	</welcome-file-list>

	<servlet>
		<display-name>CustomerServiceServlet</display-name>
		<servlet-name>CustomerServiceServlet</servlet-name>
		<servlet-class>org.apache.geronimo.samples.bank.web.CustomerServiceServlet</servlet-class>
	</servlet>
	
	<servlet>
		<display-name>CommonServiceServlet</display-name>
		<servlet-name>CommonServiceServlet</servlet-name>
		<servlet-class>org.apache.geronimo.samples.bank.web.CommonServiceServlet</servlet-class>
	</servlet>
  	
	<servlet-mapping>
		<servlet-name>CustomerServiceServlet</servlet-name>
		<url-pattern>/customer_info</url-pattern>
	</servlet-mapping>
	
	<servlet-mapping>
		<servlet-name>CommonServiceServlet</servlet-name>
		<url-pattern>/exchange_rates</url-pattern>
	</servlet-mapping>
	
	
	<!-- To refer local EJB's  -->
	<ejb-local-ref>
		<ejb-ref-name>ejb/BankManagerFacade</ejb-ref-name>
		<ejb-ref-type>Session</ejb-ref-type>
		<local-home>org.apache.geronimo.samples.bank.ejb.BankManagerFacadeHomeLocal</local-home>
		<local>org.apache.geronimo.samples.bank.ejb.BankManagerFacadeLocal</local>
		<ejb-link>BankManagerFacadeBean</ejb-link>
	</ejb-local-ref>

</web-app>

Account Balance Modifier swing application refers the same BankManagerFacade Session bean as a remotely refer EJB. It's configuration information can be found in the bank_client.properties file.

Code Block
xmlborderStylesolid
titlebank_client.properties
borderStylesolid
xml
java.naming.factory.initial=org.openejb.client.RemoteInitialContextFactory
java.naming.provider.url=localhost:4201
java.naming.security.principal=system
java.naming.security.credentials=manager
jndi.bankManager=org.apache.geronimo.samples.bank.ejb.BankManagerFacadeBean

...

After starting Apache Geronimo log into the console and follow the given steps to create the BankDB.

solid
No Format
borderStyle
titleBankDB.sql
borderStylesolid
CREATE TABLE customer(
	CUST_ID VARCHAR(15) PRIMARY KEY,
	CUST_NAME VARCHAR(40)	
);

CREATE TABLE account(
	ACC_NO VARCHAR(15) PRIMARY KEY,
	ACC_TYPE VARCHAR(10),
	BALANCE DOUBLE,
	CUSTID_FK VARCHAR(15),
	FOREIGN KEY (CUSTID_FK) REFERENCES customer
);

CREATE TABLE exchange_rate(
	RATE_ID VARCHAR(10) PRIMARY KEY,
	CURRENCY VARCHAR(10),
	RATE DOUBLE
);

INSERT INTO customer(CUST_ID,CUST_NAME) VALUES('12345','John Doe');
INSERT INTO account(ACC_NO,ACC_TYPE,BALANCE,CUSTID_FK) VALUES('1234567890','Savings',1005.35,'12345');
INSERT INTO account(ACC_NO,ACC_TYPE,BALANCE,CUSTID_FK) VALUES('2345678901','Current',999.95,'12345');

INSERT INTO exchange_rate(RATE_ID,CURRENCY,RATE) VALUES('001','EURO',0.812);
INSERT INTO exchange_rate(RATE_ID,CURRENCY,RATE) VALUES('002','YEN',111.15);
INSERT INTO exchange_rate(RATE_ID,CURRENCY,RATE) VALUES('003','SLR',99.18);

...