Armin
I was able to recreate the problem. Our order.add(cs) method iterates through
the collection of slugs and returns a sequenceId one greater than the largest
number. In the case of the 2nd insert, the collection of slugs is empty
therefore sequenceId = 1. We have 2 constraints on the Coupon_Slugs table
CONSTRAINT PK_COUPON_SLUGS
PRIMARY KEY CLUSTERED (Order_id,Coupon_Slug_Sequence_id),
CONSTRAINT AK_CouponSlugs
UNIQUE NONCLUSTERED (Coupon_Slug_id)
OJB appears to be attempting to insert the 2nd slug before deleting the first,
therefore we break on the PK_COUPON_SLUGS constraint.
deb
-----Original Message-----
From: Armin Waibel [mailto:[EMAIL PROTECTED]
Sent: Friday, February 18, 2005 8:49 PM
To: OJB Users List
Subject: Re: Persistence question
Hi Deb,
the declaration of the 1:n relation between Order and CouponSlug is
correct. If you copy or serialize CouponSlug objects it's not allowed to
declare the 'orderId' field anonymous (only in conjunction with 1:1
references)
http://db.apache.org/ojb/docu/guides/advanced-technique.html#How+do+
If this isn't the problem, please send to my account a test case showing
the problem (or a file with detailed pseudo code). Then I will try to
setup your problem locally with existing classes in OJB tests suite.
regards,
Armin
Deborah Nunley wrote:
> Armin
>
> Did involved objects Order or CouponSlug or Product share their database
> table with other objects? No - We do not have a product class.
>
> If yes, do you use ojbContrecteClass feature? N/A
>
> Which sequence manager do you use? Our own
>
> Additionally
> When we are storing the 2nd product, the "deleted" CouponSlug is showing up
> in the RemovalAwareCollection under ItemsToBeRemoved, but no SQL DELETE call
> is ever made.
>
> Deb
>
> -----Original Message-----
> From: Armin Waibel [mailto:[EMAIL PROTECTED]
> Sent: Friday, February 18, 2005 12:12 PM
> To: OJB Users List
> Subject: Re: Persistence question
>
>
> seems the constraint violation occur when OJB try to store an 1:n
> relation of the order object. Does CouponSlug inherit from Product or is
> it used in a separate relation of Order? Is it possible to post the
> class-descriptor for Order, Product and CouponSlug?
> Did involved objects Order or CouponSlug or Product share their database
> table with other objects? If yes, do you use ojbContrecteClass feature?
> Which sequence manager do you use?
>
> regards,
> Armin
>
>
> Deborah Nunley wrote:
>
>>db-ojb-1.0.1
>>PersistenceBroker
>>
>>INFO: Rollback was called, do rollback on current connection [EMAIL PROTECTED]
>>org.apache.ojb.broker.KeyConstraintViolatedException: SQL failure while
>>insert object data for class com.valpak.productorder.couponslug.CouponSlug,
>>PK of the given object is [ couponSlugId=665058], object was [EMAIL
>>PROTECTED],sequenceId=1,address=[],[EMAIL
>>PROTECTED],offerText=offer,additionalDisclaimerText=,[EMAIL
>>PROTECTED],sequenceId=1,[EMAIL PROTECTED],disclaimerDescription=
>>,disclaimerText=One coupon per customer.,lastUpdate=Fri Sep 18 00:00:00 EDT
>>1998]]],productImage=[],expirationDate=<null>,startDate=Tue Aug 31 00:00:00
>>EDT 2004,endDate=Tue Aug 31 00:00:00 EDT
>>2004,sequenceId=1,printLimit=0,displayExpiration=true]],webLink=[],productImage=[],printable=true,displayRanking=40000,backgroun
>
> [EMAIL PROTECTED],colorName=<null>,hexCode=<null>],[EMAIL PROTECTED],[EMAIL
> PROTECTED],couponSlugTypeName=<null>]], exception message is [Attempt to
> insert duplicate key row in object 'Coupon_Slugs' with unique index
> 'PK_COUPON_SLUGS'
>
>>]
>> at
>> org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeInsert(Unknown
>> Source)
>> at org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(Unknown
>> Source)
>> at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown
>> Source)
>> at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown
>> Source)
>> at
>> org.apache.ojb.broker.core.PersistenceBrokerImpl.storeAndLinkOneToMany(Unknown
>> Source)
>> at
>> org.apache.ojb.broker.core.PersistenceBrokerImpl.storeCollections(Unknown
>> Source)
>> at org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(Unknown
>> Source)
>> at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown
>> Source)
>> at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown
>> Source)
>> at
>> org.apache.ojb.broker.core.PersistenceBrokerImpl.storeAndLinkOneToOne(Unknown
>> Source)
>> at
>> org.apache.ojb.broker.core.PersistenceBrokerImpl.storeReferences(Unknown
>> Source)
>> at org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(Unknown
>> Source)
>> at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown
>> Source)
>> at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown
>> Source)
>> at org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(Unknown
>> Source)
>> at org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(Unknown
>> Source)
>> at
>> com.valpak.persistence.ojb.OJBPersistenceServiceImpl.storeObject(OJBPersistenceServiceImpl.java:96)
>> at
>> com.valpak.vpcoladminservice.VPColAdminServiceImpl.storeOrder(VPColAdminServiceImpl.java:119)
>> at
>> com.valpak.vpcoladmin.action.ProcessOrder.processSave(ProcessOrder.java:176)
>> at
>> com.valpak.vpcoladmin.action.ProcessOrder.executeAction(ProcessOrder.java:125)
>> at
>> com.valpak.vpcoladmin.action.VPColAdminBaseAction.execute(VPColAdminBaseAction.java:43)
>> at
>> org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
>> at
>> org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
>> at
>> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1480)
>> at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:524)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>> at
>> com.newatlanta.servletexec.ServletExec.CallServletService(ServletExec.java:1650)
>> at
>> com.newatlanta.servletexec.SERequestDispatcher.forwardServlet(SERequestDispatcher.java:274)
>> at
>> com.newatlanta.servletexec.SERequestDispatcher.forward(SERequestDispatcher.java:191)
>> at
>> com.newatlanta.servletexec.ApplicationInfo.processApplRequest(ApplicationInfo.java:1313)
>> at
>> com.newatlanta.servletexec.ServerHostInfo.processApplRequest(ServerHostInfo.java:958)
>> at
>> com.newatlanta.servletexec.ServletExec.ProcessRequest(ServletExec.java:1206)
>> at
>> com.newatlanta.servletexec.ServletExec.ProcessRequest(ServletExec.java:1056)
>> at
>> com.newatlanta.sedebugger.Responder.processServletRequest(Responder.java:269)
>> at com.newatlanta.sedebugger.Responder.run(Responder.java:92)
>>Caused by: com.sybase.jdbc2.jdbc.SybSQLException: Attempt to insert duplicate
>>key row in object 'Coupon_Slugs' with unique index 'PK_COUPON_SLUGS'
>>
>> at com.sybase.jdbc2.tds.Tds.processEed(Tds.java:2738)
>> at com.sybase.jdbc2.tds.Tds.nextResult(Tds.java:2069)
>> at com.sybase.jdbc2.jdbc.ResultGetter.nextResult(ResultGetter.java:69)
>> at com.sybase.jdbc2.jdbc.SybStatement.nextResult(SybStatement.java:204)
>> at com.sybase.jdbc2.jdbc.SybStatement.nextResult(SybStatement.java:187)
>> at com.sybase.jdbc2.jdbc.SybStatement.updateLoop(SybStatement.java:1667)
>> at
>> com.sybase.jdbc2.jdbc.SybStatement.executeUpdate(SybStatement.java:1650)
>> at
>> com.sybase.jdbc2.jdbc.SybPreparedStatement.executeUpdate(SybPreparedStatement.java:104)
>> ... 36 more
>>com.valpak.exceptions.StoreException: SQL failure while insert object data
>>for class com.valpak.productorder.couponslug.CouponSlug, PK of the given
>>object is [ couponSlugId=665058], object was [EMAIL
>>PROTECTED],sequenceId=1,address=[],[EMAIL
>>PROTECTED],offerText=offer,additionalDisclaimerText=,[EMAIL
>>PROTECTED],sequenceId=1,[EMAIL PROTECTED],disclaimerDescription=
>>,disclaimerText=One coupon per customer.,lastUpdate=Fri Sep 18 00:00:00 EDT
>>1998]]],productImage=[],expirationDate=<null>,startDate=Tue Aug 31 00:00:00
>>EDT 2004,endDate=Tue Aug 31 00:00:00 EDT
>>2004,sequenceId=1,printLimit=0,displayExpiration=true]],webLink=[],productImage=[],printable=true,displayRanking=40000,background=com.valpak.col
>
> [EMAIL PROTECTED],colorName=<null>,hexCode=<null>],[EMAIL PROTECTED],[EMAIL
> PROTECTED],couponSlugTypeName=<null>]], exception message is [Attempt to
> insert duplicate key row in object 'Coupon_Slugs' with unique index
> 'PK_COUPON_SLUGS'
>
>>][org.apache.ojb.broker.core.PersistenceBrokerImpl] DEBUG: PB.close was
>>called: [EMAIL PROTECTED]
>>
>> at
>> com.valpak.persistence.ojb.OJBPersistenceServiceImpl.storeObject(OJBPersistenceServiceImpl.java:104)
>> at
>> com.valpak.vpcoladminservice.VPColAdminServiceImpl.storeOrder(VPColAdminServiceImpl.java:119)
>> at
>> com.valpak.vpcoladmin.action.ProcessOrder.processSave(ProcessOrder.java:176)
>> at
>> com.valpak.vpcoladmin.action.ProcessOrder.executeAction(ProcessOrder.java:125)
>> at
>> com.valpak.vpcoladmin.action.VPColAdminBaseAction.execute(VPColAdminBaseAction.java:43)
>> at
>> org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
>> at
>> org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
>> at
>> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1480)
>> at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:524)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>> at
>> com.newatlanta.servletexec.ServletExec.CallServletService(ServletExec.java:1650)
>> at
>> com.newatlanta.servletexec.SERequestDispatcher.forwardServlet(SERequestDispatcher.java:274)
>> at
>> com.newatlanta.servletexec.SERequestDispatcher.forward(SERequestDispatcher.java:191)
>> at
>> com.newatlanta.servletexec.ApplicationInfo.processApplRequest(ApplicationInfo.java:1313)
>> at
>> com.newatlanta.servletexec.ServerHostInfo.processApplRequest(ServerHostInfo.java:958)[2005-02-18
>> 10:52:30,231] com.valpak.vpcoladmin.action.VPColAdminBaseAction -
>> com.valpak.exceptions.StoreException: SQL failure while insert object data
>> for class com.valpak.productorder.couponslug.CouponSlug, PK of the given
>> object is [ couponSlugId=665058], object was [EMAIL
>> PROTECTED],sequenceId=1,address=[],[EMAIL
>> PROTECTED],offerText=offer,additionalDisclaimerText=,[EMAIL
>> PROTECTED],sequenceId=1,[EMAIL PROTECTED],disclaimerDescription=
>> ,disclaimerText=One coupon per customer.,lastUpdate=Fri Sep 18 00:00:00 EDT
>> 1998]]],productImage=[],expirationDate=<null>,startDate=Tue Aug 31 00:00:00
>> EDT 2004,endDate=T
>
> ue Aug 31 00:00:00 EDT
> 2004,sequenceId=1,printLimit=0,displayExpiration=true]],webLink=[],productImage=[],printable=true,displayRanking=40000,[EMAIL
> PROTECTED],colorName=<null>,hexCode=<null>],[EMAIL PROTECTED],[EMAIL
> PROTECTED],couponSlugTypeName=<null>]], exception message is [Attempt to
> insert duplicate key row in object 'Coupon_Slugs' with unique index
> 'PK_COUPON_SLUGS'
>
>>]
>>
>> at
>> com.newatlanta.servletexec.ServletExec.ProcessRequest(ServletExec.java:1206)
>> at
>> com.newatlanta.servletexec.ServletExec.ProcessRequest(ServletExec.java:1056)
>> at
>> com.newatlanta.sedebugger.Responder.processServletRequest(Responder.java:269)
>> at com.newatlanta.sedebugger.Responder.run(Responder.java:92)
>>
>>-----Original Message-----
>>From: Armin Waibel [mailto:[EMAIL PROTECTED]
>>Sent: Friday, February 18, 2005 10:39 AM
>>To: OJB Users List
>>Subject: Re: Persistence question
>>
>>
>>Hi Deb,
>>
>>what OJB version do you use? Which api?
>>Could you post the whole stack trace.
>>
>>regards,
>>Armin
>>
>>Deborah Nunley wrote:
>>
>>
>>>Sequence of events
>>>
>>>I create the order with a product and persist it twice (as we gather
>>>information).
>>>I delete the product from the order (within the application).
>>>I add another product to the order.
>>>I save the order again.
>>>
>>>Everything looks good from the debugger but I get the following exception
>>>
>>>SQL failure while insert object data for class
>>>com.valpak.productorder.couponslug.CouponSlug, PK of the given object is [
>>>couponSlugId=665055], object was [EMAIL
>>>PROTECTED],sequenceId=1,address=[],[EMAIL
>>>PROTECTED],offerText=offer,additionalDisclaimerText=,couponSlugDisclaimer=[],productImage=[],expirationDate=<null>,startDate=Tue
>>> Aug 31 00:00:00 EDT 2004,endDate=Wed Aug 31 00:00:00 EDT
>>>2005,sequenceId=1,printLimit=0,displayExpiration=true]],webLink=[],productImage=[],printable=true,displayRanking=39000,[EMAIL
>>> PROTECTED],colorName=<null>,hexCode=<null>],[EMAIL PROTECTED],[EMAIL
>>>PROTECTED],couponSlugTypeName=<null>]], exception message is [Attempt to
>>>insert duplicate key row in object 'Coupon_Slugs' with unique ind
e
>
>
>>x 'PK_COUPON_SLUGS'
>>
>>
>>>Deb Nunley
>>>
>>>
>>
>>
>>---------------------------------------------------------------------
>>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]
>>
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
> ------------------------------------------------------------------------
>
> <class-descriptor
> class="com.valpak.productorder.couponslug.CouponSlug"
> table="Coupon_Slugs">
>
> <field-descriptor
> name="orderId"
> column="Order_id"
> jdbc-type="INTEGER"
> access="anonymous">
> </field-descriptor>
>
> <field-descriptor
> name="couponSlugId"
> column="Coupon_Slug_id"
> jdbc-type="INTEGER"
> autoincrement="true"
> sequence-name="dp_AutoGen"
> primarykey="true">
> </field-descriptor>
>
> <field-descriptor
> name="couponSlugTypeId"
> column="Coupon_Slug_Type_id"
> jdbc-type="INTEGER"
> access="anonymous">
> </field-descriptor>
> <reference-descriptor
> name="couponSlugType"
> auto-retrieve="true"
> auto-update="false"
> auto-delete="false"
> class-ref="com.valpak.productorder.couponslug.CouponSlugType">
> <foreignkey field-ref="couponSlugTypeId"/>
> </reference-descriptor>
>
> <field-descriptor
> name="sequenceId"
> column="Coupon_Slug_Sequence_id"
> jdbc-type="INTEGER">
> </field-descriptor>
>
> <field-descriptor
> name="displayRanking"
> column="Display_Rank"
> jdbc-type="INTEGER">
> </field-descriptor>
>
> <field-descriptor
> name="printable"
> column="Printable"
> jdbc-type="BIT">
> </field-descriptor>
>
>
>
> <collection-descriptor
> name="webLink"
>
> element-class-ref="com.valpak.productorder.couponslug.CouponSlugWebLink"
> auto-retrieve="true"
> auto-update="true"
> auto-delete="true">
> <inverse-foreignkey field-ref="couponSlugId"/>
> </collection-descriptor>
>
> <collection-descriptor
> name="productImage"
> element-class-ref="com.valpak.product.option.ProductImage"
> indirection-table="Coupon_Slug_Images"
> auto-retrieve="true"
> auto-update="true"
> auto-delete="true">
> <fk-pointing-to-this-class column="Coupon_Slug_id"/>
> <fk-pointing-to-element-class column="Image_id"/>
> </collection-descriptor>
>
> <field-descriptor
> name="colorId"
> column="Color_id"
> jdbc-type="INTEGER"
> access="anonymous">
> </field-descriptor>
> <reference-descriptor
> name="background"
> auto-retrieve="true"
> auto-update="false"
> auto-delete="false"
> class-ref="com.valpak.color.Color">
> <foreignkey field-ref="colorId"/>
> </reference-descriptor>
>
> <collection-descriptor
> name="address"
>
> element-class-ref="com.valpak.productorder.couponslug.CouponSlugAddress"
> auto-retrieve="true"
> auto-update="true"
> auto-delete="true">
> <inverse-foreignkey field-ref="couponSlugId"/>
> </collection-descriptor>
>
> <collection-descriptor
> name="offer"
> element-class-ref="com.valpak.productorder.couponslug.CouponSlugOffer"
> auto-retrieve="true"
> auto-update="true"
> auto-delete="true">
> <inverse-foreignkey field-ref="couponSlugId"/>
> </collection-descriptor>
>
> <field-descriptor
> name="zoneMapId"
> column="Zone_Map_id"
> access="anonymous"
> jdbc-type="INTEGER">
> </field-descriptor>
> <reference-descriptor
> name="zoneMap"
> auto-retrieve="true"
> auto-update="true"
> auto-delete="false"
> class-ref="com.valpak.targetedcontent.ZoneMap">
> <foreignkey field-ref="zoneMapId"/>
> </reference-descriptor>
> </class-descriptor>
>
> <class-descriptor
> class="com.valpak.order.Order"
> table="Orders">
>
>
> <field-descriptor
> name="orderId"
> column="Order_id"
> jdbc-type="INTEGER"
> autoincrement="true"
> sequence-name="dp_AutoGen"
> primarykey="true">
> </field-descriptor>
>
> <field-descriptor
> name="businessName"
> column="Business_Name"
> jdbc-type="VARCHAR">
> </field-descriptor>
>
> <field-descriptor
> name="dataPartnerId"
> column="Data_Partner_id"
> jdbc-type="INTEGER"
> access="anonymous">
> </field-descriptor>
> <reference-descriptor
> name="dataPartner"
> auto-retrieve="true"
> auto-update="false"
> auto-delete="false"
> class-ref="com.valpak.partner.DataPartner">
> <foreignkey field-ref="dataPartnerId"/>
> </reference-descriptor>
>
> <field-descriptor
> name="orderStatusId"
> column="Order_Status_id"
> jdbc-type="VARCHAR"
> access="anonymous">
> </field-descriptor>
> <reference-descriptor
> name="status"
> auto-retrieve="true"
> auto-update="false"
> auto-delete="false"
> class-ref="com.valpak.order.OrderStatus">
> <foreignkey field-ref="orderStatusId"/>
> </reference-descriptor>
>
> <field-descriptor
> name="tcDescriptorId"
> column="Targeted_Content_Descriptor_id"
> jdbc-type="INTEGER"
> access="anonymous">
> </field-descriptor>
> <reference-descriptor
> name="tcDescriptor"
> auto-retrieve="true"
> auto-update="true"
> auto-delete="true"
>
> class-ref="com.valpak.targetedcontent.TargetedContentDescriptor">
> <foreignkey field-ref="tcDescriptorId"/>
> </reference-descriptor>
>
> <field-descriptor
> name="naicsId"
> column="NAIC_id"
> jdbc-type="INTEGER"
> access="anonymous">
> </field-descriptor>
> <reference-descriptor
> name="naics"
> auto-retrieve="true"
> auto-update="false"
> auto-delete="false"
> class-ref="com.valpak.naics.VPColNaics">
> <foreignkey field-ref="naicsId"/>
> </reference-descriptor>
>
> <collection-descriptor
> name="couponSlug"
> element-class-ref="com.valpak.productorder.couponslug.CouponSlug"
> auto-retrieve="true"
> auto-update="true"
> auto-delete="true">
> <inverse-foreignkey field-ref="orderId"/>
> </collection-descriptor>
>
> <collection-descriptor
> name="targetedLink"
> element-class-ref="com.valpak.productorder.targetedlink.TargetedLink"
> auto-retrieve="true"
> auto-update="true"
> auto-delete="true">
> <inverse-foreignkey field-ref="orderId"/>
> </collection-descriptor>
>
> <collection-descriptor
> name="transactionHistory"
> element-class-ref="com.valpak.order.OrderTransactionHistory"
> auto-retrieve="true"
> auto-update="true"
> auto-delete="true">
> <inverse-foreignkey field-ref="orderId"/>
> </collection-descriptor>
>
>
> <collection-descriptor
> name="salesStaff"
> element-class-ref="com.valpak.order.SalesStaffOrder"
> auto-retrieve="true"
> auto-update="true"
> auto-delete="true">
> <inverse-foreignkey field-ref="orderId"/>
> </collection-descriptor>
> </class-descriptor>
>
>
>
>
>
>
>
>
>
> ------------------------------------------------------------------------
>
> ---------------------------------------------------------------------
> 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]
<class-descriptor
class="com.valpak.order.Order"
table="tempdb..Orders">
<field-descriptor
name="orderId"
column="Order_id"
jdbc-type="INTEGER"
autoincrement="true"
sequence-name="dp_AutoGen"
primarykey="true">
</field-descriptor>
<collection-descriptor
name="couponSlug"
element-class-ref="com.valpak.productorder.couponslug.CouponSlug"
auto-retrieve="true"
auto-update="true"
auto-delete="true">
<inverse-foreignkey field-ref="orderId"/>
</collection-descriptor>
</class-descriptor>
<class-descriptor
class="com.valpak.productorder.couponslug.CouponSlug"
table="tempdb..Coupon_Slugs">
<field-descriptor
name="orderId"
column="Order_id"
jdbc-type="INTEGER"
access="anonymous">
</field-descriptor>
<field-descriptor
name="couponSlugId"
column="Coupon_Slug_id"
jdbc-type="INTEGER"
autoincrement="true"
sequence-name="dp_AutoGen"
primarykey="true">
</field-descriptor>
<field-descriptor
name="sequenceId"
column="Coupon_Slug_Sequence_id"
jdbc-type="INTEGER">
</field-descriptor>
</class-descriptor>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]