• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/timemachine/db-4.7.25.NC/docs/collections/tutorial/
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml">
4  <head>
5    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6    <title>
7		Creating Entity Bindings
8	</title>
9    <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
10    <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
11    <link rel="home" href="index.html" title="Berkeley DB Collections Tutorial" />
12    <link rel="up" href="Entity.html" title="Chapter��4.��&#10;        Using Entity Classes&#9;&#10;&#9;" />
13    <link rel="previous" href="Entity.html" title="Chapter��4.��&#10;        Using Entity Classes&#9;&#10;&#9;" />
14    <link rel="next" href="collectionswithentities.html" title="&#10;&#9;&#9;Creating Collections with Entity Bindings&#10;&#9;" />
15  </head>
16  <body>
17    <div class="navheader">
18      <table width="100%" summary="Navigation header">
19        <tr>
20          <th colspan="3" align="center">
21		Creating Entity Bindings
22	</th>
23        </tr>
24        <tr>
25          <td width="20%" align="left"><a accesskey="p" href="Entity.html">Prev</a>��</td>
26          <th width="60%" align="center">Chapter��4.��
27        Using Entity Classes	
28	</th>
29          <td width="20%" align="right">��<a accesskey="n" href="collectionswithentities.html">Next</a></td>
30        </tr>
31      </table>
32      <hr />
33    </div>
34    <div class="sect1" lang="en" xml:lang="en">
35      <div class="titlepage">
36        <div>
37          <div>
38            <h2 class="title" style="clear: both"><a id="creatingentitybindings"></a>
39		Creating Entity Bindings
40	</h2>
41          </div>
42        </div>
43        <div></div>
44      </div>
45      <p>
46    <span class="emphasis"><em>Entity bindings</em></span> are similar to ordinary bindings in that
47	they convert between Java objects and the stored data format of
48	keys and values. In addition, entity bindings map between key/value
49	pairs and entity objects. An ordinary binding is a one-to-one
50	mapping, while an entity binding is a two-to-one mapping.
51</p>
52      <p>
53    The <tt class="literal">partValueBinding</tt>, <tt class="literal">supplierValueBinding</tt> and
54	<tt class="literal">shipmentValueBinding</tt> bindings are created below as entity
55	bindings rather than (in the prior examples) serial bindings.
56</p>
57      <a id="entity_sampleviews"></a>
58      <pre class="programlisting">import com.sleepycat.bind.EntryBinding;
59<b class="userinput"><tt>import com.sleepycat.bind.EntityBinding;</tt></b>
60import com.sleepycat.bind.serial.SerialBinding;
61<b class="userinput"><tt>import com.sleepycat.bind.serial.SerialSerialBinding;</tt></b>
62...
63
64public class SampleViews
65{
66    ...
67    public SampleViews(SampleDatabase db)
68    {
69        ClassCatalog catalog = db.getClassCatalog();
70        SerialBinding partKeyBinding =
71            new SerialBinding(catalog, PartKey.class);
72<b class="userinput"><tt>        EntityBinding partValueBinding =
73            new PartBinding(catalog, PartKey.class, PartData.class);</tt></b>
74        SerialBinding supplierKeyBinding =
75            new SerialBinding(catalog, SupplierKey.class);
76<b class="userinput"><tt>        EntityBinding supplierValueBinding =
77            new SupplierBinding(catalog, SupplierKey.class,
78                                SupplierData.class);</tt></b>
79        SerialBinding shipmentKeyBinding =
80            new SerialBinding(catalog, ShipmentKey.class);
81<b class="userinput"><tt>        EntityBinding shipmentValueBinding =
82            new ShipmentBinding(catalog, ShipmentKey.class,
83                                ShipmentData.class);</tt></b>
84        SerialBinding cityKeyBinding =
85            new SerialBinding(catalog, String.class);
86        ...
87    }
88} </pre>
89      <p>
90    The entity bindings will be used in the next section to
91	construct stored map objects.
92</p>
93      <p>
94    The <tt class="classname">PartBinding</tt> class is defined below.
95</p>
96      <a id="entity_partbinding"></a>
97      <pre class="programlisting">public class SampleViews
98{
99    ...
100<b class="userinput"><tt>    private static class PartBinding extends SerialSerialBinding {
101        private PartBinding(ClassCatalog classCatalog,
102                            Class keyClass,
103                            Class dataClass)
104        {
105            super(classCatalog, keyClass, dataClass);
106        }
107
108        public Object entryToObject(Object keyInput, Object dataInput)
109        {
110            PartKey key = (PartKey) keyInput;
111            PartData data = (PartData) dataInput;
112            return new Part(key.getNumber(), data.getName(), data.getColor(),
113                            data.getWeight(), data.getCity());
114        }
115
116        public Object objectToKey(Object object)
117        {
118            Part part = (Part) object;
119            return new PartKey(part.getNumber());
120        }
121
122        public Object objectToData(Object object)
123        {
124            Part part = (Part) object;
125            return new PartData(part.getName(), part.getColor(),
126                                 part.getWeight(), part.getCity());
127        }
128    }</tt></b>
129    ...
130} </pre>
131      <p>
132    In general, an entity binding is any class that implements the
133	<a href="../../java/com/sleepycat/bind/EntityBinding.html" target="_top">EntityBinding</a>
134	
135	interface, just as an ordinary binding is any class that implements
136	the 
137    <a href="../../java/com/sleepycat/bind/EntryBinding.html" target="_top">EntryBinding</a>
138    
139	interface. In the prior examples the built-in 
140    <a href="../../java/com/sleepycat/bind/serial/SerialBinding.html" target="_top">SerialBinding</a>
141    
142	class (which implements 
143    <a href="../../java/com/sleepycat/bind/EntryBinding.html" target="_top">EntryBinding</a>)
144	was used and no application-defined binding classes were needed.
145</p>
146      <p>
147    In this example, application-defined binding classes are used
148	that extend the 
149    <a href="../../java/com/sleepycat/bind/serial/SerialSerialBinding.html" target="_top">SerialSerialBinding</a>
150    
151	abstract base class. This base class implements 
152    <a href="../../java/com/sleepycat/bind/EntityBinding.html" target="_top">EntityBinding</a>
153    
154	and provides the conversions between key/value bytes and key/value
155	objects, just as the 
156    <a href="../../java/com/sleepycat/bind/serial/SerialBinding.html" target="_top">SerialBinding</a>
157    
158	class does. The application-defined entity class implements the
159	abstract methods defined in the base class that map between
160	key/value objects and entity objects.
161</p>
162      <p>
163    Three abstract methods are implemented for each entity binding.
164	The <tt class="methodname">entryToObject()</tt> method takes as input the key and data
165	objects, which have been deserialized automatically by the base
166	class. As output, it returns the combined <tt class="classname">Part</tt> entity.
167</p>
168      <p>
169    The <tt class="methodname">objectToKey()</tt> and <tt class="methodname">objectToData()</tt> methods take an
170	entity object as input. As output they return the part key or data
171	object that is extracted from the entity object. The key or data
172	will then be serialized automatically by the base class.
173</p>
174      <p>
175    The <tt class="classname">SupplierBinding</tt> and <tt class="classname">ShipmentBinding</tt> classes
176	are very similar to the <tt class="classname">PartBinding</tt> class.
177</p>
178      <a id="entity_supplierbinding"></a>
179      <pre class="programlisting">public class SampleViews
180{
181    ...
182<b class="userinput"><tt>    private static class SupplierBinding extends SerialSerialBinding {
183        private SupplierBinding(ClassCatalog classCatalog,
184                                Class keyClass,
185                                Class dataClass)
186        {
187            super(classCatalog, keyClass, dataClass);
188        }
189
190        public Object entryToObject(Object keyInput, Object dataInput)
191        {
192            SupplierKey key = (SupplierKey) keyInput;
193            SupplierData data = (SupplierData) dataInput;
194            return new Supplier(key.getNumber(), data.getName(),
195                                data.getStatus(), data.getCity());
196        }
197
198        public Object objectToKey(Object object)
199        {
200            Supplier supplier = (Supplier) object;
201            return new SupplierKey(supplier.getNumber());
202        }
203
204        public Object objectToData(Object object)
205        {
206            Supplier supplier = (Supplier) object;
207            return new SupplierData(supplier.getName(), supplier.getStatus(),
208                                     supplier.getCity());
209        }
210    }
211
212    private static class ShipmentBinding extends SerialSerialBinding {
213        private ShipmentBinding(ClassCatalog classCatalog,
214                                Class keyClass,
215                                Class dataClass)
216        {
217            super(classCatalog, keyClass, dataClass);
218        }
219
220        public Object entryToObject(Object keyInput, Object dataInput)
221        {
222            ShipmentKey key = (ShipmentKey) keyInput;
223            ShipmentData data = (ShipmentData) dataInput;
224            return new Shipment(key.getPartNumber(), key.getSupplierNumber(),
225                                data.getQuantity());
226        }
227
228        public Object objectToKey(Object object)
229        {
230            Shipment shipment = (Shipment) object;
231            return new ShipmentKey(shipment.getPartNumber(),
232                                   shipment.getSupplierNumber());
233        }
234
235        public Object objectToData(Object object)
236        {
237            Shipment shipment = (Shipment) object;
238            return new ShipmentData(shipment.getQuantity());
239        }
240    }</tt></b>
241    ...
242} </pre>
243    </div>
244    <div class="navfooter">
245      <hr />
246      <table width="100%" summary="Navigation footer">
247        <tr>
248          <td width="40%" align="left"><a accesskey="p" href="Entity.html">Prev</a>��</td>
249          <td width="20%" align="center">
250            <a accesskey="u" href="Entity.html">Up</a>
251          </td>
252          <td width="40%" align="right">��<a accesskey="n" href="collectionswithentities.html">Next</a></td>
253        </tr>
254        <tr>
255          <td width="40%" align="left" valign="top">Chapter��4.��
256        Using Entity Classes	
257	��</td>
258          <td width="20%" align="center">
259            <a accesskey="h" href="index.html">Home</a>
260          </td>
261          <td width="40%" align="right" valign="top">��
262		Creating Collections with Entity Bindings
263	</td>
264        </tr>
265      </table>
266    </div>
267  </body>
268</html>
269