### Eclipse Workspace Patch 1.0
#P daytrader-ejb
Index: src/main/java/org/apache/geronimo/samples/daytrader/OrderDataBean_.java
===================================================================
--- src/main/java/org/apache/geronimo/samples/daytrader/OrderDataBean_.java	(revision 0)
+++ src/main/java/org/apache/geronimo/samples/daytrader/OrderDataBean_.java	(revision 0)
@@ -0,0 +1,26 @@
+/** 
+ *  Generated by OpenJPA MetaModel Generator Tool.
+**/
+
+package org.apache.geronimo.samples.daytrader;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import javax.persistence.metamodel.SingularAttribute;
+
+@javax.persistence.metamodel.StaticMetamodel
+(value=org.apache.geronimo.samples.daytrader.OrderDataBean.class)
+@javax.annotation.Generated
+(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",date="Mon May 03 09:26:18 CDT 2010")
+public class OrderDataBean_ {
+    public static volatile SingularAttribute<OrderDataBean,AccountDataBean> account;
+    public static volatile SingularAttribute<OrderDataBean,Date> completionDate;
+    public static volatile SingularAttribute<OrderDataBean,Date> openDate;
+    public static volatile SingularAttribute<OrderDataBean,BigDecimal> orderFee;
+    public static volatile SingularAttribute<OrderDataBean,Integer> orderID;
+    public static volatile SingularAttribute<OrderDataBean,String> orderStatus;
+    public static volatile SingularAttribute<OrderDataBean,String> orderType;
+    public static volatile SingularAttribute<OrderDataBean,BigDecimal> price;
+    public static volatile SingularAttribute<OrderDataBean,Double> quantity;
+    public static volatile SingularAttribute<OrderDataBean,QuoteDataBean> quote;
+}

Property changes on: src\main\java\org\apache\geronimo\samples\daytrader\OrderDataBean_.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: src/main/java/org/apache/geronimo/samples/daytrader/AccountProfileDataBean_.java
===================================================================
--- src/main/java/org/apache/geronimo/samples/daytrader/AccountProfileDataBean_.java	(revision 0)
+++ src/main/java/org/apache/geronimo/samples/daytrader/AccountProfileDataBean_.java	(revision 0)
@@ -0,0 +1,21 @@
+/** 
+ *  Generated by OpenJPA MetaModel Generator Tool.
+**/
+
+package org.apache.geronimo.samples.daytrader;
+
+import javax.persistence.metamodel.SingularAttribute;
+
+@javax.persistence.metamodel.StaticMetamodel
+(value=org.apache.geronimo.samples.daytrader.AccountProfileDataBean.class)
+@javax.annotation.Generated
+(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",date="Mon May 03 10:10:27 CDT 2010")
+public class AccountProfileDataBean_ {
+    public static volatile SingularAttribute<AccountProfileDataBean,AccountDataBean> account;
+    public static volatile SingularAttribute<AccountProfileDataBean,String> address;
+    public static volatile SingularAttribute<AccountProfileDataBean,String> creditCard;
+    public static volatile SingularAttribute<AccountProfileDataBean,String> email;
+    public static volatile SingularAttribute<AccountProfileDataBean,String> fullName;
+    public static volatile SingularAttribute<AccountProfileDataBean,String> passwd;
+    public static volatile SingularAttribute<AccountProfileDataBean,String> userID;
+}

Property changes on: src\main\java\org\apache\geronimo\samples\daytrader\AccountProfileDataBean_.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: src/main/java/org/apache/geronimo/samples/daytrader/TradeServices.java
===================================================================
--- src/main/java/org/apache/geronimo/samples/daytrader/TradeServices.java	(revision 935418)
+++ src/main/java/org/apache/geronimo/samples/daytrader/TradeServices.java	(working copy)
@@ -18,8 +18,6 @@
 
 
 import java.math.BigDecimal;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
 import java.util.Collection;
 
 /**
@@ -33,7 +31,7 @@
   * @see TradeDirect
   *
   */ 
-public interface TradeServices extends Remote {
+public interface TradeServices {
 
    /**
 	 * Compute and return a snapshot of the current market conditions
@@ -44,7 +42,7 @@
 	 *
 	 * @return A snapshot of the current market summary
 	 */
-	public MarketSummaryDataBean getMarketSummary() throws Exception, RemoteException;
+	public MarketSummaryDataBean getMarketSummary() throws Exception;
 
 
    /**
@@ -61,7 +59,7 @@
 	 */
 
 
-	public OrderDataBean buy(String userID, String symbol, double quantity, int orderProcessingMode) throws Exception, RemoteException;
+	public OrderDataBean buy(String userID, String symbol, double quantity, int orderProcessingMode) throws Exception;
 
    /**
 	 * Sell a stock holding and removed the holding for the given user.
@@ -72,7 +70,7 @@
  	 * @param holdingID the users holding to be sold
 	 * @return OrderDataBean providing the status of the newly created sell order
 	 */
-	public OrderDataBean sell(String userID, Integer holdingID, int orderProcessingMode) throws Exception, RemoteException;
+	public OrderDataBean sell(String userID, Integer holdingID, int orderProcessingMode) throws Exception;
 
 
    /**
@@ -87,7 +85,7 @@
 	 * @param orderID the Order being queued for processing
 	 * @return OrderDataBean providing the status of the completed order
 	 */
-	public void queueOrder(Integer orderID, boolean twoPhase) throws Exception, RemoteException;
+	public void queueOrder(Integer orderID, boolean twoPhase) throws Exception;
 
    /**
 	 * Complete the Order identefied by orderID
@@ -102,7 +100,7 @@
 	 * @param orderID the Order to complete
 	 * @return OrderDataBean providing the status of the completed order
 	 */
-	public OrderDataBean completeOrder(Integer orderID, boolean twoPhase) throws Exception, RemoteException;
+	public OrderDataBean completeOrder(Integer orderID, boolean twoPhase) throws Exception;
 	
    /**
 	 * Cancel the Order identefied by orderID
@@ -113,7 +111,7 @@
 	 * @param orderID the Order to complete
 	 * @return OrderDataBean providing the status of the completed order
 	 */
-	public void cancelOrder(Integer orderID, boolean twoPhase) throws Exception, RemoteException;
+	public void cancelOrder(Integer orderID, boolean twoPhase) throws Exception;
 
 
    /**
@@ -123,7 +121,7 @@
 	 * @param orderID the order which has completed
 	 * 
 	 */
-	public void orderCompleted(String userID, Integer orderID) throws Exception, RemoteException;
+	public void orderCompleted(String userID, Integer orderID) throws Exception;
 	
 
    /**
@@ -132,7 +130,7 @@
 	 * @param userID the customer account to retrieve orders for
 	 * @return Collection OrderDataBeans providing detailed order information
 	 */
-	public Collection getOrders(String userID) throws Exception, RemoteException;
+	public Collection getOrders(String userID) throws Exception;
 
    /**
 	 * Get the collection of completed orders for a given account that need to be alerted to the user
@@ -140,7 +138,7 @@
 	 * @param userID the customer account to retrieve orders for
 	 * @return Collection OrderDataBeans providing detailed order information
 	 */
-	public Collection getClosedOrders(String userID) throws Exception, RemoteException;
+	public Collection getClosedOrders(String userID) throws Exception;
 
 
 	/**
@@ -151,7 +149,7 @@
 	 * @param details a short description of the stock or company
 	 * @return a new QuoteDataBean or null if Quote could not be created
 	 */
-	public QuoteDataBean createQuote(String symbol, String companyName, BigDecimal price) throws Exception, RemoteException;
+	public QuoteDataBean createQuote(String symbol, String companyName, BigDecimal price) throws Exception;
 
    /**
 	 * Return a {@link QuoteDataBean} describing a current quote for the given stock symbol
@@ -159,14 +157,14 @@
 	 * @param symbol the stock symbol to retrieve the current Quote
 	 * @return the QuoteDataBean
 	 */
-	public QuoteDataBean getQuote(String symbol) throws Exception, RemoteException;
+	public QuoteDataBean getQuote(String symbol) throws Exception;
 
    /**
 	 * Return a {@link java.util.Collection} of {@link QuoteDataBean} 
 	 * describing all current quotes
 	 * @return A collection of  QuoteDataBean
 	 */
-	public Collection getAllQuotes() throws Exception, RemoteException;
+	public Collection getAllQuotes() throws Exception;
 
    /**
 	 * Update the stock quote price and volume for the specified stock symbol
@@ -175,7 +173,7 @@
 	 * @param price the updated quote price
 	 * @return the QuoteDataBean describing the stock
 	 */
-	public QuoteDataBean updateQuotePriceVolume(String symbol, BigDecimal newPrice, double sharesTraded) throws Exception, RemoteException;
+	public QuoteDataBean updateQuotePriceVolume(String symbol, BigDecimal newPrice, double sharesTraded) throws Exception;
 
 		
    /**
@@ -185,7 +183,7 @@
 	 * @param userID the customer requesting the portfolio	 
 	 * @return Collection of the users portfolio of stock holdings
 	 */
-	public Collection getHoldings(String userID) throws Exception, RemoteException;
+	public Collection getHoldings(String userID) throws Exception;
 
    /**
 	 * Return a specific user stock holding identifed by the holdingID
@@ -193,7 +191,7 @@
 	 * @param holdingID the holdingID to return	 
 	 * @return a HoldingDataBean describing the holding
 	 */
-	public HoldingDataBean getHolding(Integer holdingID) throws Exception, RemoteException;
+	public HoldingDataBean getHolding(Integer holdingID) throws Exception;
 
 	/**
 	 * Return an AccountDataBean object for userID describing the account
@@ -202,7 +200,7 @@
 	 * @return User account data in AccountDataBean
 	 */	
    public AccountDataBean getAccountData(String userID) 
-   		throws Exception, RemoteException;                              
+   		throws Exception;                              
 
 	/**
 	 * Return an AccountProfileDataBean for userID providing the users profile
@@ -210,7 +208,7 @@
 	 * @param userID the account userID to lookup
 	 * @param User account profile data in AccountProfileDataBean
 	 */
-   public AccountProfileDataBean getAccountProfileData(String userID) throws Exception, RemoteException;                              
+   public AccountProfileDataBean getAccountProfileData(String userID) throws Exception;                              
 
 	/**
 	 * Update userID's account profile information using the provided AccountProfileDataBean object
@@ -218,7 +216,7 @@
 	 * @param userID the account userID to lookup
 	 * @param User account profile data in AccountProfileDataBean
 	 */
-   public AccountProfileDataBean updateAccountProfile(AccountProfileDataBean profileData) throws Exception, RemoteException;                              
+   public AccountProfileDataBean updateAccountProfile(AccountProfileDataBean profileData) throws Exception;                              
 
 
 	/**
@@ -228,7 +226,7 @@
 	 * @param password the password entered by the customer for authentication
 	 * @return User account data in AccountDataBean
 	 */
-   public AccountDataBean login(String userID, String password) throws Exception, RemoteException;                              
+   public AccountDataBean login(String userID, String password) throws Exception;                              
 
 	/**
 	 * Logout the given user
@@ -237,7 +235,7 @@
 	 * @return the login status
 	 */
 
-   public void logout(String userID) throws Exception, RemoteException; 
+   public void logout(String userID) throws Exception; 
                                             
 	/**
 	 * Register a new Trade customer.
@@ -259,7 +257,7 @@
 								  String address,
 								  String email,
 								  String creditcard,
-								  BigDecimal openBalance) throws Exception, RemoteException;  
+								  BigDecimal openBalance) throws Exception;  
 						  
 
    /**
@@ -271,6 +269,6 @@
 	 *  
  	 *  return statistics for this benchmark run
 	 */
-    public RunStatsDataBean resetTrade(boolean deleteAll) throws Exception, RemoteException;
+    public RunStatsDataBean resetTrade(boolean deleteAll) throws Exception;
 }   
 
Index: src/main/resources/META-INF/ibm-ejb-jar-bnd.xml
===================================================================
--- src/main/resources/META-INF/ibm-ejb-jar-bnd.xml	(revision 0)
+++ src/main/resources/META-INF/ibm-ejb-jar-bnd.xml	(revision 0)
@@ -0,0 +1,28 @@
+<ejb-jar-bnd
+        xmlns="http://websphere.ibm.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd"
+        version="1.0">
+
+	<session name="TradeSLSBBean"> 
+        <resource-ref name="jms/QueueConnectionFactory" binding-name="jms/TradeBrokerQCF">
+           <authentication-alias name="TradeAdminAuthData"/> 
+        </resource-ref>     
+        <resource-ref name="jms/TopicConnectionFactory" binding-name="jms/TradeStreamerTCF">  
+           <authentication-alias name="TradeAdminAuthData"/> 
+        </resource-ref>
+        <message-destination-ref name="jms/TradeStreamerTopic" binding-name="jms/TradeStreamerTopic"/>
+        <message-destination-ref name="jms/TradeBrokerQueue" binding-name="jms/TradeBrokerQueue"/>
+    </session>
+    
+    <message-destination name="TradeBrokerQueue" binding-name="jms/TradeBrokerQueue"/>
+    <message-destination name="TradeStreamerTopic" binding-name="jms/TradeStreamerTopic"/>
+    
+    <message-driven name="DTBroker3MDB">
+        <jca-adapter activation-spec-binding-name="eis/TradeBrokerMDB" destination-binding-name="jms/TradeBrokerQueue" activation-spec-auth-alias="TradeAdminAuthData" />
+    </message-driven>
+    <message-driven name="DTStreamer3MDB">
+        <jca-adapter activation-spec-binding-name="eis/TradeStreamerMDB" destination-binding-name="jms/TradeStreamerTopic" activation-spec-auth-alias="TradeAdminAuthData" />
+    </message-driven>
+
+</ejb-jar-bnd>
\ No newline at end of file

Property changes on: src\main\resources\META-INF\ibm-ejb-jar-bnd.xml
___________________________________________________________________
Added: svn:eol-style
   + native

Index: src/main/java/org/apache/geronimo/samples/daytrader/AccountDataBean_.java
===================================================================
--- src/main/java/org/apache/geronimo/samples/daytrader/AccountDataBean_.java	(revision 0)
+++ src/main/java/org/apache/geronimo/samples/daytrader/AccountDataBean_.java	(revision 0)
@@ -0,0 +1,27 @@
+/** 
+ *  Generated by OpenJPA MetaModel Generator Tool.
+**/
+
+package org.apache.geronimo.samples.daytrader;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import javax.persistence.metamodel.CollectionAttribute;
+import javax.persistence.metamodel.SingularAttribute;
+
+@javax.persistence.metamodel.StaticMetamodel
+(value=org.apache.geronimo.samples.daytrader.AccountDataBean.class)
+@javax.annotation.Generated
+(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",date="Mon May 03 09:48:10 CDT 2010")
+public class AccountDataBean_ {
+    public static volatile SingularAttribute<AccountDataBean,Integer> accountID;
+    public static volatile SingularAttribute<AccountDataBean,BigDecimal> balance;
+    public static volatile SingularAttribute<AccountDataBean,Date> creationDate;
+    public static volatile CollectionAttribute<AccountDataBean,HoldingDataBean> holdings;
+    public static volatile SingularAttribute<AccountDataBean,Date> lastLogin;
+    public static volatile SingularAttribute<AccountDataBean,Integer> loginCount;
+    public static volatile SingularAttribute<AccountDataBean,Integer> logoutCount;
+    public static volatile SingularAttribute<AccountDataBean,BigDecimal> openBalance;
+    public static volatile CollectionAttribute<AccountDataBean,OrderDataBean> orders;
+    public static volatile SingularAttribute<AccountDataBean,AccountProfileDataBean> profile;
+}

Property changes on: src\main\java\org\apache\geronimo\samples\daytrader\AccountDataBean_.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: src/main/resources/META-INF/ejb-jar.xml
===================================================================
--- src/main/resources/META-INF/ejb-jar.xml	(revision 935418)
+++ src/main/resources/META-INF/ejb-jar.xml	(working copy)
@@ -25,4 +25,13 @@
         entity, session and message driven beans using annotations. The inline annotations 
         can be overriden by modifing this file. 
     -->    
+   <assembly-descriptor>
+	    <message-destination>
+	        <message-destination-name>TradeBrokerQueue</message-destination-name>
+	    </message-destination>
+	    <message-destination>
+	        <message-destination-name>TradeStreamerTopic</message-destination-name>
+	    </message-destination>
+	</assembly-descriptor> 
+  
 </ejb-jar>
Index: src/main/java/org/apache/geronimo/samples/daytrader/HoldingDataBean_.java
===================================================================
--- src/main/java/org/apache/geronimo/samples/daytrader/HoldingDataBean_.java	(revision 0)
+++ src/main/java/org/apache/geronimo/samples/daytrader/HoldingDataBean_.java	(revision 0)
@@ -0,0 +1,22 @@
+/** 
+ *  Generated by OpenJPA MetaModel Generator Tool.
+**/
+
+package org.apache.geronimo.samples.daytrader;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import javax.persistence.metamodel.SingularAttribute;
+
+@javax.persistence.metamodel.StaticMetamodel
+(value=org.apache.geronimo.samples.daytrader.HoldingDataBean.class)
+@javax.annotation.Generated
+(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",date="Mon May 03 09:50:36 CDT 2010")
+public class HoldingDataBean_ {
+    public static volatile SingularAttribute<HoldingDataBean,AccountDataBean> account;
+    public static volatile SingularAttribute<HoldingDataBean,Integer> holdingID;
+    public static volatile SingularAttribute<HoldingDataBean,Date> purchaseDate;
+    public static volatile SingularAttribute<HoldingDataBean,BigDecimal> purchasePrice;
+    public static volatile SingularAttribute<HoldingDataBean,Double> quantity;
+    public static volatile SingularAttribute<HoldingDataBean,QuoteDataBean> quote;
+}

Property changes on: src\main\java\org\apache\geronimo\samples\daytrader\HoldingDataBean_.java
___________________________________________________________________
Added: svn:eol-style
   + native

Index: src/main/java/org/apache/geronimo/samples/daytrader/ejb3/TradeSLSBBean.java
===================================================================
--- src/main/java/org/apache/geronimo/samples/daytrader/ejb3/TradeSLSBBean.java	(revision 935418)
+++ src/main/java/org/apache/geronimo/samples/daytrader/ejb3/TradeSLSBBean.java	(working copy)
@@ -18,10 +18,15 @@
 package org.apache.geronimo.samples.daytrader.ejb3;
 
 import org.apache.geronimo.samples.daytrader.AccountDataBean;
+import org.apache.geronimo.samples.daytrader.AccountDataBean_;
 import org.apache.geronimo.samples.daytrader.AccountProfileDataBean;
+import org.apache.geronimo.samples.daytrader.AccountProfileDataBean_;
 import org.apache.geronimo.samples.daytrader.HoldingDataBean;
+import org.apache.geronimo.samples.daytrader.HoldingDataBean_;
 import org.apache.geronimo.samples.daytrader.OrderDataBean;
+import org.apache.geronimo.samples.daytrader.OrderDataBean_;
 import org.apache.geronimo.samples.daytrader.QuoteDataBean;
+import org.apache.geronimo.samples.daytrader.QuoteDataBean_;
 import org.apache.geronimo.samples.daytrader.TradeConfig;
 import org.apache.geronimo.samples.daytrader.TradeAction;
 import org.apache.geronimo.samples.daytrader.RunStatsDataBean;
@@ -43,6 +48,13 @@
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
 import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.ParameterExpression;
+import javax.persistence.criteria.Path;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
 import javax.transaction.NotSupportedException;
@@ -51,6 +63,8 @@
 import org.apache.geronimo.samples.daytrader.util.FinancialUtils;
 import org.apache.geronimo.samples.daytrader.util.Log;
 import org.apache.geronimo.samples.daytrader.util.MDBStats;
+import org.apache.openjpa.persistence.criteria.OpenJPACriteriaQuery;
+import org.apache.openjpa.persistence.query.QueryBuilder;
 
 @Stateless
 @TransactionAttribute(TransactionAttributeType.REQUIRED)
@@ -89,8 +103,14 @@
             // ordered by their change in value
             Collection<QuoteDataBean> quotes;
 
-            Query query = entityManager.createNamedQuery("quoteejb.quotesByChange");
-            quotes = query.getResultList();
+            // Demonstration of the JPA criteria query API for the following JPQL:
+            //    SELECT q FROM quoteejb q WHERE q.symbol LIKE 's:1__' ORDER BY q.change1 DESC
+            CriteriaBuilder cb = entityManager.getCriteriaBuilder();
+            CriteriaQuery<QuoteDataBean> c = cb.createQuery(QuoteDataBean.class);
+            Root<QuoteDataBean> qdb = c.from(QuoteDataBean.class);
+            c.where(cb.like(qdb.get(QuoteDataBean_.symbol), "s:1__"));
+            c.orderBy(cb.desc(qdb.get(QuoteDataBean_.change1)));
+            quotes = entityManager.createQuery(c).getResultList();
 
             QuoteDataBean[] quoteArray = (QuoteDataBean[]) quotes.toArray(new QuoteDataBean[quotes.size()]);
             ArrayList<QuoteDataBean> topGainers = new ArrayList<QuoteDataBean>(5);
@@ -356,12 +376,25 @@
 
             // Get the primary keys for all the closed Orders for this
             // account.
-            Query query = entityManager.createNamedQuery("orderejb.closedOrders");
-            query.setParameter("userID", userID);
-            Collection results = query.getResultList();
-			Iterator itr = results.iterator();
-            
-            // Spin through the orders to populate the lazy quote fields
+        	
+        	// Demonstration of the JPA criteria query API for the following JPQL:
+        	//    SELECT o FROM orderejb o WHERE o.orderStatus = 'closed' AND o.account.profile.userID  = :userID
+			CriteriaBuilder cb = entityManager.getCriteriaBuilder();
+			CriteriaQuery<OrderDataBean> c = cb.createQuery(OrderDataBean.class);
+	        Root<OrderDataBean> odb = c.from(OrderDataBean.class);
+	        ParameterExpression<String> uidParm = cb.parameter(String.class);
+	        Path<AccountDataBean> acct = odb.get(OrderDataBean_.account);
+	        Path<AccountProfileDataBean> profile = acct.get(AccountDataBean_.profile);
+	        Path<String> uid = profile.get(AccountProfileDataBean_.userID);
+	        Predicate closedCondition = cb.equal(odb.get(OrderDataBean_.orderStatus), "closed");
+	        Predicate uidCondition = cb.equal(uid, uidParm);
+	        Predicate condition = cb.and(closedCondition, uidCondition);
+	        c.where(condition);
+	        TypedQuery<OrderDataBean> q = entityManager.createQuery(c);
+	        Collection<OrderDataBean> results = q.setParameter(uidParm, userID).getResultList();
+	        
+	        Iterator itr = results.iterator();
+			// Spin through the orders to populate the lazy quote fields
             while (itr.hasNext()){
                 OrderDataBean thisOrder = (OrderDataBean)itr.next();
                 thisOrder.getQuote();
@@ -427,8 +460,13 @@
         if (Log.doTrace())
             Log.trace("TradeSLSBBean:getAllQuotes");
 
-        Query query = entityManager.createNamedQuery("quoteejb.allQuotes");
-        return query.getResultList();
+        // Demonstration of the JPA criteria query API for the following JPQL:
+        //    SELECT q FROM quoteejb q
+        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
+        CriteriaQuery<QuoteDataBean> c = cb.createQuery(QuoteDataBean.class);
+        Root<QuoteDataBean> qbd = c.from(QuoteDataBean.class);
+        TypedQuery<QuoteDataBean> q = entityManager.createQuery(c);
+        return q.getResultList();
     }
 
     public QuoteDataBean updateQuotePriceVolume(String symbol, BigDecimal changeFactor, double sharesTraded) {
@@ -463,6 +501,7 @@
 
         quote.setPrice(newPrice);
         quote.setVolume(quote.getVolume() + sharesTraded);
+        quote.setChange(newPrice.subtract(quote.getOpen()).doubleValue());
         entityManager.merge(quote);
 
         // TODO find out if requires new here is really intended -- it is backwards,
@@ -477,9 +516,22 @@
         if (Log.doTrace())
             Log.trace("TradeSLSBBean:getHoldings", userID);
 
-        Query query = entityManager.createNamedQuery("holdingejb.holdingsByUserID");
-        query.setParameter("userID", userID);
-        Collection<HoldingDataBean> holdings = query.getResultList();
+        // Demonstration of the JPA criteria query API for the following JPQL:
+        //    SELECT h FROM holdingejb h where h.account.profile.userID = :userID
+        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
+        CriteriaQuery<HoldingDataBean> c = cb.createQuery(HoldingDataBean.class);
+        Root<HoldingDataBean> hdb = c.from(HoldingDataBean.class);
+        ParameterExpression<String> uidParm = cb.parameter(String.class);
+        Path<AccountDataBean> account = hdb.get(HoldingDataBean_.account);
+        Path<AccountProfileDataBean> profile = account.get(AccountDataBean_.profile);
+        Path<String> uid = profile.get(AccountProfileDataBean_.userID);
+        // The following 'select' method is not needed, since it is the default. It is just shown for 
+        // illustrative purposes.
+        c.select(hdb);
+        c.where(cb.equal(uid, uidParm));
+        TypedQuery<HoldingDataBean> q = entityManager.createQuery(c);
+        Collection<HoldingDataBean> holdings = q.setParameter(uidParm, userID).getResultList();
+        
         /*
          * Inflate the lazy data memebers
         */
Index: src/main/java/org/apache/geronimo/samples/daytrader/TradeConfig.java
===================================================================
--- src/main/java/org/apache/geronimo/samples/daytrader/TradeConfig.java	(revision 935418)
+++ src/main/java/org/apache/geronimo/samples/daytrader/TradeConfig.java	(working copy)
@@ -38,7 +38,7 @@
     public static final int EJB3 = 0;
     public static final int DIRECT = 1;
     public static final int SESSION3 = 2;
-	public static int runTimeMode = DIRECT;
+	public static int runTimeMode = EJB3;
 	
     /* Trade JPA Layer parameters */
 	public static String[] jpaLayerNames = {"OpenJPA", "Hibernate"};
Index: pom.xml
===================================================================
--- pom.xml	(revision 935418)
+++ pom.xml	(working copy)
@@ -54,7 +54,8 @@
         </dependency>
         <dependency>
             <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-jpa_3.0_spec</artifactId>
+            <artifactId>geronimo-jpa_2.0_spec</artifactId>
+            <version>1.1</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -80,6 +81,7 @@
         <dependency>
             <groupId>org.apache.openjpa</groupId>
             <artifactId>openjpa</artifactId>
+            <version>2.0.0</version>
             <scope>provided</scope>
         </dependency>
         <!-- OpenJPA PCEnhancer ant task failed without these packages -->
Index: src/main/java/org/apache/geronimo/samples/daytrader/QuoteDataBean_.java
===================================================================
--- src/main/java/org/apache/geronimo/samples/daytrader/QuoteDataBean_.java	(revision 0)
+++ src/main/java/org/apache/geronimo/samples/daytrader/QuoteDataBean_.java	(revision 0)
@@ -0,0 +1,23 @@
+/** 
+ *  Generated by OpenJPA MetaModel Generator Tool.
+**/
+
+package org.apache.geronimo.samples.daytrader;
+
+import java.math.BigDecimal;
+import javax.persistence.metamodel.SingularAttribute;
+
+@javax.persistence.metamodel.StaticMetamodel
+(value=org.apache.geronimo.samples.daytrader.QuoteDataBean.class)
+@javax.annotation.Generated
+(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",date="Mon May 03 09:51:22 CDT 2010")
+public class QuoteDataBean_ {
+    public static volatile SingularAttribute<QuoteDataBean,Double> change1;
+    public static volatile SingularAttribute<QuoteDataBean,String> companyName;
+    public static volatile SingularAttribute<QuoteDataBean,BigDecimal> high;
+    public static volatile SingularAttribute<QuoteDataBean,BigDecimal> low;
+    public static volatile SingularAttribute<QuoteDataBean,BigDecimal> open1;
+    public static volatile SingularAttribute<QuoteDataBean,BigDecimal> price;
+    public static volatile SingularAttribute<QuoteDataBean,String> symbol;
+    public static volatile SingularAttribute<QuoteDataBean,Double> volume;
+}

Property changes on: src\main\java\org\apache\geronimo\samples\daytrader\QuoteDataBean_.java
___________________________________________________________________
Added: svn:eol-style
   + native

#P daytrader-web
Index: src/main/webapp/WEB-INF/web.xml
===================================================================
--- src/main/webapp/WEB-INF/web.xml	(revision 935418)
+++ src/main/webapp/WEB-INF/web.xml	(working copy)
@@ -82,7 +82,7 @@
         <init-param>
             <description>Sets the default RuntimeMode. Legal values include EJB and Direct</description>
             <param-name>runTimeMode</param-name>
-            <param-value>DIRECT</param-value>
+            <param-value>Full EJB3</param-value>
         </init-param>
         <init-param>
             <description>Sets the default Order Processing Mode. Legal values include Synchronous, Asynchronous_1-Phase and Asynchronous_2-Phase</description>
Index: src/main/webapp/WEB-INF/ibm-web-bnd.xml
===================================================================
--- src/main/webapp/WEB-INF/ibm-web-bnd.xml	(revision 0)
+++ src/main/webapp/WEB-INF/ibm-web-bnd.xml	(revision 0)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-bnd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://websphere.ibm.com/xml/ns/javaee"
+    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_0.xsd" version="1.0">
+  <virtual-host name="default_host"/>
+  <ejb-ref name="ejb/TradeSLSBBean" binding-name="org.apache.geronimo.samples.daytrader.ejb3.TradeSLSBRemote"/>
+  <ejb-ref name="ejb/DirectSLSBBean" binding-name="org.apache.geronimo.samples.daytrader.ejb3.DirectSLSBRemote"/>
+  <resource-ref name="jdbc/TradeDataSource" binding-name="jdbc/TradeDataSource">
+    <authentication-alias name="TradeDataSourceAuthData"/>
+  </resource-ref>
+
+  <resource-ref name="jms/QueueConnectionFactory" binding-name="jms/TradeBrokerQCF"/>
+  <resource-ref name="jms/TopicConnectionFactory" binding-name="jms/TradeStreamerTCF"/>
+  <message-destination-ref binding-name="jms/TradeBrokerQueue" name="jms/TradeBrokerQueue"/>
+  <message-destination-ref binding-name="jms/TradeStreamerTopic" name="jms/TradeStreamerTopic"/>
+</web-bnd>
+

Property changes on: src\main\webapp\WEB-INF\ibm-web-bnd.xml
___________________________________________________________________
Added: svn:eol-style
   + native

Index: src/main/webapp/WEB-INF/ibm-web-ext.xml
===================================================================
--- src/main/webapp/WEB-INF/ibm-web-ext.xml	(revision 0)
+++ src/main/webapp/WEB-INF/ibm-web-ext.xml	(revision 0)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-ext xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://websphere.ibm.com/xml/ns/javaee"
+    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd" version="1.0">
+  <jsp-attribute name="reloadEnabled" value="false"/>
+  <jsp-attribute name="reloadInterval" value="10"/>
+  <resource-ref name="jdbc/TradeDataSource" isolation-level="TRANSACTION_REPEATABLE_READ"/>
+  <resource-ref name="jms/QueueConnectionFactory" isolation-level="TRANSACTION_READ_COMMITTED"/>
+  <resource-ref name="jms/TopicConnectionFactory" isolation-level="TRANSACTION_READ_COMMITTED"/>
+</web-ext>
+

Property changes on: src\main\webapp\WEB-INF\ibm-web-ext.xml
___________________________________________________________________
Added: svn:eol-style
   + native

