Aldo Luis Aguirre wrote:

Hi,
I have a problem, I have a class named Product (just like tutorial with an relation M:N):
-------------------------------------
package org.apache.ojb.tutorials;
import java.util.*;
import org.apache.ojb.broker.util.collections.ManageableArrayList;
import org.apache.ojb.broker.core.proxy.ListProxyDefaultImpl;


import org.apache.ojb.broker.PersistenceBroker;
import org.apache.ojb.broker.PersistenceBrokerException;
import org.apache.ojb.broker.PersistenceBrokerFactory;

/**
* Represents product objects in the tutorial system
*
* @ojb.class
*/
public class Product implements java.io.Serializable
{
   /**
    * Artificial primary key atribute
    *
    * @ojb.field primarykey="true"
    *            autoincrement="ojb"
    */
   private Integer id;

   /**
    * Product name
    *
    * @ojb.field length="100"
    */
   protected String name;

   /**
    * Price per item
    *
    * @ojb.field
    */
   protected double price;

   /**
    * Stock of currently available items
    *
    * @ojb.field
    */
   protected int stock;

/**
* Returns the id
*
* @return The id
*/
/**
* @ojb.collection element-class-ref="org.apache.ojb.tutorials.Pieza"
* auto-retrieve="true"
* auto-update="true"
* auto-delete="none"
* indirection-table="PRODUCT_PIEZA"
* foreignkey="PRODUCT_ID"
* remote-foreignkey="PIEZA_ID"
* proxy="true"
*/
protected ListProxyDefaultImpl piezas=new ListProxyDefaultImpl(
PersistenceBrokerFactory.defaultPersistenceBroker().getPBKey(),null);

??? why do you declare a proxy class for field 'piezas'. Your persistent object don't need to know anything about proxy classes.


http://db.apache.org/ojb/docu/guides/basic-technique.html#Using+a+Single+Proxy+for+a+Whole+Collection
http://db.apache.org/ojb/docu/guides/xdoclet-module.html#Collections

try
protected List piezas;
or
protected List piezas = new ArrayList();

Then OJB should internal use ManageableArrayList or ListProxyDefaultImpl when proxy is true.

If you use a collection proxy there is no difference in mapping except the 'proxy="true"' instead 'false' flag.

regards,
Armin


//protected ManageableArrayList piezas=new ManageableArrayList();
public int getId()
{
return id.intValue();
}


   /**
    * Returns the name of the product.
    *
    * @return The name
    */
   public String getName()
   {
       return name;
   }

   /**
    * Returns the price of the product.
    *
    * @return The price
    */
   public double getPrice()
   {
       return price;
   }

   /**
    * Returns the number of available items of this product.
    *
    * @return The number of items in stock
    */
   public int getStock()
   {
       return stock;
   }

   /**
    * Sets the id of the product.
    *
    * @param newId The new id
    */
   public void setId(int newId)
   {
       id = new Integer(newId);
   }

   /**
    * Sets the name of the product.
    *
    * @param newName The new name
    */
   public void setName(String newName)
   {
       name = newName;
   }

   /**
    * Sets the price of the product
    *
    * @param newPrice The new price
    */
   public void setPrice(double newPrice)
   {
       price = newPrice;
   }

   /**
    * Sets the number of available items of this product.
    *
    * @param newStock The number of available items
    */
   public void setStock(int newStock)
   {
       stock = newStock;
   }

/**
* Returns a string representation of the product.
*
* @return The string representation
*/
public String toString()
{
return "[" + id + "] " + name + "\t\t\t price: " + price + "\t\t stock: " + stock;
}
public void addPieza(Pieza pieza) {
piezas.ojbAdd((Object)pieza);
}
public Collection getPiezas() {
return piezas;
}
}
-------------------------------


and I modified PBExample.java like this:
-----------------------------------
.
.
.
System.out.println("2a. Find product by template, used template: " + template);
System.out.println("ReCargando Piezas");
product.setId(41);
Product aProduct = findByTemplate(product);
System.out.println("Fin de ReCarga de Piezas");
System.out.println("2b. Found product: " + aProduct);
System.out.println();
System.out.println("Comienzo a ver las pieza de adentro");
System.out.println("Tengo: " + aProduct.getPiezas().size());
Iterator it = aProduct.getPiezas().iterator();
while(it.hasNext()) {
Pieza pieza = (Pieza)it.next();
System.out.println("Pieza: " + pieza);
}
System.out.println("Fin de impresion de piezas");
.
.
.
-----------------------
the repository_user.xml is:
----------------------
<class-descriptor
class="org.apache.ojb.tutorials.Pieza"
table="Pieza"
>
<field-descriptor
name="id"
column="id"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"
>
</field-descriptor>
<field-descriptor
name="name"
column="name"
jdbc-type="VARCHAR"
length="100"
>
</field-descriptor>
<field-descriptor
name="price"
column="price"
jdbc-type="FLOAT"
>
</field-descriptor>
<field-descriptor
name="stock"
column="stock"
jdbc-type="INTEGER"
>
</field-descriptor>
<collection-descriptor
name="productos"
collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"


element-class-ref="org.apache.ojb.tutorials.Product"
indirection-table="PRODUCT_PIEZA"
auto-retrieve="true"
auto-update="true"
auto-delete="none"
>
<fk-pointing-to-this-class column="PIEZA_ID"/>
<fk-pointing-to-element-class column="PRODUCT_ID"/>
</collection-descriptor>
</class-descriptor>
<class-descriptor
class="org.apache.ojb.tutorials.Product"
table="Product"
>
<field-descriptor
name="id"
column="id"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"
>
</field-descriptor>
<field-descriptor
name="name"
column="name"
jdbc-type="VARCHAR"
length="100"
>
</field-descriptor>
<field-descriptor
name="price"
column="price"
jdbc-type="FLOAT"
>
</field-descriptor>
<field-descriptor
name="stock"
column="stock"
jdbc-type="INTEGER"
>
</field-descriptor>
<collection-descriptor
name="piezas"
collection-class="org.apache.ojb.broker.core.proxy.ListProxyDefaultImpl"
element-class-ref="org.apache.ojb.tutorials.Pieza"
indirection-table="PRODUCT_PIEZA"
proxy="true"
auto-retrieve="true"
auto-update="true"
auto-delete="none"
>
<fk-pointing-to-this-class column="PRODUCT_ID"/>
<fk-pointing-to-element-class column="PIEZA_ID"/>
</collection-descriptor>
</class-descriptor>
---------------------------
I can get the number of pieces, but when I want to show them, It gives me the follow error:
--------------------------
2a. Find product by template, used template: [null] Sprocket price: 0.0 stock: 0
ReCargando Piezas
Fin de ReCarga de Piezas
2b. Found product: [41] Sprocket price: 1.99 stock: 7


Comienzo a ver las pieza de adentro
Number of pieces: 3000 // that's OK
[org.apache.ojb.broker.core.QueryReferenceBroker] ERROR: org.apache.ojb.broker.core.proxy.ListProxyDefaultImpl
java.lang.InstantiationException: org.apache.ojb.broker.core.proxy.ListProxyDefaultImpl
at java.lang.Class.newInstance0(Class.java:293)
at java.lang.Class.newInstance(Class.java:261)
at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.proxy.CollectionProxyDefaultImpl.loadData(Unknown Source)
at org.apache.ojb.broker.core.proxy.ListProxyDefaultImpl.loadData(Unknown Source)
at org.apache.ojb.broker.core.proxy.CollectionProxyDefaultImpl.getData(Unknown Source)
at org.apache.ojb.broker.core.proxy.CollectionProxyDefaultImpl.iterator(Unknown Source)
at org.apache.ojb.tutorials.PBExample.main(Unknown Source)
java.lang.InstantiationException: org.apache.ojb.broker.core.proxy.ListProxyDefaultImpl
at java.lang.Class.newInstance0(Class.java:293)
at java.lang.Class.newInstance(Class.java:261)
at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.proxy.CollectionProxyDefaultImpl.loadData(Unknown Source)
at org.apache.ojb.broker.core.proxy.ListProxyDefaultImpl.loadData(Unknown Source)
at org.apache.ojb.broker.core.proxy.CollectionProxyDefaultImpl.getData(Unknown Source)
at org.apache.ojb.broker.core.proxy.CollectionProxyDefaultImpl.iterator(Unknown Source)
at org.apache.ojb.tutorials.PBExample.main(Unknown Source)
rethrown as org.apache.ojb.broker.PersistenceBrokerException: org.apache.ojb.broker.core.proxy.ListProxyDefaultImpl
at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown Source)
at org.apache.ojb.broker.core.proxy.CollectionProxyDefaultImpl.loadData(Unknown Source)
at org.apache.ojb.broker.core.proxy.ListProxyDefaultImpl.loadData(Unknown Source)
at org.apache.ojb.broker.core.proxy.CollectionProxyDefaultImpl.getData(Unknown Source)
at org.apache.ojb.broker.core.proxy.CollectionProxyDefaultImpl.iterator(Unknown Source)
at org.apache.ojb.tutorials.PBExample.main(Unknown Source)
Caused by: java.lang.InstantiationException: org.apache.ojb.broker.core.proxy.ListProxyDefaultImpl
at java.lang.Class.newInstance0(Class.java:293)
at java.lang.Class.newInstance(Class.java:261)
... 10 more
Exception: org.apache.ojb.broker.core.proxy.ListProxyDefaultImpl
--------------------
I'm really sorry to bored you, but in the page are not an clear example about how to use the proxy, thank for help a newbe :)


Regards,

Luis

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to