Author: ppoddar
Date: Wed Sep 29 17:40:31 2010
New Revision: 1002780

URL: http://svn.apache.org/viewvc?rev=1002780&view=rev
Log:
Adding an example of query target policy. A service URI support. And comments

Added:
    
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/slice/SectorBasedQueryTargetPolicy.java
   (with props)
Modified:
    
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/LoginDialog.java
    
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/OpenTrader.java
    
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/ServerLogPanel.java
    
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/TradingServiceAdapter.java
    
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/TradingServiceAdapterAsync.java
    
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/ui/ProgressMonitor.java
    
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/server/ExceptionAdapter.java
    
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/server/TradingServiceAdapterImpl.java
    
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/Exchange.java
    
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/MockTradingService.java
    
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/TradingService.java
    
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/slice/SectorDistributionPolicy.java
    
openjpa/trunk/openjpa-examples/opentrader/src/main/resources/META-INF/persistence.xml
    openjpa/trunk/openjpa-examples/opentrader/src/main/resources/WEB-INF/web.xml

Modified: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/LoginDialog.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/LoginDialog.java?rev=1002780&r1=1002779&r2=1002780&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/LoginDialog.java
 (original)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/LoginDialog.java
 Wed Sep 29 17:40:31 2010
@@ -52,6 +52,7 @@ import com.google.gwt.user.client.ui.Tex
  */
 public class LoginDialog extends PopupPanel {
     private Trader trader;
+    private String serverURI;
     private final OpenTrader session;
     
     public LoginDialog(final OpenTrader session) {
@@ -117,9 +118,25 @@ public class LoginDialog extends PopupPa
         
         public void onSuccess(Trader result) {
             trader = result;
+            session.getService().getServiceURI(new GetServerURI());
+        }
+    }
+    
+    /**
+     * Initializes the server URI.
+     *
+     */
+    public class GetServerURI implements AsyncCallback<String> {
+        public void onFailure(Throwable caught) {
+            session.handleError(caught);
+        }
+
+        public void onSuccess(String uri) {
+            serverURI = uri;
             session.getService().getStocks(new InitializeStocks());
         }
     }
+
     
     /**
      * Initializes the tradable stocks followed by the main application.
@@ -132,7 +149,7 @@ public class LoginDialog extends PopupPa
 
         public void onSuccess(List<Stock> stocks) {
             ProgressMonitor.stop();
-            session.init(trader, stocks);
+            session.init(trader, serverURI, stocks);
         }
     }
 }

Modified: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/OpenTrader.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/OpenTrader.java?rev=1002780&r1=1002779&r2=1002780&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/OpenTrader.java
 (original)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/OpenTrader.java
 Wed Sep 29 17:40:31 2010
@@ -101,6 +101,7 @@ public class OpenTrader implements Entry
     
     // Server-State variables as Session Identifier
     private Trader trader;
+    private String _serviceURI;
 
     // The handle to the remote service.
     private TradingServiceAdapterAsync tradingService;
@@ -153,13 +154,18 @@ public class OpenTrader implements Entry
         return stockPanel.getModel();
     } 
     
+    String getServiceURI() {
+       return _serviceURI;
+    }
+    
     /**
      * Builds up the widgets once the login is complete i.e. the server has 
supplied
      * the initialization data.
      * 
      */
-    void init(Trader trader, List<Stock> stocks) {
+    void init(Trader trader, String uri, List<Stock> stocks) {
         this.trader = trader;
+        _serviceURI = uri;
         
         Window.setTitle(trader.getName());
 

Modified: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/ServerLogPanel.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/ServerLogPanel.java?rev=1002780&r1=1002779&r2=1002780&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/ServerLogPanel.java
 (original)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/ServerLogPanel.java
 Wed Sep 29 17:40:31 2010
@@ -56,7 +56,7 @@ public class ServerLogPanel extends Scro
     
     
     public ServerLogPanel(final OpenTrader session, final int w, final int h) {
-        super("Server Logs", w,h, false);
+        super("Server Log (" + session.getServiceURI() + ")", w,h, false);
         this.session = session;
         
         session.registerHandler(ServiceEvent.TradableAdded.TYPE, this);

Modified: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/TradingServiceAdapter.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/TradingServiceAdapter.java?rev=1002780&r1=1002779&r2=1002780&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/TradingServiceAdapter.java
 (original)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/TradingServiceAdapter.java
 Wed Sep 29 17:40:31 2010
@@ -103,4 +103,6 @@ public interface TradingServiceAdapter e
            throws RuntimeException;
     List<LogStatement> getLog() 
            throws RuntimeException;
+    String getServiceURI()
+               throws RuntimeException;
 }

Modified: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/TradingServiceAdapterAsync.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/TradingServiceAdapterAsync.java?rev=1002780&r1=1002779&r2=1002780&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/TradingServiceAdapterAsync.java
 (original)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/TradingServiceAdapterAsync.java
 Wed Sep 29 17:40:31 2010
@@ -68,4 +68,6 @@ public interface TradingServiceAdapterAs
     void withdraw(Tradable t, AsyncCallback<Tradable> callback);
     
     void refresh(Tradable t, AsyncCallback<Tradable> callback);
+    
+    void getServiceURI(AsyncCallback<String> callback);
 }

Modified: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/ui/ProgressMonitor.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/ui/ProgressMonitor.java?rev=1002780&r1=1002779&r2=1002780&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/ui/ProgressMonitor.java
 (original)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/client/ui/ProgressMonitor.java
 Wed Sep 29 17:40:31 2010
@@ -53,12 +53,13 @@ public class ProgressMonitor extends Tim
         header = new HTML();
         bar = new FlexTable();
         
-        bar.setCellSpacing(1);
+        bar.setCellSpacing(0);
+        bar.setCellPadding(0);
         bar.setWidget(0, 0, header);
         header.addStyleName("progressMonitor-caption");
         for (int i = 0; i < N; i++) {
             Label box = new Label();
-            box.setSize("10px", "20px");
+            box.setSize("30px", "20px");
             DOM.setStyleAttribute(box.getElement(), "backgroundColor", 
"black");
             DOM.setStyleAttribute(box.getElement(), OPACITY, lowOpacity);
             bar.setWidget(1, i, box);

Modified: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/server/ExceptionAdapter.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/server/ExceptionAdapter.java?rev=1002780&r1=1002779&r2=1002780&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/server/ExceptionAdapter.java
 (original)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/server/ExceptionAdapter.java
 Wed Sep 29 17:40:31 2010
@@ -21,20 +21,28 @@ package org.apache.openjpa.trader.server
 import java.util.Arrays;
 import java.util.List;
 
-
-
 /**
  * Adapts a server-side exception to a RuntimeException.
+ * This implementation a GWT compiler aware and hence any package dependency 
will require the
+ * source code for this dependent packages. The purpose of this translator is 
to translate
+ * the stack trace of those exceptions, such as 
<code>org.apache.openjpa.persistence.PersistenceException</code>
+ * <em>without</em> bringing in that dependency.
  * 
  * @author Pinaki Poddar
  *
  */
 public class ExceptionAdapter {
-    static List<String> exceptionTypes = Arrays.asList(
-            "org.apache.openjpa.persistence.PersistenceException");
+    static List<String> exceptionTypes = 
Arrays.asList("org.apache.openjpa.persistence.PersistenceException");
     
-
-    RuntimeException translate(Throwable t) {
+    private boolean _printStackTrace;
+    
+    public void setPrintServerSideStackTrace(boolean flag) {
+       _printStackTrace = flag;
+    }
+    
+    public RuntimeException translate(Throwable t) {
+       if (_printStackTrace)
+               t.printStackTrace();
         Throwable cause = searchForKnownButNonTranslatableException(t);
         if (cause != null) {
             t = cause;
@@ -63,5 +71,4 @@ public class ExceptionAdapter {
         }
         return false;
     }
-
 }

Modified: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/server/TradingServiceAdapterImpl.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/server/TradingServiceAdapterImpl.java?rev=1002780&r1=1002779&r2=1002780&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/server/TradingServiceAdapterImpl.java
 (original)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/server/TradingServiceAdapterImpl.java
 Wed Sep 29 17:40:31 2010
@@ -41,18 +41,33 @@ import org.apache.openjpa.trader.service
 import com.google.gwt.user.server.rpc.RemoteServiceServlet;
 
 /**
- * The server side implementation of the RPC service.
+ * The server side implementation of the GWT RPC service.
+ * <p>
+ * This implementation delegates to original implementation, thereby blocking 
the GWT Servlet
+ * dependency to the original implementation of the service. This 
implementation being a 
+ * servlet allows us to switch the delegate during {...@#init(ServletConfig) 
initialization}  
+ * to either a {...@link Exchange real JPA-based } implementation or a 
{...@link MockTradingService simple in-memory}
+ * implementation of the {...@link TradingService service interface}.
+ * <p>
+ * The other important advantage of such delegation is to translate exception. 
The underlying service
+ * exceptions are translated by an {...@link ExceptionAdapter exception 
translator} that ensures that
+ * the translated exceptions are serializable and hence accessible to the 
browser-based client. 
+ *   
+ * @author Pinaki Poddar
  */
 @SuppressWarnings("serial")
 public class TradingServiceAdapterImpl extends RemoteServiceServlet implements 
TradingServiceAdapter {
     
-    TradingService _del;
+    private TradingService _del;
+    private ExceptionAdapter _translator = new ExceptionAdapter();
     
     public void init(ServletConfig config) throws ServletException {
         super.init(config);
         String unit = config.getInitParameter("persistence.unit");
         String mock = config.getInitParameter("mock");
+        String serverTrace = config.getInitParameter("server-side-stacktrace");
         _del = ("true".equalsIgnoreCase(mock)) ? new MockTradingService() : 
new Exchange(unit);
+        
_translator.setPrintServerSideStackTrace("true".equalsIgnoreCase(serverTrace));
     }
     
     public void destroy() {
@@ -164,9 +179,17 @@ public class TradingServiceAdapterImpl e
             throw translate(e);
         }
     }
+    
+    public String getServiceURI() {
+        try {
+            return _del.getServiceURI();
+        } catch (Throwable e) {
+            throw translate(e);
+        }
+    }
+
 
     RuntimeException translate(Throwable t) {
-        t.printStackTrace();
-        return new ExceptionAdapter().translate(t);
+        return _translator.translate(t);
     }
 }

Modified: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/Exchange.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/Exchange.java?rev=1002780&r1=1002779&r2=1002780&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/Exchange.java
 (original)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/Exchange.java
 Wed Sep 29 17:40:31 2010
@@ -20,6 +20,7 @@ package org.apache.openjpa.trader.servic
 
 import java.sql.Timestamp;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -261,4 +262,17 @@ public class Exchange extends Persistenc
         config.put("openjpa.Log", BufferedLog.class.getName());
         return config;
     }
+    
+    public String getServiceURI() {
+       Map<String,Object> props = getUnit().getProperties();
+       Object url = props.get("openjpa.ConnectionURL");
+       try {
+       if (url == null) {
+               url = 
Arrays.toString((String[])props.get("openjpa.slice.Names"));
+       }
+       } catch (Exception ex) {
+               url = "?";
+       }
+       return "jpa:" + props.get("openjpa.Id") + "@" + url;
+    }
 }

Modified: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/MockTradingService.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/MockTradingService.java?rev=1002780&r1=1002779&r2=1002780&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/MockTradingService.java
 (original)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/MockTradingService.java
 Wed Sep 29 17:40:31 2010
@@ -171,5 +171,9 @@ public class MockTradingService implemen
     @Override
     public void close() {
     }
+    
+    public String getServiceURI() {
+       return "Mock";
+    }
 
 }

Modified: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/TradingService.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/TradingService.java?rev=1002780&r1=1002779&r2=1002780&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/TradingService.java
 (original)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/TradingService.java
 Wed Sep 29 17:40:31 2010
@@ -41,12 +41,12 @@ public interface TradingService {
     /**
      * A query to find symbols of all stocks.
      */
-    String GET_ALL_STOCKS = "select s from Stock s";
+    public static final String GET_ALL_STOCKS = "select s from Stock s";
     
     /**
      * A query to match asks to a given bid.
      */
-    String MATCH_BID  = "select new Match(a,b) from Ask a, Bid b " 
+    public static final String MATCH_BID  = "select new Match(a,b) from Ask a, 
Bid b " 
                       + "where b = :bid and a.stock.symbol = b.stock.symbol " 
                       + "and a.price <= b.price and a.volume >= b.volume " 
                       + "and NOT(a.seller = b.buyer) and a.trade is NULL and 
b.trade is NULL";
@@ -55,7 +55,7 @@ public interface TradingService {
     /**
      * A query to match bids of a given ask.
      */
-    String MATCH_ASK  = "select new Match(a,b) from Ask a, Bid b " 
+    public static final String MATCH_ASK  = "select new Match(a,b) from Ask a, 
Bid b " 
                       + "where a = :ask  and a.stock.symbol = b.stock.symbol " 
                       + "and a.price <= b.price and a.volume >= b.volume " 
                       + "and NOT(a.seller = b.buyer) and a.trade is NULL and 
b.trade is NULL"; 
@@ -64,16 +64,16 @@ public interface TradingService {
     /**
      * A query to find a trader by his/her name.
      */
-    String QUERY_TRADER_BY_NAME = "select t from Trader t where t.name=:name";
+    public static final String QUERY_TRADER_BY_NAME = "select t from Trader t 
where t.name=:name";
     
     
     /**
      * A query to find all trades in a given period.
      */
-    String QUERY_TRADE_BY_PERIOD = "select t from Trade t where t.id between 
(:from, :to)";
+    public static final String QUERY_TRADE_BY_PERIOD = "select t from Trade t 
where t.id between (:from, :to)";
     
     
-    public static final String DEFAULT_UNIT_NAME = "exchange";
+    public static final String DEFAULT_UNIT_NAME = "exchange-local";
     
     /**
      * Gets the list of stocks registered with this service.
@@ -161,4 +161,11 @@ public interface TradingService {
      * @return
      */
     List<LogStatement> getLog();
+    
+    /**
+     * Get a descriptive URI-like string for this service.
+     * 
+     * @return
+     */
+    String getServiceURI();
 }

Added: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/slice/SectorBasedQueryTargetPolicy.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/slice/SectorBasedQueryTargetPolicy.java?rev=1002780&view=auto
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/slice/SectorBasedQueryTargetPolicy.java
 (added)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/slice/SectorBasedQueryTargetPolicy.java
 Wed Sep 29 17:40:31 2010
@@ -0,0 +1,32 @@
+package org.apache.openjpa.trader.service.slice;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openjpa.slice.QueryTargetPolicy;
+import org.apache.openjpa.trader.domain.Stock;
+import org.apache.openjpa.trader.domain.Tradable;
+import org.apache.openjpa.trader.service.TradingService;
+
+/**
+ * An example of a {...@link QueryTargetPolicy query target policy} that 
directs the query based
+ * on its parameters.
+ * 
+ * @author Pinaki Poddar
+ *
+ */
+public class SectorBasedQueryTargetPolicy implements QueryTargetPolicy {
+
+       @Override
+       public String[] getTargets(String query, Map<Object, Object> params,
+                       String language, List<String> slices, Object context) { 
       
+               Stock stock = null;
+               if (TradingService.MATCH_ASK.equals(query)) {
+                       stock = ((Tradable)params.get("ask")).getStock();
+               } else if (TradingService.MATCH_BID.equals(query)) {
+                       stock = ((Tradable)params.get("bid")).getStock();
+               }
+        return stock != null ? new 
String[]{slices.get(stock.getSector().ordinal())} : null;
+       }
+
+}

Propchange: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/slice/SectorBasedQueryTargetPolicy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/slice/SectorBasedQueryTargetPolicy.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/slice/SectorDistributionPolicy.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/slice/SectorDistributionPolicy.java?rev=1002780&r1=1002779&r2=1002780&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/slice/SectorDistributionPolicy.java
 (original)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/java/org/apache/openjpa/trader/service/slice/SectorDistributionPolicy.java
 Wed Sep 29 17:40:31 2010
@@ -21,13 +21,17 @@ package org.apache.openjpa.trader.servic
 import java.util.List;
 
 import org.apache.openjpa.slice.DistributionPolicy;
+import org.apache.openjpa.trader.domain.Sector;
 import org.apache.openjpa.trader.domain.Stock;
 import org.apache.openjpa.trader.domain.Tradable;
+import org.apache.openjpa.trader.domain.Trade;
 import org.apache.openjpa.trader.domain.Trader;
 
 /**
- * Distributes each persistent domain instances of OpenTrader model into 
specific slice
- * based on the sector.
+ * An example of {...@link DistributionPolicy distribution policy} that 
distributes each persistent 
+ * domain instances of OpenTrader model into specific slice based on the 
{...@link Sector} to which
+ * a {...@link Stock} belongs. This policy demonstrates the use case where 
data is distributed by
+ * a related property of the instance.
  * 
  * @author Pinaki Poddar
  *
@@ -44,12 +48,11 @@ public class SectorDistributionPolicy im
             stock = ((Tradable)pc).getStock();
         } else if (pc instanceof Stock) {
             stock = (Stock)pc;
+        } else if (pc instanceof Trade) {
+               stock = ((Trade)pc).getStock();
         } else if (pc instanceof Trader) {
             throw new IllegalArgumentException("Trader should have been 
replicated");
         }
-//        if (stock == null) {
-//            throw new IllegalStateException(pc + "(" + pc.getClass() + ") is 
not associated with a Stock");
-//        }
         return stock != null ? slices.get(stock.getSector().ordinal()) : null;
     }
 

Modified: 
openjpa/trunk/openjpa-examples/opentrader/src/main/resources/META-INF/persistence.xml
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/resources/META-INF/persistence.xml?rev=1002780&r1=1002779&r2=1002780&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/resources/META-INF/persistence.xml
 (original)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/resources/META-INF/persistence.xml
 Wed Sep 29 17:40:31 2010
@@ -20,7 +20,7 @@
 <persistence xmlns="http://java.sun.com/xml/ns/persistence";
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
     version="1.0">
-    <persistence-unit name="slice-exchange">
+    <persistence-unit name="exchange-slice">
        
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <class>org.apache.openjpa.trader.domain.Tradable</class>
        <class>org.apache.openjpa.trader.domain.Ask</class>
@@ -35,13 +35,14 @@
         <property name="openjpa.ConnectionUserName"        value="demo"/>
         <property name="openjpa.ConnectionPassword"        value="pwd"/>
         
-        <property name="openjpa.slice.Names"                
value="slice1,slice2,slice3"/>
+        <property name="openjpa.slice.Names"                value="sector1, 
sector2, sector3"/>
         <property name="openjpa.slice.DistributionPolicy"   
value="org.apache.openjpa.trader.service.slice.SectorDistributionPolicy"/>
         <property name="openjpa.slice.ReplicatedTypes"      
value="org.apache.openjpa.trader.domain.Trader"/>  
+        <property name="openjpa.slice.QueryTargetPolicy"    
value="org.apache.openjpa.trader.service.slice.SectorBasedQueryTargetPolicy"/>
                                    
-        <property name="openjpa.slice.slice1.ConnectionURL" 
value="jdbc:mysql://localhost/sector1"/>
-        <property name="openjpa.slice.slice2.ConnectionURL" 
value="jdbc:mysql://localhost/sector2"/>
-        <property name="openjpa.slice.slice3.ConnectionURL" 
value="jdbc:mysql://localhost/sector3"/>
+        <property name="openjpa.slice.sector1.ConnectionURL" 
value="jdbc:mysql://localhost/sector1"/>
+        <property name="openjpa.slice.sector2.ConnectionURL" 
value="jdbc:mysql://localhost/sector2"/>
+        <property name="openjpa.slice.sector3.ConnectionURL" 
value="jdbc:mysql://localhost/sector3"/>
         
         
         
@@ -58,7 +59,7 @@
     </persistence-unit>
     
     
-    <persistence-unit name="exchange">
+    <persistence-unit name="exchange-local">
        
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <class>org.apache.openjpa.trader.domain.Tradable</class>
        <class>org.apache.openjpa.trader.domain.Ask</class>
@@ -80,4 +81,26 @@
         </properties>
     </persistence-unit>
     
+    <persistence-unit name="exchange">
+       
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+       <class>org.apache.openjpa.trader.domain.Tradable</class>
+       <class>org.apache.openjpa.trader.domain.Ask</class>
+       <class>org.apache.openjpa.trader.domain.Bid</class>
+       <class>org.apache.openjpa.trader.domain.Trader</class>
+       <class>org.apache.openjpa.trader.domain.Trade</class>
+       <class>org.apache.openjpa.trader.domain.Stock</class>
+        <properties>
+        <property name="openjpa.ConnectionDriverName" 
value="com.mysql.jdbc.Driver"/>
+        <property name="openjpa.ConnectionURL" 
value="jdbc:mysql://opentrader.cxlsv2qt7orp.us-east-1.rds.amazonaws.com:3306/exchange"/>
+        <property name="openjpa.ConnectionUserName" value="ppoddar"/>
+        <property name="openjpa.ConnectionPassword" value="password"/>
+        <property name="openjpa.Multithreaded" value="true"/>
+        <property name="openjpa.DynamicEnhancementAgent" value="false"/>
+        <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported"/>
+        <property name="openjpa.ConnectionFactoryProperties" 
value="PrintParameters=true"/>
+        
+        <property name="openjpa.jdbc.SynchronizeMappings" 
value="buildSchema(ForeignKeys=True)"/>
+        </properties>
+    </persistence-unit>
+    
 </persistence>

Modified: 
openjpa/trunk/openjpa-examples/opentrader/src/main/resources/WEB-INF/web.xml
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-examples/opentrader/src/main/resources/WEB-INF/web.xml?rev=1002780&r1=1002779&r2=1002780&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-examples/opentrader/src/main/resources/WEB-INF/web.xml 
(original)
+++ 
openjpa/trunk/openjpa-examples/opentrader/src/main/resources/WEB-INF/web.xml 
Wed Sep 29 17:40:31 2010
@@ -32,11 +32,11 @@
                
<servlet-class>org.apache.openjpa.trader.server.TradingServiceAdapterImpl</servlet-class>
                <init-param>
                        <param-name>persistence.unit</param-name>
-                       <param-value>exchange</param-value>
-               </init-param>
-               <init-param>
+                       <param-value>exchange-slice</param-value>
                        <param-name>mock</param-name>
                        <param-value>false</param-value>
+                       <param-name>server-side-stacktrace</param-name>
+                       <param-value>true</param-value>
                </init-param>
        </servlet>
        <servlet-mapping>


Reply via email to