From may03307 at gmail.com Mon May 5 11:11:35 2008 From: may03307 at gmail.com (=?GB2312?B?zau54sC8?=) Date: Mon, 5 May 2008 16:11:35 +0100 Subject: [Biojava-l] codon position Message-ID: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> Hi, everyone I will do a program to calculate the cg skew for each codon position (first base, second base and third base) as well as for the whole gene. For each codon position, I found the method to get the codons: SymbolList codons = SymbolListViews.windowedSymbolList (dna, 3); Are there any method or package can get the first, second or third letter from each codon? Thanks a lot! Lan From may03307 at gmail.com Mon May 5 11:11:35 2008 From: may03307 at gmail.com (=?GB2312?B?zau54sC8?=) Date: Mon, 5 May 2008 16:11:35 +0100 Subject: [Biojava-l] codon position Message-ID: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> Hi, everyone I will do a program to calculate the cg skew for each codon position (first base, second base and third base) as well as for the whole gene. For each codon position, I found the method to get the codons: SymbolList codons = SymbolListViews.windowedSymbolList (dna, 3); Are there any method or package can get the first, second or third letter from each codon? Thanks a lot! Lan From markjschreiber at gmail.com Mon May 5 21:59:04 2008 From: markjschreiber at gmail.com (Mark Schreiber) Date: Tue, 6 May 2008 09:59:04 +0800 Subject: [Biojava-l] codon position In-Reply-To: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> References: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> Message-ID: <93b45ca50805051859r124378c8y5e519ff302036b6a@mail.gmail.com> Hi - The listing at the this URL shows how to break a codon into it's component symbols. http://biojava.org/wiki/BioJava:Cookbook:Alphabets:Component - Mark On Mon, May 5, 2008 at 11:11 PM, ?????? wrote: > Hi, everyone > > I will do a program to calculate the cg skew for each codon position (first > base, second base and third base) as well as for the whole gene. For each > codon position, I found the method to get the codons: > > SymbolList codons = SymbolListViews.windowedSymbolList (dna, 3); > > Are there any method or package can get the first, second or third letter > from each codon? > > Thanks a lot! > Lan > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From markjschreiber at gmail.com Mon May 5 21:59:04 2008 From: markjschreiber at gmail.com (Mark Schreiber) Date: Tue, 6 May 2008 09:59:04 +0800 Subject: [Biojava-l] codon position In-Reply-To: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> References: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> Message-ID: <93b45ca50805051859r124378c8y5e519ff302036b6a@mail.gmail.com> Hi - The listing at the this URL shows how to break a codon into it's component symbols. http://biojava.org/wiki/BioJava:Cookbook:Alphabets:Component - Mark On Mon, May 5, 2008 at 11:11 PM, ?????? wrote: > Hi, everyone > > I will do a program to calculate the cg skew for each codon position (first > base, second base and third base) as well as for the whole gene. For each > codon position, I found the method to get the codons: > > SymbolList codons = SymbolListViews.windowedSymbolList (dna, 3); > > Are there any method or package can get the first, second or third letter > from each codon? > > Thanks a lot! > Lan > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From mail at florianschatz.de Wed May 7 06:15:36 2008 From: mail at florianschatz.de (Florian Schatz) Date: Wed, 7 May 2008 12:15:36 +0200 Subject: [Biojava-l] Gene direction Message-ID: Hello, is there any way to find out the direction of a gene, parsed from a Genbank file? e.g.: Genbank file: gene 185510..186463 or gene complement(203350..203505) I can not find something in the .getLocation() nor in the .getAnnotation() of a gene-Feature. Best, Florian From martin.jones at ed.ac.uk Wed May 7 06:36:53 2008 From: martin.jones at ed.ac.uk (Martin Jones) Date: Wed, 7 May 2008 11:36:53 +0100 Subject: [Biojava-l] Gene direction In-Reply-To: References: Message-ID: Hi, I've recently faced the same problem. Try this: RichSequenceIterator seqs = RichSequence.IOTools.readGenbankDNA(in, null); RichSequence mySeq = seqs.nextRichSequence(); for (Object o : mySeq.getFeatureSet()) { RichFeature f = (RichFeature) o; RichLocation l = (RichLocation) f.getLocation(); System.out.println("strand is " + l.getStrand().getName()); } I think that getStrand().getName() will return either "+" or "-". If you're looking at a genbank record for a single gene, you'll probably have a single "gene" feature and a single "CDS" feature. Martin 2008/5/7 Florian Schatz : > Hello, > > is there any way to find out the direction of a gene, parsed from a Genbank > file? > e.g.: Genbank file: > gene 185510..186463 > or > gene complement(203350..203505) > > I can not find something in the .getLocation() nor in the .getAnnotation() > of a gene-Feature. > > Best, > Florian > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > > -- ------------------------ Martin Jones School of Biological Sciences, Ashworth Laboratories, King's Buildings Edinburgh, EH9 3JT, UK From community at struck.lu Wed May 7 06:31:14 2008 From: community at struck.lu (community at struck.lu) Date: Wed, 07 May 2008 12:31:14 +0200 Subject: [Biojava-l] single letter code from protein ambiguities? Message-ID: Hi,I am just beginning to use biojava and I have a question concerning the parsing of protein sequences containing ambiguities:Is it possible to get all the possible amino acids at each position of the protein sequence with a single letter code instead of the three letter code?Suppose I would translate a DNA sequence containing an "N", so the protein translation would also contain ambiguities:SymbolList symL = DNATools.createDNA("atnatg");SymbolList symL2 = DNATools.toProtein(symL);Iterator symIt = symL2.iterator();System.out.println(symL2.seqString());OUTPUT:XMSymbol hm;while (symIt.hasNext()) {    hm = (Symbol) symIt.next();    System.out.println(hm.getName());}OUTOUT:[MET ILE]METWould it be possible to ouput:MIMRegards,Daniel Struck _________________________________________________________ Mail sent using root eSolutions Webmailer - www.root.lu From markjschreiber at gmail.com Wed May 7 06:54:49 2008 From: markjschreiber at gmail.com (Mark Schreiber) Date: Wed, 7 May 2008 18:54:49 +0800 Subject: [Biojava-l] single letter code from protein ambiguities? In-Reply-To: References: Message-ID: <93b45ca50805070354q540a3147tef59034b74d430f2@mail.gmail.com> Hi - Yes, this is absolutely possible. If biojava can create an unambigous amino acid from an ambigous codon it will. If the possible amino acids are a choice of 2 or more an ambiguity symbol (BasisSymbol) is created that contains those amino acids. Note that if you turn any ambiguous amino acid into a String then you will just get an X so you need to decompose it into it's underlying AtomicSymbols. See http://biojava.org/wiki/BioJava:Cookbook:Alphabets:Ambiguous for some idea (except in your case you need to do the reverse). This would make another nice example for the cookbook so when you get some demo code working it would be good if you could put it up on the wiki. - Mark On Wed, May 7, 2008 at 6:31 PM, community at struck.lu wrote: > Hi,I am just beginning to use biojava and I have a question concerning the > parsing of protein sequences containing ambiguities:Is it possible to get all > the possible amino acids at each position of the protein sequence with a > single letter code instead of the three letter code?Suppose I would translate > a DNA sequence containing an "N", so the protein translation would > also contain ambiguities:SymbolList symL = > DNATools.createDNA("atnatg");SymbolList symL2 = > DNATools.toProtein(symL);Iterator symIt = > symL2.iterator();System.out.println(symL2.seqString());OUTPUT:XMSymbol > hm;while (symIt.hasNext()) {    hm = (Symbol) > symIt.next();    System.out.println(hm.getName());}OUTOUT:[MET > ILE]METWould it be possible to ouput:MIMRegards,Daniel Struck > _________________________________________________________ > Mail sent using root eSolutions Webmailer - www.root.lu > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From gcappuccilli at protelix.com Thu May 8 11:25:32 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Thu, 8 May 2008 08:25:32 -0700 Subject: [Biojava-l] BioEntryRelationship query problem Message-ID: First of all, I am new here so I apologize in advance if I am discussing something obvious. Moreover I am far from being a BioJava or Hibernate guru. I am working on a small project using BioJava (1.6) + BioSQL (1.0) (mysql 4.1.22 on Mac OS X server 10.4.11). I want to persist relationships between BioEntry objects. Storing objects to DB didn't give any problems. Sample code: Transaction tx=s.beginTransaction(); try { ComparableTerm term=RichObjectFactory.getDefaultOntology ().getOrCreateTerm("TestTerm"); Namespace ns=RichObjectFactory.getDefaultNamespace(); BioEntry parent=new SimpleBioEntry(ns, "parentbe", "pACCESSION",0); BioEntry child=new SimpleBioEntry(ns, "childbe", "cACCESSION",0); BioEntryRelationship rel=new SimpleBioEntryRelationship (parent, child, term, null); parent.addRelationship(rel); s.saveOrUpdate("BioEntry",parent ); tx.commit(); } catch (Exception ex) { tx.rollback(); } When I started to query the db I got errors from hibernate (see below). After digging a little I found out that hibernate couldn't query the Bioentry_relationship table. Even a simple "from BioEntryRelationship" query was giving me these errors. 09:43:19,088 ERROR BasicPropertyAccessor:94 - IllegalArgumentException in class: org.biojavax.bio.SimpleBioEntryRelationship, setter method of property: object 09:43:19,089 ERROR BasicPropertyAccessor:98 - expected type: org.biojavax.bio.BioEntry, actual value: org.biojavax.bio.seq.SimpleRichFeature$$EnhancerByCGLIB$$91b34b44 Checking the mapping files I found the following line in the BioEntryRelationship.hbm.xml: It looked strange to me. So I've changed to Now I can query relationships without problems. Did I do the right thing or I am messing up the mapping and I am breaking something else? If this has been already discussed I apologize and I would appreciate a link to the original thread. Thank you in advance G. From armita_sh at yahoo.com Tue May 13 13:49:26 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:26 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <739889.77239.qm@web51405.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From armita_sh at yahoo.com Tue May 13 13:49:31 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:31 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <876778.61385.qm@web51409.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From armita_sh at yahoo.com Tue May 13 13:49:42 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:42 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <862338.69656.qm@web51402.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From armita_sh at yahoo.com Tue May 13 13:49:47 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:47 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <403542.32695.qm@web51410.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From armita_sh at yahoo.com Tue May 13 13:49:52 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:52 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <196253.35082.qm@web51411.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From ap3 at sanger.ac.uk Wed May 14 08:20:53 2008 From: ap3 at sanger.ac.uk (Andreas Prlic) Date: Wed, 14 May 2008 13:20:53 +0100 Subject: [Biojava-l] Constructing Backbone of Protein In-Reply-To: <403542.32695.qm@web51410.mail.re2.yahoo.com> References: <403542.32695.qm@web51410.mail.re2.yahoo.com> Message-ID: <318B9A5F-4F2D-4A95-845D-B4B81B0397FD@sanger.ac.uk> Hi Armita, > I need to write a program that can construct the backbone of the > protein from its sequence and the relevant phi and psi angles. I > want to know if there is a class or method that can help me to > calculate the coordinates form phi and psi angles! Where do you get the phi and psi angles from? sounds a bit like a protein structure prediction problem, which Biojava can not do. If you have a structure and you want to get the phi and psi angles, you can have a look at the example in the docu: http://www.biojava.org/ docs/api16/org/biojava/bio/structure/Structure.html There are also some tools for calculations on atoms and amino acids available from: http://www.biojava.org/docs/api16/org/biojava/bio/structure/Calc.html Cheers, Andreas ----------------------------------------------------------------------- Andreas Prlic Wellcome Trust Sanger Institute Hinxton, Cambridge CB10 1SA, UK +44 (0) 1223 49 6891 ----------------------------------------------------------------------- -- The Wellcome Trust Sanger Institute is operated by Genome Research Limited, a charity registered in England with number 1021457 and a company registered in England with number 2742969, whose registered office is 215 Euston Road, London, NW1 2BE. From community at struck.lu Mon May 19 05:35:54 2008 From: community at struck.lu (community at struck.lu) Date: Mon, 19 May 2008 11:35:54 +0200 Subject: [Biojava-l] single letter code from protein ambiguities? In-Reply-To: <93b45ca50805070354q540a3147tef59034b74d430f2@mail.gmail.com> References: <93b45ca50805070354q540a3147tef59034b74d430f2@mail.gmail.com> Message-ID: Thank you for pointing me in the right direction:##################################             SymbolList symL = DNATools.createDNA("atnatggnnatg");            SymbolList symL2 = DNATools.toProtein(symL);            System.out.println(symL2.seqString());            for (Iterator i = symL2.iterator(); i.hasNext();) {                Symbol sym = (Symbol) i.next();                System.out.println(sym.getName() + "#");            }            SymbolTokenization toke = symL2.getAlphabet().getTokenization("token");            for (Iterator i = symL2.iterator(); i.hasNext();) {                Symbol sym = (Symbol) i.next();                Alphabet arg = sym.getMatches();                for (Iterator i2 = ((FiniteAlphabet) arg).iterator(); i2.hasNext();) {                    Symbol sym2 = (Symbol) i2.next();                    System.out.println("toke: "+toke.tokenizeSymbol(sym2));                    System.out.println("name: "+sym2.getName());                }                System.out.println("\n");            }################################## This will print out the single letter code: System.out.println("toke: "+toke.tokenizeSymbol(sym2)); This will print out the three letter code: System.out.println("name: "+sym2.getName()); Do you think it is worthwhile to put this sample code in the wiki?Thanks,Daniel"Mark Schreiber" <markjschreiber at gmail.com> wrote: > Hi - > > Yes, this is absolutely possible. If biojava can create an unambigous > amino acid from an ambigous codon it will. If the possible amino acids > are a choice of 2 or more an ambiguity symbol (BasisSymbol) is created > that contains those amino acids. > > Note that if you turn any ambiguous amino acid into a String then you > will just get an X so you need to decompose it into it's underlying > AtomicSymbols. > > See http://biojava.org/wiki/BioJava:Cookbook:Alphabets:Ambiguous for > some idea (except in your case you need to do the reverse). > > This would make another nice example for the cookbook so when you get > some demo code working it would be good if you could put it up on the > wiki. > > - Mark > > On Wed, May 7, 2008 at 6:31 PM, community at struck.lu <community at struck.lu> > wrote: > > Hi,I am just beginning to use biojava and I have a question concerning the > > parsing of protein sequences containing ambiguities:Is it possible to get > all > > the possible amino acids at each position of the protein sequence with a > > single letter code instead of the three letter code?Suppose I would > translate > > a DNA sequence containing an &quot;N&quot;, so the protein translation would > > also contain ambiguities:SymbolList symL = > > DNATools.createDNA(&quot;atnatg&quot;);SymbolList symL2 = > > DNATools.toProtein(symL);Iterator symIt = > > symL2.iterator();System.out.println(symL2.seqString());OUTPUT:XMSymbol > > hm;while (symIt.hasNext()) {&nbsp;&nbsp;&nbsp; hm = (Symbol) > > symIt.next();&nbsp;&nbsp;&nbsp; > System.out.println(hm.getName());}OUTOUT:[MET > > ILE]METWould it be possible to ouput:MIMRegards,Daniel Struck > > _________________________________________________________ > > Mail sent using root eSolutions Webmailer - www.root.lu > > _______________________________________________ > > Biojava-l mailing list - Biojava-l at lists.open-bio.org > > http://lists.open-bio.org/mailman/listinfo/biojava-l > > > _________________________________________________________ Mail sent using root eSolutions Webmailer - www.root.lu From ap3 at sanger.ac.uk Mon May 19 11:56:38 2008 From: ap3 at sanger.ac.uk (Andreas Prlic) Date: Mon, 19 May 2008 16:56:38 +0100 Subject: [Biojava-l] Open DAS position Message-ID: Hi, The Wellcome Trust Sanger Institute has an open position for a DAS developer (see below). If you have further questions please contact me - ap3 at sanger.ac.uk see also: http://www.sanger.ac.uk/cgi-bin/careers/jobs/jobslist? action=item;format=html;id=742;location=external Andreas === The Wellcome Trust Sanger Institute leads the world in genomic research, with an expanding scientific programme dedicated to understanding gene function in health & disease. With several hundred servers provided by more than 40 institutions, the Distributed Annotation System (DAS) is a frequently used data integration technology both internationally and within the Sanger Institute. We are looking for a Senior Web Developer who will be responsible to further develop, maintain, and coordinate the DAS activities within the Sanger Institute and in close collaboration with the international community that has grown around DAS. You will be involved in maintaining and further developing DAS by implementation of high quality, user-friendly code and applications.You will ensure that the Institute's data resources are made available worldwide in highly reliable services. Good communication skills are essential as the role involves liaising with lab scientists and bioinformatitions. Occasional traveling might be required. Qualifications: Bioinformatics/Computer Science degree or relevant experience. Experience of working with the following is essential: Java and/or PERL programming language (including object oriented software design) in a Unix/Linux environment, MySQL. Experience of working with the following is desirable: A good knowledge of Linux systems, a good understanding of web technologies, web systems administration (Apache) and web architecture design, web services (REST,SOAP), HTML/CSS/Javascript/ AJAX. Knowledge of the Ensembl API and DAS would be advantageous. For further information regarding the post, please contact ap3 at sanger.ac.uk Salary range for this position is ?27,316 to ?36,951. We offer a comprehensive range of benefits including a final salary pension scheme and excellent on-site facilities. Further details can be found on our website www.sanger.ac.uk/careers/jobs/ To apply for this position please email a covering letter, CV (including 2 referees) and current salary details, quoting reference SW1662 to: recruit at sanger.ac.uk. Or post your application to: Human Resources Department, The Wellcome Trust Sanger Institute, Genome Campus, Hinxton, Cambridge, CB10 1SA, UK. The closing date for applications is 15th June 2008. ----------------------------------------------------------------------- Andreas Prlic Wellcome Trust Sanger Institute Hinxton, Cambridge CB10 1SA, UK +44 (0) 1223 49 6891 ----------------------------------------------------------------------- -- The Wellcome Trust Sanger Institute is operated by Genome Research Limited, a charity registered in England with number 1021457 and a company registered in England with number 2742969, whose registered office is 215 Euston Road, London, NW1 2BE. From gwu at molbio.mgh.harvard.edu Tue May 20 14:03:35 2008 From: gwu at molbio.mgh.harvard.edu (gang wu) Date: Tue, 20 May 2008 14:03:35 -0400 Subject: [Biojava-l] Load/Update Genbank sequence issue Message-ID: <48331277.7060105@molbio.mgh.harvard.edu> Hi all, I'm trying to load Genbank sequence into BioSQL database with BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the exception when loading new sequences or reloading the same sequence. Seems the Hibernate is trying to insert "genbank" namespace again. Can anybody tell me what I did wrong? Thanks in advance. Gang ================================================================ public class SequenceLoaderNew { public void loadSeq(String fileName, String namespace) throws FileNotFoundException, BioException { System.out.println("Start loading file " + fileName + " at " + System.currentTimeMillis()); BufferedReader br = new BufferedReader(new FileReader(fileName)); Session session = new Configuration().configure().buildSessionFactory().openSession(); RichObjectFactory.connectToBioSQL(session); RichSequenceDB db = new BioSQLRichSequenceDB(session); RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new SimpleNamespace(namespace)); while (rsi.hasNext()) { Transaction tx = session.beginTransaction(); RichSequence sequence = rsi.nextRichSequence(); System.out.println("Loaded sequence" + sequence.getAccession() + ", identifier: " + sequence.getIdentifier()); try { System.out.println("Delete sequence" + sequence.getAccession() + " if exists."); db.removeSequence(sequence.getAccession()); } catch (Exception ex) { } try { System.out.println("Save sequence " + sequence.getAccession()); session.save("BioEntry", sequence); tx.commit(); session.flush(); session.clear(); } catch (HibernateException ex) { tx.rollback(); ex.printStackTrace(); } } } public static void main(String[] args) throws BioException, FileNotFoundException { SequenceLoaderNew sl = new SequenceLoaderNew(); //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); } } ================================================================ org.hibernate.exception.ConstraintViolationException: could not insert: [Namespace] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry 'genbank' for key 'name' at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) ... 31 more ================================================================ From gwu at molbio.mgh.harvard.edu Tue May 20 14:37:18 2008 From: gwu at molbio.mgh.harvard.edu (gang wu) Date: Tue, 20 May 2008 14:37:18 -0400 Subject: [Biojava-l] Load, Update Genbank sequence issue Message-ID: <48331A5E.9020908@molbio.mgh.harvard.edu> Hi all, I'm trying to load Genbank sequence into BioSQL database with BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the exception when loading new sequences or reloading the same sequence. Seems the Hibernate is trying to insert "genbank" namespace again. Can anybody tell me what I did wrong? Thanks in advance. Gang ================================================================ public class SequenceLoaderNew { public void loadSeq(String fileName, String namespace) throws FileNotFoundException, BioException { System.out.println("Start loading file " + fileName + " at " + System.currentTimeMillis()); BufferedReader br = new BufferedReader(new FileReader(fileName)); Session session = new Configuration().configure().buildSessionFactory().openSession(); RichObjectFactory.connectToBioSQL(session); RichSequenceDB db = new BioSQLRichSequenceDB(session); RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new SimpleNamespace(namespace)); while (rsi.hasNext()) { Transaction tx = session.beginTransaction(); RichSequence sequence = rsi.nextRichSequence(); System.out.println("Loaded sequence" + sequence.getAccession() + ", identifier: " + sequence.getIdentifier()); try { System.out.println("Delete sequence" + sequence.getAccession() + " if exists."); db.removeSequence(sequence.getAccession()); } catch (Exception ex) { } try { System.out.println("Save sequence " + sequence.getAccession()); session.save("BioEntry", sequence); tx.commit(); session.flush(); session.clear(); } catch (HibernateException ex) { tx.rollback(); ex.printStackTrace(); } } } public static void main(String[] args) throws BioException, FileNotFoundException { SequenceLoaderNew sl = new SequenceLoaderNew(); //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); } } ================================================================ org.hibernate.exception.ConstraintViolationException: could not insert: [Namespace] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry 'genbank' for key 'name' at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) ... 31 more ================================================================ From dicknetherlands at gmail.com Tue May 20 14:44:09 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Tue, 20 May 2008 19:44:09 +0100 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: References: <48331277.7060105@molbio.mgh.harvard.edu> Message-ID: Forgot to copy my reply back to the lists! ---------- Forwarded message ---------- From: Richard Holland Date: 2008/5/20 Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue To: gang wu You need to substitute this line: RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new SimpleNamespace(namespace)); with this line: Namespace ns = (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new Object[]{namespace}); RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); cheers, Richard PS. You're the second person who has quoted this section of code on this list recently, and had the same problem with it. If you got it from a website somewhere, could you send me the URL so I can get in touch with the authors and get them to correct it? Thanks! 2008/5/20 gang wu : > Hi all, > > I'm trying to load Genbank sequence into BioSQL database with > BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the > exception when loading new sequences or reloading the same sequence. Seems > the Hibernate is trying to insert "genbank" namespace again. Can anybody > tell me what I did wrong? Thanks in advance. > > Gang > > ================================================================ > public class SequenceLoaderNew { > public void loadSeq(String fileName, String namespace) throws > FileNotFoundException, BioException { > System.out.println("Start loading file " + fileName + " at " + > System.currentTimeMillis()); > BufferedReader br = new BufferedReader(new FileReader(fileName)); > Session session = new > Configuration().configure().buildSessionFactory().openSession(); > RichObjectFactory.connectToBioSQL(session); > RichSequenceDB db = new BioSQLRichSequenceDB(session); > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new > SimpleNamespace(namespace)); > while (rsi.hasNext()) { > Transaction tx = session.beginTransaction(); > RichSequence sequence = rsi.nextRichSequence(); > System.out.println("Loaded sequence" + sequence.getAccession() + > ", identifier: " + sequence.getIdentifier()); > try { > System.out.println("Delete sequence" + sequence.getAccession() > + " if exists."); > db.removeSequence(sequence.getAccession()); > } catch (Exception ex) { > } > try { > System.out.println("Save sequence " + > sequence.getAccession()); > session.save("BioEntry", sequence); > tx.commit(); > session.flush(); > session.clear(); > } catch (HibernateException ex) { > tx.rollback(); > ex.printStackTrace(); > } > } > } > > public static void main(String[] args) throws BioException, > FileNotFoundException { > SequenceLoaderNew sl = new SequenceLoaderNew(); > //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); > } > } > ================================================================ > org.hibernate.exception.ConstraintViolationException: could not insert: > [Namespace] > at > org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) > at > org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) > at > org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) > at > org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) > at > org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) > at > org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) > at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) > at > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) > at > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) > at > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) > at > org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) > at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) > at > org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) > at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) > at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) > at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) > at org.hibernate.engine.Cascade.cascade(Cascade.java:130) > at > org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) > at > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) > at > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) > at > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) > at > org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) > at > org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) > at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) > at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) > at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) > at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) > Caused by: > com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: > Duplicate entry 'genbank' for key 'name' > at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) > at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) > at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) > at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) > at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) > at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) > at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) > at > com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) > at > com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) > at > com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) > at > com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) > at > org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) > at > org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) > ... 31 more > ================================================================ > > _______________________________________________ > BioSQL-l mailing list > BioSQL-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biosql-l > From gcappuccilli at protelix.com Tue May 20 15:07:04 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Tue, 20 May 2008 12:07:04 -0700 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue Message-ID: <4CE0E6A1-F082-4A2D-AFFC-7A4233D36350@protelix.com> Looks like Richard had already answered... Sorry for the doubled reply... at least I know got it right :-))) From gcappuccilli at protelix.com Tue May 20 15:17:56 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Tue, 20 May 2008 12:17:56 -0700 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue Message-ID: I am not an expert, but I think the problem is that you try to create a new Namespace over and over. You should use singletones instead. Try to do something like this afet you connect to BioSQL: Namespace n = (Namespace) RichObjectFactory.getObject(SimpleNamespace.class, new Object[] {namespace}); And then read your genebank like this. RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, n); Agaian I am not an expert so I might be wrong. Try and let me know. Ciao Guido From gcappuccilli at protelix.com Tue May 20 14:58:35 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Tue, 20 May 2008 11:58:35 -0700 Subject: [Biojava-l] Load, Update Genbank sequence issue Message-ID: <7116E9C2-4523-4C25-A2AC-D97E74E3A662@protelix.com> I am not an expert, but I think the problem is that you try to create a new Namespace over and over. You should use singletones instead. Try to do something like this afet you connect to BioSQL: Namespace n = (Namespace) RichObjectFactory.getObject(SimpleNamespace.class, new Object[] {namespace}); And then read your genebank like this. RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, n); Again I am not an expert so I might be wrong. Try and let me know. Ciao Guido From gwu at molbio.mgh.harvard.edu Wed May 21 02:28:16 2008 From: gwu at molbio.mgh.harvard.edu (gang wu) Date: Wed, 21 May 2008 02:28:16 -0400 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: References: <48331277.7060105@molbio.mgh.harvard.edu> Message-ID: <4833C100.7040304@molbio.mgh.harvard.edu> I got another problem with almost the same code(see attached code and output). If I call the loadSeq() only once, everything works fine. The second call of the same method will fail. By the exception message, it looks like the session is not cleaned up yet though at the end of the method the session has been flush/clear/closed. Anything wrong? Or does anyone have a sequence data loader would like to share? I'm quite frustrated after keeping trying to do this seems simple thing without success. If I can make it work, I'd like to post it on the mailing list. Thanks in advance. Gang ==================================================== public class SequenceLoaderNew { public void loadSeq(String fileName, String namespace) throws FileNotFoundException, BioException, SQLException, InterruptedException { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); RichObjectFactory.connectToBioSQL(session); Namespace ns = (Namespace) RichObjectFactory.getObject(SimpleNamespace.class, new Object[]{namespace}); RichSequenceDB db = new BioSQLRichSequenceDB(session); System.out.println("Start loading file " + fileName + " at " + System.currentTimeMillis()); BufferedReader br = new BufferedReader(new FileReader(fileName)); RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); try { while (rsi.hasNext()) { RichSequence sequence = rsi.nextRichSequence(); System.out.println("Loaded sequence" + sequence.getAccession() + ", identifier: " + sequence.getIdentifier()); Transaction tx = session.beginTransaction(); try { System.out.println("Delete sequence" + sequence.getAccession() + " if exists."); db.removeSequence(sequence.getAccession()); tx.commit(); session.flush(); session.clear(); } catch (Exception ex) { if (tx != null) { tx.rollback(); } } try { tx = session.beginTransaction(); System.out.println("Save sequence " + sequence.getAccession()); //session.save("BioEntry", sequence); //db.addSequence(sequence); db.addRichSequence(sequence); tx.commit(); System.out.println("Finished savig sequence " + sequence.getAccession() + "\n"); } catch (HibernateException ex) { tx.rollback(); ex.printStackTrace(); } } } finally { session.flush(); session.clear(); session.close(); } } public static void main(String[] args) throws BioException, FileNotFoundException, InterruptedException, SQLException { SequenceLoaderNew sl = new SequenceLoaderNew(); sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); } } ==================================================== Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349859602 Loaded sequenceNC_005813, identifier: 45478502 Delete sequenceNC_005813 if exists. Save sequence NC_005813 Finished savig sequence NC_005813 Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349863761 Loaded sequenceNC_005813, identifier: 45478502 Delete sequenceNC_005813 if exists. Save sequence NC_005813 org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [Term#20] at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) Exception in thread "main" org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [Term#19] at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131) at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122) at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) ==================================================== Richard Holland wrote: > Forgot to copy my reply back to the lists! > > > ---------- Forwarded message ---------- > From: Richard Holland > Date: 2008/5/20 > Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue > To: gang wu > > > You need to substitute this line: > > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new > SimpleNamespace(namespace)); > > with this line: > > Namespace ns = (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new > Object[]{namespace}); > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); > > cheers, > Richard > > PS. You're the second person who has quoted this section of code on > this list recently, and had the same problem with it. If you got it > from a website somewhere, could you send me the URL so I can get in > touch with the authors and get them to correct it? Thanks! > > 2008/5/20 gang wu : > >> Hi all, >> >> I'm trying to load Genbank sequence into BioSQL database with >> BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the >> exception when loading new sequences or reloading the same sequence. Seems >> the Hibernate is trying to insert "genbank" namespace again. Can anybody >> tell me what I did wrong? Thanks in advance. >> >> Gang >> >> ================================================================ >> public class SequenceLoaderNew { >> public void loadSeq(String fileName, String namespace) throws >> FileNotFoundException, BioException { >> System.out.println("Start loading file " + fileName + " at " + >> System.currentTimeMillis()); >> BufferedReader br = new BufferedReader(new FileReader(fileName)); >> Session session = new >> Configuration().configure().buildSessionFactory().openSession(); >> RichObjectFactory.connectToBioSQL(session); >> RichSequenceDB db = new BioSQLRichSequenceDB(session); >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new >> SimpleNamespace(namespace)); >> while (rsi.hasNext()) { >> Transaction tx = session.beginTransaction(); >> RichSequence sequence = rsi.nextRichSequence(); >> System.out.println("Loaded sequence" + sequence.getAccession() + >> ", identifier: " + sequence.getIdentifier()); >> try { >> System.out.println("Delete sequence" + sequence.getAccession() >> + " if exists."); >> db.removeSequence(sequence.getAccession()); >> } catch (Exception ex) { >> } >> try { >> System.out.println("Save sequence " + >> sequence.getAccession()); >> session.save("BioEntry", sequence); >> tx.commit(); >> session.flush(); >> session.clear(); >> } catch (HibernateException ex) { >> tx.rollback(); >> ex.printStackTrace(); >> } >> } >> } >> >> public static void main(String[] args) throws BioException, >> FileNotFoundException { >> SequenceLoaderNew sl = new SequenceLoaderNew(); >> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >> } >> } >> ================================================================ >> org.hibernate.exception.ConstraintViolationException: could not insert: >> [Namespace] >> at >> org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) >> at >> org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) >> at >> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) >> at >> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >> at >> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >> at >> org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) >> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >> Caused by: >> com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >> Duplicate entry 'genbank' for key 'name' >> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) >> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) >> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) >> at >> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) >> at >> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >> at >> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >> at >> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >> at >> org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) >> at >> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) >> ... 31 more >> ================================================================ >> >> _______________________________________________ >> BioSQL-l mailing list >> BioSQL-l at lists.open-bio.org >> http://lists.open-bio.org/mailman/listinfo/biosql-l >> >> From markus.jaritz at novartis.com Wed May 21 03:37:36 2008 From: markus.jaritz at novartis.com (markus.jaritz at novartis.com) Date: Wed, 21 May 2008 09:37:36 +0200 Subject: [Biojava-l] Markus Jaritz is out of the office. Message-ID: I will be out of the office starting 21.05.2008 and will not return until 31.05.2008. I will leave Novartis with June 1st. If you like to stay in contact with me and I had no chance to contact you before I left, please check my pages at www.LinkedIn.com and www.xing.com. Thank you and all the best Markus Jaritz From dicknetherlands at gmail.com Wed May 21 13:17:39 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Wed, 21 May 2008 18:17:39 +0100 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: <4833C100.7040304@molbio.mgh.harvard.edu> References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> Message-ID: I'm not sure why you'd want to do that? Either way, as far as I know, Hibernate sessions are not designed for that. If you want to delete the sequence then replace it with a completely new sequence object, you have to create a new sequence object - you can't reuse the one you just deleted. The session info is embedded into that object so even if you clear the session, the object still refers to it. If you just want to load a sequence, modify it, then save it back, you should just load it then use saveOrUpdate to save it back again with changes. If you want to replace objects in your database, don't load them, just delete them, then use save to create new objects in their place. cheers, Richard 2008/5/21 gang wu : > I got another problem with almost the same code(see attached code and > output). If I call the loadSeq() only once, everything works fine. The > second call of the same method will fail. By the exception message, it looks > like the session is not cleaned up yet though at the end of the method the > session has been flush/clear/closed. Anything wrong? > > Or does anyone have a sequence data loader would like to share? I'm quite > frustrated after keeping trying to do this seems simple thing without > success. If I can make it work, I'd like to post it on the mailing list. > Thanks in advance. > > Gang > > ==================================================== > public class SequenceLoaderNew { > public void loadSeq(String fileName, String namespace) throws > FileNotFoundException, BioException, SQLException, InterruptedException { > SessionFactory sessionFactory = new > Configuration().configure().buildSessionFactory(); > Session session = sessionFactory.openSession(); > RichObjectFactory.connectToBioSQL(session); > Namespace ns = (Namespace) > RichObjectFactory.getObject(SimpleNamespace.class, new Object[]{namespace}); > RichSequenceDB db = new BioSQLRichSequenceDB(session); > System.out.println("Start loading file " + fileName + " at " + > System.currentTimeMillis()); > BufferedReader br = new BufferedReader(new FileReader(fileName)); > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, > ns); > try { > while (rsi.hasNext()) { > RichSequence sequence = rsi.nextRichSequence(); > System.out.println("Loaded sequence" + sequence.getAccession() > + ", identifier: " + sequence.getIdentifier()); > Transaction tx = session.beginTransaction(); > try { > System.out.println("Delete sequence" + > sequence.getAccession() + " if exists."); > db.removeSequence(sequence.getAccession()); > tx.commit(); > session.flush(); > session.clear(); > } catch (Exception ex) { > if (tx != null) { > tx.rollback(); > } > } > try { > tx = session.beginTransaction(); > System.out.println("Save sequence " + > sequence.getAccession()); > //session.save("BioEntry", sequence); > //db.addSequence(sequence); > db.addRichSequence(sequence); > tx.commit(); > System.out.println("Finished savig sequence " + > sequence.getAccession() + "\n"); > } catch (HibernateException ex) { > tx.rollback(); > ex.printStackTrace(); > } > } > } finally { > session.flush(); > session.clear(); > session.close(); > } > } > > public static void main(String[] args) throws BioException, > FileNotFoundException, InterruptedException, SQLException { > SequenceLoaderNew sl = new SequenceLoaderNew(); > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > } > } > ==================================================== > Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349859602 > Loaded sequenceNC_005813, identifier: 45478502 > Delete sequenceNC_005813 if exists. > Save sequence NC_005813 > Finished savig sequence NC_005813 > > Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349863761 > Loaded sequenceNC_005813, identifier: 45478502 > Delete sequenceNC_005813 if exists. > Save sequence NC_005813 > org.hibernate.NonUniqueObjectException: a different object with the same > identifier value was already associated with the session: [Term#20] > at > org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) > at > org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) > at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) > at > org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) > at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) > at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) > at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) > at org.hibernate.engine.Cascade.cascade(Cascade.java:130) > at > org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) > at > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) > at > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) > at > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) > at > org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) > at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) > at > org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) > at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) > at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) > at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) > at > org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) > at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) > at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) > at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) > at org.hibernate.engine.Cascade.cascade(Cascade.java:130) > at > org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456) > at > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334) > at > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) > at > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) > at > org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) > at > org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) > at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) > at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) > at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) > at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) > Exception in thread "main" org.hibernate.NonUniqueObjectException: a > different object with the same identifier value was already associated with > the session: [Term#19] > at > org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) > at > org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) > at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) > at > org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) > at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) > at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) > at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) > at org.hibernate.engine.Cascade.cascade(Cascade.java:130) > at > org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) > at > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) > at > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) > at > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) > at > org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) > at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) > at > org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) > at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) > at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) > at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) > at > org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) > at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) > at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) > at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) > at org.hibernate.engine.Cascade.cascade(Cascade.java:130) > at > org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131) > at > org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122) > at > org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65) > at > org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) > at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) > at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) > at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) > ==================================================== > > Richard Holland wrote: >> >> Forgot to copy my reply back to the lists! >> >> >> ---------- Forwarded message ---------- >> From: Richard Holland >> Date: 2008/5/20 >> Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue >> To: gang wu >> >> >> You need to substitute this line: >> >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new >> SimpleNamespace(namespace)); >> >> with this line: >> >> Namespace ns = >> (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new >> Object[]{namespace}); >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); >> >> cheers, >> Richard >> >> PS. You're the second person who has quoted this section of code on >> this list recently, and had the same problem with it. If you got it >> from a website somewhere, could you send me the URL so I can get in >> touch with the authors and get them to correct it? Thanks! >> >> 2008/5/20 gang wu : >> >>> >>> Hi all, >>> >>> I'm trying to load Genbank sequence into BioSQL database with >>> BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the >>> exception when loading new sequences or reloading the same sequence. >>> Seems >>> the Hibernate is trying to insert "genbank" namespace again. Can anybody >>> tell me what I did wrong? Thanks in advance. >>> >>> Gang >>> >>> ================================================================ >>> public class SequenceLoaderNew { >>> public void loadSeq(String fileName, String namespace) throws >>> FileNotFoundException, BioException { >>> System.out.println("Start loading file " + fileName + " at " + >>> System.currentTimeMillis()); >>> BufferedReader br = new BufferedReader(new FileReader(fileName)); >>> Session session = new >>> Configuration().configure().buildSessionFactory().openSession(); >>> RichObjectFactory.connectToBioSQL(session); >>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >>> new >>> SimpleNamespace(namespace)); >>> while (rsi.hasNext()) { >>> Transaction tx = session.beginTransaction(); >>> RichSequence sequence = rsi.nextRichSequence(); >>> System.out.println("Loaded sequence" + sequence.getAccession() + >>> ", identifier: " + sequence.getIdentifier()); >>> try { >>> System.out.println("Delete sequence" + >>> sequence.getAccession() >>> + " if exists."); >>> db.removeSequence(sequence.getAccession()); >>> } catch (Exception ex) { >>> } >>> try { >>> System.out.println("Save sequence " + >>> sequence.getAccession()); >>> session.save("BioEntry", sequence); >>> tx.commit(); >>> session.flush(); >>> session.clear(); >>> } catch (HibernateException ex) { >>> tx.rollback(); >>> ex.printStackTrace(); >>> } >>> } >>> } >>> >>> public static void main(String[] args) throws BioException, >>> FileNotFoundException { >>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >>> } >>> } >>> ================================================================ >>> org.hibernate.exception.ConstraintViolationException: could not insert: >>> [Namespace] >>> at >>> >>> org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) >>> at >>> >>> org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) >>> at >>> >>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) >>> at >>> >>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >>> at >>> >>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >>> at >>> >>> org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) >>> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> >>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >>> at >>> >>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> >>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>> at >>> >>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >>> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> >>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >>> at >>> >>> org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >>> at >>> >>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> >>> org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) >>> at >>> >>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) >>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >>> Caused by: >>> com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >>> Duplicate entry 'genbank' for key 'name' >>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) >>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) >>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >>> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >>> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >>> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) >>> at >>> >>> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) >>> at >>> >>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >>> at >>> >>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >>> at >>> >>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >>> at >>> >>> org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) >>> at >>> >>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) >>> ... 31 more >>> ================================================================ >>> >>> _______________________________________________ >>> BioSQL-l mailing list >>> BioSQL-l at lists.open-bio.org >>> http://lists.open-bio.org/mailman/listinfo/biosql-l >>> >>> > > From gwu at molbio.mgh.harvard.edu Wed May 21 14:12:36 2008 From: gwu at molbio.mgh.harvard.edu (gang wu) Date: Wed, 21 May 2008 14:12:36 -0400 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> Message-ID: <48346614.6060102@molbio.mgh.harvard.edu> The scenario is quite simple: I'm using the database to store Genbank genome sequences. Later I've to update the sequences when Genbank has newer releases. The following two lines are loading the same sequence twice. The first time will insert a new BioEntry record. the second time will delete the existing record and insert a new record again. sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); Following code is used to load multiple genome sequences by calling the loadSeq() method multiple times. All failed except the first time. sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_006723.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_008945.gbk", "genbank"); The exception message has the details. Since all variables used in loadSeq() are local, and I did the session flush/clear/close, then it should be ok to call the method again. Thank you very much for your help. Gang Richard Holland wrote: > I'm not sure why you'd want to do that? Either way, as far as I know, > Hibernate sessions are not designed for that. If you want to delete > the sequence then replace it with a completely new sequence object, > you have to create a new sequence object - you can't reuse the one you > just deleted. The session info is embedded into that object so even if > you clear the session, the object still refers to it. > > If you just want to load a sequence, modify it, then save it back, you > should just load it then use saveOrUpdate to save it back again with > changes. If you want to replace objects in your database, don't load > them, just delete them, then use save to create new objects in their > place. > > cheers, > Richard > > 2008/5/21 gang wu : > >> I got another problem with almost the same code(see attached code and >> output). If I call the loadSeq() only once, everything works fine. The >> second call of the same method will fail. By the exception message, it looks >> like the session is not cleaned up yet though at the end of the method the >> session has been flush/clear/closed. Anything wrong? >> >> Or does anyone have a sequence data loader would like to share? I'm quite >> frustrated after keeping trying to do this seems simple thing without >> success. If I can make it work, I'd like to post it on the mailing list. >> Thanks in advance. >> >> Gang >> >> ==================================================== >> public class SequenceLoaderNew { >> public void loadSeq(String fileName, String namespace) throws >> FileNotFoundException, BioException, SQLException, InterruptedException { >> SessionFactory sessionFactory = new >> Configuration().configure().buildSessionFactory(); >> Session session = sessionFactory.openSession(); >> RichObjectFactory.connectToBioSQL(session); >> Namespace ns = (Namespace) >> RichObjectFactory.getObject(SimpleNamespace.class, new Object[]{namespace}); >> RichSequenceDB db = new BioSQLRichSequenceDB(session); >> System.out.println("Start loading file " + fileName + " at " + >> System.currentTimeMillis()); >> BufferedReader br = new BufferedReader(new FileReader(fileName)); >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >> ns); >> try { >> while (rsi.hasNext()) { >> RichSequence sequence = rsi.nextRichSequence(); >> System.out.println("Loaded sequence" + sequence.getAccession() >> + ", identifier: " + sequence.getIdentifier()); >> Transaction tx = session.beginTransaction(); >> try { >> System.out.println("Delete sequence" + >> sequence.getAccession() + " if exists."); >> db.removeSequence(sequence.getAccession()); >> tx.commit(); >> session.flush(); >> session.clear(); >> } catch (Exception ex) { >> if (tx != null) { >> tx.rollback(); >> } >> } >> try { >> tx = session.beginTransaction(); >> System.out.println("Save sequence " + >> sequence.getAccession()); >> //session.save("BioEntry", sequence); >> //db.addSequence(sequence); >> db.addRichSequence(sequence); >> tx.commit(); >> System.out.println("Finished savig sequence " + >> sequence.getAccession() + "\n"); >> } catch (HibernateException ex) { >> tx.rollback(); >> ex.printStackTrace(); >> } >> } >> } finally { >> session.flush(); >> session.clear(); >> session.close(); >> } >> } >> >> public static void main(String[] args) throws BioException, >> FileNotFoundException, InterruptedException, SQLException { >> SequenceLoaderNew sl = new SequenceLoaderNew(); >> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> } >> } >> ==================================================== >> Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349859602 >> Loaded sequenceNC_005813, identifier: 45478502 >> Delete sequenceNC_005813 if exists. >> Save sequence NC_005813 >> Finished savig sequence NC_005813 >> >> Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349863761 >> Loaded sequenceNC_005813, identifier: 45478502 >> Delete sequenceNC_005813 if exists. >> Save sequence NC_005813 >> org.hibernate.NonUniqueObjectException: a different object with the same >> identifier value was already associated with the session: [Term#20] >> at >> org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at >> org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) >> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >> Exception in thread "main" org.hibernate.NonUniqueObjectException: a >> different object with the same identifier value was already associated with >> the session: [Term#19] >> at >> org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at >> org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) >> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65) >> at >> org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) >> at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) >> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >> ==================================================== >> >> Richard Holland wrote: >> >>> Forgot to copy my reply back to the lists! >>> >>> >>> ---------- Forwarded message ---------- >>> From: Richard Holland >>> Date: 2008/5/20 >>> Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue >>> To: gang wu >>> >>> >>> You need to substitute this line: >>> >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new >>> SimpleNamespace(namespace)); >>> >>> with this line: >>> >>> Namespace ns = >>> (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new >>> Object[]{namespace}); >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); >>> >>> cheers, >>> Richard >>> >>> PS. You're the second person who has quoted this section of code on >>> this list recently, and had the same problem with it. If you got it >>> from a website somewhere, could you send me the URL so I can get in >>> touch with the authors and get them to correct it? Thanks! >>> >>> 2008/5/20 gang wu : >>> >>> >>>> Hi all, >>>> >>>> I'm trying to load Genbank sequence into BioSQL database with >>>> BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the >>>> exception when loading new sequences or reloading the same sequence. >>>> Seems >>>> the Hibernate is trying to insert "genbank" namespace again. Can anybody >>>> tell me what I did wrong? Thanks in advance. >>>> >>>> Gang >>>> >>>> ================================================================ >>>> public class SequenceLoaderNew { >>>> public void loadSeq(String fileName, String namespace) throws >>>> FileNotFoundException, BioException { >>>> System.out.println("Start loading file " + fileName + " at " + >>>> System.currentTimeMillis()); >>>> BufferedReader br = new BufferedReader(new FileReader(fileName)); >>>> Session session = new >>>> Configuration().configure().buildSessionFactory().openSession(); >>>> RichObjectFactory.connectToBioSQL(session); >>>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >>>> new >>>> SimpleNamespace(namespace)); >>>> while (rsi.hasNext()) { >>>> Transaction tx = session.beginTransaction(); >>>> RichSequence sequence = rsi.nextRichSequence(); >>>> System.out.println("Loaded sequence" + sequence.getAccession() + >>>> ", identifier: " + sequence.getIdentifier()); >>>> try { >>>> System.out.println("Delete sequence" + >>>> sequence.getAccession() >>>> + " if exists."); >>>> db.removeSequence(sequence.getAccession()); >>>> } catch (Exception ex) { >>>> } >>>> try { >>>> System.out.println("Save sequence " + >>>> sequence.getAccession()); >>>> session.save("BioEntry", sequence); >>>> tx.commit(); >>>> session.flush(); >>>> session.clear(); >>>> } catch (HibernateException ex) { >>>> tx.rollback(); >>>> ex.printStackTrace(); >>>> } >>>> } >>>> } >>>> >>>> public static void main(String[] args) throws BioException, >>>> FileNotFoundException { >>>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>>> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>>> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >>>> } >>>> } >>>> ================================================================ >>>> org.hibernate.exception.ConstraintViolationException: could not insert: >>>> [Namespace] >>>> at >>>> >>>> org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) >>>> at >>>> >>>> org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) >>>> at >>>> >>>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) >>>> at >>>> >>>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >>>> at >>>> >>>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >>>> at >>>> >>>> org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) >>>> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>> at >>>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >>>> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>>> at >>>> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >>>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>>> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >>>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >>>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >>>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) >>>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >>>> Caused by: >>>> com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >>>> Duplicate entry 'genbank' for key 'name' >>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) >>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) >>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >>>> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >>>> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >>>> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >>>> at >>>> >>>> org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) >>>> at >>>> >>>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) >>>> ... 31 more >>>> ================================================================ >>>> >>>> _______________________________________________ >>>> BioSQL-l mailing list >>>> BioSQL-l at lists.open-bio.org >>>> http://lists.open-bio.org/mailman/listinfo/biosql-l >>>> >>>> >>>> >> From debrown at unity.ncsu.edu Wed May 21 14:18:53 2008 From: debrown at unity.ncsu.edu (Doug Brown) Date: Wed, 21 May 2008 14:18:53 -0400 Subject: [Biojava-l] Unexpected behavior from GFF3 parser In-Reply-To: References: Message-ID: <4834678D.8090604@unity.ncsu.edu> Hi All, In the process of putting together a piece of code to load GFF3 features into an extant BioSQL database, I ran across a scenario wherein the values for notes stored in the data base (seqfeature_qualifier_value tale) are of the form "[= 54.9]" and the value as it occurred in the GFF3 file were of the form "... ;someName= 54.9; ..." There are two things that trouble me about this: 1) the brackets are puzzling. It looks as if some piece of code is calling SimpleRichAnnotation.toString() 2) inclusion of the equals sign and lack of trimming for the value. As for #2, a quick inspection of the code shows line 343 of GFF3Parser.java maybe erroneous in that it does not eliminate the equals sign. That then would cause a failure of the trimming. As for #1, the problem might be due to my high level of ignorance of proper Biojavax programming style. OR, it may be due to something in hibernate calling toString on the Set returned by SimpleRichAnnotation.getNoteSet(). I am attempting to add GFF3 features to an bioentries in a BioSQL database. Being unable to find any code similar to that which lives in the org.biojava.bio.program.gff package, I started rolling my own. If there is an easier way, would somebody please set me on the correct path? Here is a code snippet from the GFF3DocumentHandler implementation: public void recordLine( GFF3Record record) { . . . // use the HQL approach to get a thin sequence Query q = session.createQuery( "from ThinSequence as s where s.name = :acc"); q.setString( "acc", record.getSequenceID()); seq = (Sequence)q.uniqueResult(); // add the GFF annotation(s) to the sequence if ( seq != null) this.getAnnotator( (GFF3Record.Impl)record, true).annotate( seq); . . . } . . . public SequenceAnnotator getAnnotator( final GFF3Record.Impl rec, final boolean checkSeqName) { return new SequenceAnnotator() { public Sequence annotate(Sequence seq) throws BioException, ChangeVetoException { if (!checkSeqName || rec.getSequenceID().equals(seq.getName())) { Feature.Template thisTemplate = null; //Build the three types of annotations: 1) non-stranded, non-phased // 2) stranded, non-phased, or 3) stranded, phased. if (rec.getStrand() == StrandedFeature.UNKNOWN) { RichFeature.Template plain = new RichFeature.Template(); plain.annotation = Annotation.EMPTY_ANNOTATION; } else if (rec.getPhase() == GFFTools.NO_FRAME) { StrandedFeature.Template stranded = new StrandedFeature.Template(); stranded.annotation = Annotation.EMPTY_ANNOTATION; stranded.strand = rec.getStrand(); thisTemplate = stranded; } else { // translate GFF phases into Biojava phases FramedFeature.Template framed = new FramedFeature.Template(); framed.annotation = Annotation.EMPTY_ANNOTATION; framed.strand = rec.getStrand(); switch (rec.getPhase()) { case 0: framed.readingFrame = FramedFeature.FRAME_0; break; case 1: framed.readingFrame = FramedFeature.FRAME_1; break; case 2: framed.readingFrame = FramedFeature.FRAME_2; break; } thisTemplate = framed; } // set the items common to all three types thisTemplate.location = new RangeLocation( rec.getStart(), rec.getEnd()); thisTemplate.typeTerm = rec.getType(); thisTemplate.sourceTerm = rec.getSource(); // the annotation was already filled out by the parser thisTemplate.annotation = rec.getAnnotation(); // annotate the seqeunce seq.createFeature(thisTemplate); } return seq; } }; } Regards, Doug Brown -- Doug Brown - Bioinformatics Fungal Genomics Laboratory Center for Integrated Fungal Research North Carolina State University Campus Box 7251, Raleigh, NC 27695-7251 https://www.fungalgenomics.ncsu.edu/~debrown/ Tel: (919) 513-0394, Fax (919) 513-0024 e-mail: doug_brown AtSign ncsu.edu From dicknetherlands at gmail.com Wed May 21 14:40:41 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Wed, 21 May 2008 19:40:41 +0100 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> Message-ID: Sorry, I misread the original question. My bad. What it actually seems that you're doing is simply iterating through a genbank file, deleting from the db that already exist, then replacing them with members from the file. Looking more closely it seems that it is complaining about duplicated Term objects, probably because the cache is getting confused with all this flushing and clearing. Have you tried running this code without flushing and clearing the session? If not, try also inserting If that didn't work, then after each call to flush(), insert a RichObjectFactory.clearLRUCache() call. That really will completely clear memory of all objects from the database. cheers, Richard 2008/5/21 Richard Holland : > I'm not sure why you'd want to do that? Either way, as far as I know, > Hibernate sessions are not designed for that. If you want to delete > the sequence then replace it with a completely new sequence object, > you have to create a new sequence object - you can't reuse the one you > just deleted. The session info is embedded into that object so even if > you clear the session, the object still refers to it. > > If you just want to load a sequence, modify it, then save it back, you > should just load it then use saveOrUpdate to save it back again with > changes. If you want to replace objects in your database, don't load > them, just delete them, then use save to create new objects in their > place. > > cheers, > Richard > > 2008/5/21 gang wu : >> I got another problem with almost the same code(see attached code and >> output). If I call the loadSeq() only once, everything works fine. The >> second call of the same method will fail. By the exception message, it looks >> like the session is not cleaned up yet though at the end of the method the >> session has been flush/clear/closed. Anything wrong? >> >> Or does anyone have a sequence data loader would like to share? I'm quite >> frustrated after keeping trying to do this seems simple thing without >> success. If I can make it work, I'd like to post it on the mailing list. >> Thanks in advance. >> >> Gang >> >> ==================================================== >> public class SequenceLoaderNew { >> public void loadSeq(String fileName, String namespace) throws >> FileNotFoundException, BioException, SQLException, InterruptedException { >> SessionFactory sessionFactory = new >> Configuration().configure().buildSessionFactory(); >> Session session = sessionFactory.openSession(); >> RichObjectFactory.connectToBioSQL(session); >> Namespace ns = (Namespace) >> RichObjectFactory.getObject(SimpleNamespace.class, new Object[]{namespace}); >> RichSequenceDB db = new BioSQLRichSequenceDB(session); >> System.out.println("Start loading file " + fileName + " at " + >> System.currentTimeMillis()); >> BufferedReader br = new BufferedReader(new FileReader(fileName)); >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >> ns); >> try { >> while (rsi.hasNext()) { >> RichSequence sequence = rsi.nextRichSequence(); >> System.out.println("Loaded sequence" + sequence.getAccession() >> + ", identifier: " + sequence.getIdentifier()); >> Transaction tx = session.beginTransaction(); >> try { >> System.out.println("Delete sequence" + >> sequence.getAccession() + " if exists."); >> db.removeSequence(sequence.getAccession()); >> tx.commit(); >> session.flush(); >> session.clear(); >> } catch (Exception ex) { >> if (tx != null) { >> tx.rollback(); >> } >> } >> try { >> tx = session.beginTransaction(); >> System.out.println("Save sequence " + >> sequence.getAccession()); >> //session.save("BioEntry", sequence); >> //db.addSequence(sequence); >> db.addRichSequence(sequence); >> tx.commit(); >> System.out.println("Finished savig sequence " + >> sequence.getAccession() + "\n"); >> } catch (HibernateException ex) { >> tx.rollback(); >> ex.printStackTrace(); >> } >> } >> } finally { >> session.flush(); >> session.clear(); >> session.close(); >> } >> } >> >> public static void main(String[] args) throws BioException, >> FileNotFoundException, InterruptedException, SQLException { >> SequenceLoaderNew sl = new SequenceLoaderNew(); >> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> } >> } >> ==================================================== >> Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349859602 >> Loaded sequenceNC_005813, identifier: 45478502 >> Delete sequenceNC_005813 if exists. >> Save sequence NC_005813 >> Finished savig sequence NC_005813 >> >> Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349863761 >> Loaded sequenceNC_005813, identifier: 45478502 >> Delete sequenceNC_005813 if exists. >> Save sequence NC_005813 >> org.hibernate.NonUniqueObjectException: a different object with the same >> identifier value was already associated with the session: [Term#20] >> at >> org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at >> org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) >> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >> Exception in thread "main" org.hibernate.NonUniqueObjectException: a >> different object with the same identifier value was already associated with >> the session: [Term#19] >> at >> org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at >> org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) >> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65) >> at >> org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) >> at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) >> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >> ==================================================== >> >> Richard Holland wrote: >>> >>> Forgot to copy my reply back to the lists! >>> >>> >>> ---------- Forwarded message ---------- >>> From: Richard Holland >>> Date: 2008/5/20 >>> Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue >>> To: gang wu >>> >>> >>> You need to substitute this line: >>> >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new >>> SimpleNamespace(namespace)); >>> >>> with this line: >>> >>> Namespace ns = >>> (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new >>> Object[]{namespace}); >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); >>> >>> cheers, >>> Richard >>> >>> PS. You're the second person who has quoted this section of code on >>> this list recently, and had the same problem with it. If you got it >>> from a website somewhere, could you send me the URL so I can get in >>> touch with the authors and get them to correct it? Thanks! >>> >>> 2008/5/20 gang wu : >>> >>>> >>>> Hi all, >>>> >>>> I'm trying to load Genbank sequence into BioSQL database with >>>> BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the >>>> exception when loading new sequences or reloading the same sequence. >>>> Seems >>>> the Hibernate is trying to insert "genbank" namespace again. Can anybody >>>> tell me what I did wrong? Thanks in advance. >>>> >>>> Gang >>>> >>>> ================================================================ >>>> public class SequenceLoaderNew { >>>> public void loadSeq(String fileName, String namespace) throws >>>> FileNotFoundException, BioException { >>>> System.out.println("Start loading file " + fileName + " at " + >>>> System.currentTimeMillis()); >>>> BufferedReader br = new BufferedReader(new FileReader(fileName)); >>>> Session session = new >>>> Configuration().configure().buildSessionFactory().openSession(); >>>> RichObjectFactory.connectToBioSQL(session); >>>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >>>> new >>>> SimpleNamespace(namespace)); >>>> while (rsi.hasNext()) { >>>> Transaction tx = session.beginTransaction(); >>>> RichSequence sequence = rsi.nextRichSequence(); >>>> System.out.println("Loaded sequence" + sequence.getAccession() + >>>> ", identifier: " + sequence.getIdentifier()); >>>> try { >>>> System.out.println("Delete sequence" + >>>> sequence.getAccession() >>>> + " if exists."); >>>> db.removeSequence(sequence.getAccession()); >>>> } catch (Exception ex) { >>>> } >>>> try { >>>> System.out.println("Save sequence " + >>>> sequence.getAccession()); >>>> session.save("BioEntry", sequence); >>>> tx.commit(); >>>> session.flush(); >>>> session.clear(); >>>> } catch (HibernateException ex) { >>>> tx.rollback(); >>>> ex.printStackTrace(); >>>> } >>>> } >>>> } >>>> >>>> public static void main(String[] args) throws BioException, >>>> FileNotFoundException { >>>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>>> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>>> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >>>> } >>>> } >>>> ================================================================ >>>> org.hibernate.exception.ConstraintViolationException: could not insert: >>>> [Namespace] >>>> at >>>> >>>> org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) >>>> at >>>> >>>> org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) >>>> at >>>> >>>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) >>>> at >>>> >>>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >>>> at >>>> >>>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >>>> at >>>> >>>> org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) >>>> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>> at >>>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >>>> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>>> at >>>> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >>>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>>> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >>>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >>>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >>>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) >>>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >>>> Caused by: >>>> com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >>>> Duplicate entry 'genbank' for key 'name' >>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) >>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) >>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >>>> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >>>> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >>>> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >>>> at >>>> >>>> org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) >>>> at >>>> >>>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) >>>> ... 31 more >>>> ================================================================ >>>> >>>> _______________________________________________ >>>> BioSQL-l mailing list >>>> BioSQL-l at lists.open-bio.org >>>> http://lists.open-bio.org/mailman/listinfo/biosql-l >>>> >>>> >> >> > From dicknetherlands at gmail.com Wed May 21 14:49:57 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Wed, 21 May 2008 19:49:57 +0100 Subject: [Biojava-l] Unexpected behavior from GFF3 parser In-Reply-To: <4834678D.8090604@unity.ncsu.edu> References: <4834678D.8090604@unity.ncsu.edu> Message-ID: Hello. The GFF3 parser is an 'old' pre-BioJavaX one which basically stuffs everything from the file into string annotations. It's fine as long as you don't attempt to round-trip it to the database, but then things get interesting. Still, you're right about the equals - it's a bug that it isn't trimming it. But, the string is getting stored verbatim because the BioJavaX persistence layer always stores all 'old' annotations as toStrings of the actual objects (it's a best-fit solution for translating 'old' data into BioJavaX data as in BioJavaX all annotations are strings). The problem really lies in the GFF3 parser not having been updated/replaced to work with the new BioJavaX-style parsing, where things are parsed more deeply and filed into more appropriate locations in the object model. If there's a volunteer to convert it, we'd appreciate hearing from them.... cheers, Richard 2008/5/21 Doug Brown : > Hi All, > > In the process of putting together a piece of code to load GFF3 features > into an extant BioSQL database, I ran across a scenario wherein the values > for notes stored in the data base (seqfeature_qualifier_value tale) are of > the form > "[= 54.9]" > and the value as it occurred in the GFF3 file were of the form > "... ;someName= 54.9; ..." > > There are two things that trouble me about this: > 1) the brackets are puzzling. It looks as if some piece of code is calling > SimpleRichAnnotation.toString() > 2) inclusion of the equals sign and lack of trimming for the value. > > As for #2, a quick inspection of the code shows line 343 of GFF3Parser.java > maybe erroneous in that it does not eliminate the equals sign. That then > would cause a failure of the trimming. > > As for #1, the problem might be due to my high level of ignorance of proper > Biojavax programming style. OR, it may be due to something in hibernate > calling toString on the Set returned by SimpleRichAnnotation.getNoteSet(). > > I am attempting to add GFF3 features to an bioentries in a BioSQL database. > Being unable to find any code similar to that which lives in the > org.biojava.bio.program.gff package, I started rolling my own. If there is > an easier way, would somebody please set me on the correct path? > > Here is a code snippet from the GFF3DocumentHandler implementation: > > public void recordLine( GFF3Record record) > { > > . . . > > // use the HQL approach to get a thin sequence > Query q = session.createQuery( "from ThinSequence as s where s.name = > :acc"); > q.setString( "acc", record.getSequenceID()); > seq = (Sequence)q.uniqueResult(); > > // add the GFF annotation(s) to the sequence > if ( seq != null) > this.getAnnotator( (GFF3Record.Impl)record, true).annotate( seq); > > . . . > } > > . . . > > public SequenceAnnotator getAnnotator( final GFF3Record.Impl rec, > final boolean checkSeqName) > { > return new SequenceAnnotator() > { > public Sequence annotate(Sequence seq) throws BioException, > ChangeVetoException > { > if (!checkSeqName || rec.getSequenceID().equals(seq.getName())) > { > Feature.Template thisTemplate = null; > > //Build the three types of annotations: 1) non-stranded, > non-phased > // 2) stranded, non-phased, or 3) stranded, phased. > if (rec.getStrand() == StrandedFeature.UNKNOWN) > { > RichFeature.Template plain = new RichFeature.Template(); > plain.annotation = Annotation.EMPTY_ANNOTATION; > } > else if (rec.getPhase() == GFFTools.NO_FRAME) > { > StrandedFeature.Template stranded = new > StrandedFeature.Template(); > stranded.annotation = Annotation.EMPTY_ANNOTATION; > stranded.strand = rec.getStrand(); > thisTemplate = stranded; > } > else > { > // translate GFF phases into Biojava phases > FramedFeature.Template framed = new FramedFeature.Template(); > framed.annotation = Annotation.EMPTY_ANNOTATION; > framed.strand = rec.getStrand(); > switch (rec.getPhase()) > { > case 0: > framed.readingFrame = FramedFeature.FRAME_0; > break; > case 1: > framed.readingFrame = FramedFeature.FRAME_1; > break; > case 2: > framed.readingFrame = FramedFeature.FRAME_2; > break; > } > thisTemplate = framed; > } > // set the items common to all three types > thisTemplate.location = new RangeLocation( rec.getStart(), > rec.getEnd()); > thisTemplate.typeTerm = rec.getType(); > thisTemplate.sourceTerm = rec.getSource(); > > // the annotation was already filled out by the parser > thisTemplate.annotation = rec.getAnnotation(); > > // annotate the seqeunce > seq.createFeature(thisTemplate); > } > return seq; > } > }; > } > > Regards, > Doug Brown > > -- > Doug Brown - Bioinformatics > Fungal Genomics Laboratory > Center for Integrated Fungal Research > North Carolina State University > Campus Box 7251, Raleigh, NC 27695-7251 > https://www.fungalgenomics.ncsu.edu/~debrown/ > Tel: (919) 513-0394, Fax (919) 513-0024 > e-mail: doug_brown AtSign ncsu.edu > > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From dreher at molgen.mpg.de Thu May 22 05:27:22 2008 From: dreher at molgen.mpg.de (Felix Dreher) Date: Thu, 22 May 2008 11:27:22 +0200 Subject: [Biojava-l] Java source files missing? Message-ID: <48353C7A.5070308@molgen.mpg.de> Hi all, the source files within the "biojava-1.6.jar" archive seem to be missing (I've downloaded it from the homepage: http://biojava.org/wiki/BioJava:Download_1.6). Best regards, Felix From ap3 at sanger.ac.uk Thu May 22 06:31:32 2008 From: ap3 at sanger.ac.uk (Andreas Prlic) Date: Thu, 22 May 2008 11:31:32 +0100 Subject: [Biojava-l] Java source files missing? In-Reply-To: <48353C7A.5070308@molgen.mpg.de> References: <48353C7A.5070308@molgen.mpg.de> Message-ID: Hi Felix, Yes, it looks like the src directory got lost out in biojava-1.6.- all.jar. I will have a look at the release build scripts and fix this. In the meanwhile, you could access the code via the public svn. There is a branch for this release in svn://code.open-bio.org/ biojava/biojava-live/branches/release-1_6 Andreas On 22 May 2008, at 10:27, Felix Dreher wrote: > Hi all, > > the source files within the "biojava-1.6.jar" archive seem to be > missing (I've downloaded it from the homepage: http://biojava.org/ > wiki/BioJava:Download_1.6). > > Best regards, > Felix > > > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l ----------------------------------------------------------------------- Andreas Prlic Wellcome Trust Sanger Institute Hinxton, Cambridge CB10 1SA, UK +44 (0) 1223 49 6891 ----------------------------------------------------------------------- -- The Wellcome Trust Sanger Institute is operated by Genome Research Limited, a charity registered in England with number 1021457 and a company registered in England with number 2742969, whose registered office is 215 Euston Road, London, NW1 2BE. From ap3 at sanger.ac.uk Thu May 22 09:20:13 2008 From: ap3 at sanger.ac.uk (Andreas Prlic) Date: Thu, 22 May 2008 14:20:13 +0100 Subject: [Biojava-l] Java source files missing? In-Reply-To: <48353C7A.5070308@molgen.mpg.de> References: <48353C7A.5070308@molgen.mpg.de> Message-ID: Hi Felix, This should be fixed now (see the biojava-1.6-all.jar) . Not sure what went wrong with the first file, doing "ant dist" seems to copy the src directories fine... Andreas On 22 May 2008, at 10:27, Felix Dreher wrote: > Hi all, > > the source files within the "biojava-1.6.jar" archive seem to be > missing (I've downloaded it from the homepage: http://biojava.org/ > wiki/BioJava:Download_1.6). > > Best regards, > Felix > > > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l ----------------------------------------------------------------------- Andreas Prlic Wellcome Trust Sanger Institute Hinxton, Cambridge CB10 1SA, UK +44 (0) 1223 49 6891 ----------------------------------------------------------------------- -- The Wellcome Trust Sanger Institute is operated by Genome Research Limited, a charity registered in England with number 1021457 and a company registered in England with number 2742969, whose registered office is 215 Euston Road, London, NW1 2BE. From gcappuccilli at protelix.com Thu May 22 11:39:37 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Thu, 22 May 2008 08:39:37 -0700 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: <48346614.6060102@molbio.mgh.harvard.edu> References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> <48346614.6060102@molbio.mgh.harvard.edu> Message-ID: <8D3625BC-B062-4979-94C1-324385705BF9@protelix.com> Gang, did you fix the problem? If so could you kindly share the solution? I tried your code last night and I couldn't clear those Term instances from the cache. Does RichObjectFactory.clearLRUCache() clear the first level or second level cache? Again, I am not an expert, so I apologize if my question is obvious. Thanks. Guido On May 21, 2008, at 11:12 AM, gang wu wrote: > The scenario is quite simple: I'm using the database to store > Genbank genome sequences. Later I've to update the sequences when > Genbank has newer releases. The following two lines are loading the > same sequence twice. The first time will insert a new BioEntry > record. the second time will delete the existing record and insert a > new record again. > > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > > Following code is used to load multiple genome sequences by calling > the loadSeq() method multiple times. All failed except the first time. > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_006723.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_008945.gbk", "genbank"); > The exception message has the details. Since all variables used in > loadSeq() are local, and I did the session flush/clear/close, then > it should be ok to call the method again. > > Thank you very much for your help. > > Gang > > > Richard Holland wrote: >> I'm not sure why you'd want to do that? Either way, as far as I know, >> Hibernate sessions are not designed for that. If you want to delete >> the sequence then replace it with a completely new sequence object, >> you have to create a new sequence object - you can't reuse the one >> you >> just deleted. The session info is embedded into that object so even >> if >> you clear the session, the object still refers to it. >> >> If you just want to load a sequence, modify it, then save it back, >> you >> should just load it then use saveOrUpdate to save it back again with >> changes. If you want to replace objects in your database, don't load >> them, just delete them, then use save to create new objects in their >> place. >> >> cheers, >> Richard >> >> 2008/5/21 gang wu : >> >>> I got another problem with almost the same code(see attached code >>> and >>> output). If I call the loadSeq() only once, everything works fine. >>> The >>> second call of the same method will fail. By the exception >>> message, it looks >>> like the session is not cleaned up yet though at the end of the >>> method the >>> session has been flush/clear/closed. Anything wrong? >>> >>> Or does anyone have a sequence data loader would like to share? >>> I'm quite >>> frustrated after keeping trying to do this seems simple thing >>> without >>> success. If I can make it work, I'd like to post it on the mailing >>> list. >>> Thanks in advance. >>> >>> Gang >>> >>> ==================================================== >>> public class SequenceLoaderNew { >>> public void loadSeq(String fileName, String namespace) throws >>> FileNotFoundException, BioException, SQLException, >>> InterruptedException { >>> SessionFactory sessionFactory = new >>> Configuration().configure().buildSessionFactory(); >>> Session session = sessionFactory.openSession(); >>> RichObjectFactory.connectToBioSQL(session); >>> Namespace ns = (Namespace) >>> RichObjectFactory.getObject(SimpleNamespace.class, new Object[] >>> {namespace}); >>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>> System.out.println("Start loading file " + fileName + " at " + >>> System.currentTimeMillis()); >>> BufferedReader br = new BufferedReader(new >>> FileReader(fileName)); >>> RichSequenceIterator rsi = >>> RichSequence.IOTools.readGenbankDNA(br, >>> ns); >>> try { >>> while (rsi.hasNext()) { >>> RichSequence sequence = rsi.nextRichSequence(); >>> System.out.println("Loaded sequence" + >>> sequence.getAccession() >>> + ", identifier: " + sequence.getIdentifier()); >>> Transaction tx = session.beginTransaction(); >>> try { >>> System.out.println("Delete sequence" + >>> sequence.getAccession() + " if exists."); >>> db.removeSequence(sequence.getAccession()); >>> tx.commit(); >>> session.flush(); >>> session.clear(); >>> } catch (Exception ex) { >>> if (tx != null) { >>> tx.rollback(); >>> } >>> } >>> try { >>> tx = session.beginTransaction(); >>> System.out.println("Save sequence " + >>> sequence.getAccession()); >>> //session.save("BioEntry", sequence); >>> //db.addSequence(sequence); >>> db.addRichSequence(sequence); >>> tx.commit(); >>> System.out.println("Finished savig sequence " + >>> sequence.getAccession() + "\n"); >>> } catch (HibernateException ex) { >>> tx.rollback(); >>> ex.printStackTrace(); >>> } >>> } >>> } finally { >>> session.flush(); >>> session.clear(); >>> session.close(); >>> } >>> } >>> >>> public static void main(String[] args) throws BioException, >>> FileNotFoundException, InterruptedException, SQLException { >>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>> } >>> } >>> ==================================================== >>> Start loading file /genomeseq/bacteria/NC_005813.gbk at >>> 1211349859602 >>> Loaded sequenceNC_005813, identifier: 45478502 >>> Delete sequenceNC_005813 if exists. >>> Save sequence NC_005813 >>> Finished savig sequence NC_005813 >>> >>> Start loading file /genomeseq/bacteria/NC_005813.gbk at >>> 1211349863761 >>> Loaded sequenceNC_005813, identifier: 45478502 >>> Delete sequenceNC_005813 if exists. >>> Save sequence NC_005813 >>> org.hibernate.NonUniqueObjectException: a different object with >>> the same >>> identifier value was already associated with the session: [Term#20] >>> at >>> org >>> .hibernate >>> .engine >>> .StatefulPersistenceContext >>> .checkUniqueness(StatefulPersistenceContext.java:590) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performUpdate(DefaultSaveOrUpdateEventListener.java:284) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .cascadeBeforeSave(AbstractSaveEventListener.java:431) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSaveOrReplicate(AbstractSaveEventListener.java:265) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSave(AbstractSaveEventListener.java:181) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .saveWithGeneratedOrRequestedId >>> (DefaultSaveOrUpdateEventListener.java:187) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at >>> org >>> .hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java: >>> 296) >>> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java: >>> 242) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .cascadeAfterSave(AbstractSaveEventListener.java:456) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSaveOrReplicate(AbstractSaveEventListener.java:334) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSave(AbstractSaveEventListener.java:181) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .saveWithGeneratedOrRequestedId >>> (DefaultSaveOrUpdateEventListener.java:187) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveEventListener >>> .saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveEventListener >>> .performSaveOrUpdate(DefaultSaveEventListener.java:27) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) >>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >>> Exception in thread "main" org.hibernate.NonUniqueObjectException: a >>> different object with the same identifier value was already >>> associated with >>> the session: [Term#19] >>> at >>> org >>> .hibernate >>> .engine >>> .StatefulPersistenceContext >>> .checkUniqueness(StatefulPersistenceContext.java:590) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performUpdate(DefaultSaveOrUpdateEventListener.java:284) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .cascadeBeforeSave(AbstractSaveEventListener.java:431) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSaveOrReplicate(AbstractSaveEventListener.java:265) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSave(AbstractSaveEventListener.java:181) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .saveWithGeneratedOrRequestedId >>> (DefaultSaveOrUpdateEventListener.java:187) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at >>> org >>> .hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java: >>> 296) >>> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java: >>> 242) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractFlushingEventListener >>> .cascadeOnFlush(AbstractFlushingEventListener.java:131) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractFlushingEventListener >>> .prepareEntityFlushes(AbstractFlushingEventListener.java:122) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractFlushingEventListener >>> .flushEverythingToExecutions(AbstractFlushingEventListener.java:65) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java: >>> 26) >>> at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) >>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) >>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >>> ==================================================== >>> >>> Richard Holland wrote: >>> >>>> Forgot to copy my reply back to the lists! >>>> >>>> >>>> ---------- Forwarded message ---------- >>>> From: Richard Holland >>>> Date: 2008/5/20 >>>> Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue >>>> To: gang wu >>>> >>>> >>>> You need to substitute this line: >>>> >>>> RichSequenceIterator rsi = >>>> RichSequence.IOTools.readGenbankDNA(br, new >>>> SimpleNamespace(namespace)); >>>> >>>> with this line: >>>> >>>> Namespace ns = >>>> (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new >>>> Object[]{namespace}); >>>> RichSequenceIterator rsi = >>>> RichSequence.IOTools.readGenbankDNA(br, ns); >>>> >>>> cheers, >>>> Richard >>>> >>>> PS. You're the second person who has quoted this section of code on >>>> this list recently, and had the same problem with it. If you got it >>>> from a website somewhere, could you send me the URL so I can get in >>>> touch with the authors and get them to correct it? Thanks! >>>> >>>> 2008/5/20 gang wu : >>>> >>>> >>>>> Hi all, >>>>> >>>>> I'm trying to load Genbank sequence into BioSQL database with >>>>> BioJavax/Hibernate. It's Ok to load the first sequence. Then I >>>>> got the >>>>> exception when loading new sequences or reloading the same >>>>> sequence. >>>>> Seems >>>>> the Hibernate is trying to insert "genbank" namespace again. Can >>>>> anybody >>>>> tell me what I did wrong? Thanks in advance. >>>>> >>>>> Gang >>>>> >>>>> ================================================================ >>>>> public class SequenceLoaderNew { >>>>> public void loadSeq(String fileName, String namespace) throws >>>>> FileNotFoundException, BioException { >>>>> System.out.println("Start loading file " + fileName + " at " + >>>>> System.currentTimeMillis()); >>>>> BufferedReader br = new BufferedReader(new >>>>> FileReader(fileName)); >>>>> Session session = new >>>>> Configuration().configure().buildSessionFactory().openSession(); >>>>> RichObjectFactory.connectToBioSQL(session); >>>>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>>>> RichSequenceIterator rsi = >>>>> RichSequence.IOTools.readGenbankDNA(br, >>>>> new >>>>> SimpleNamespace(namespace)); >>>>> while (rsi.hasNext()) { >>>>> Transaction tx = session.beginTransaction(); >>>>> RichSequence sequence = rsi.nextRichSequence(); >>>>> System.out.println("Loaded sequence" + >>>>> sequence.getAccession() + >>>>> ", identifier: " + sequence.getIdentifier()); >>>>> try { >>>>> System.out.println("Delete sequence" + >>>>> sequence.getAccession() >>>>> + " if exists."); >>>>> db.removeSequence(sequence.getAccession()); >>>>> } catch (Exception ex) { >>>>> } >>>>> try { >>>>> System.out.println("Save sequence " + >>>>> sequence.getAccession()); >>>>> session.save("BioEntry", sequence); >>>>> tx.commit(); >>>>> session.flush(); >>>>> session.clear(); >>>>> } catch (HibernateException ex) { >>>>> tx.rollback(); >>>>> ex.printStackTrace(); >>>>> } >>>>> } >>>>> } >>>>> >>>>> public static void main(String[] args) throws BioException, >>>>> FileNotFoundException { >>>>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>>>> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>>>> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >>>>> } >>>>> } >>>>> ================================================================ >>>>> org.hibernate.exception.ConstraintViolationException: could not >>>>> insert: >>>>> [Namespace] >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .exception.SQLStateConverter.convert(SQLStateConverter.java:71) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java: >>>>> 43) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .id >>>>> .insert >>>>> .AbstractReturningDelegate >>>>> .performInsert(AbstractReturningDelegate.java:40) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .persister >>>>> .entity >>>>> .AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .persister >>>>> .entity >>>>> .AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .action >>>>> .EntityIdentityInsertAction >>>>> .execute(EntityIdentityInsertAction.java:51) >>>>> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java: >>>>> 279) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSaveOrReplicate(AbstractSaveEventListener.java:298) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSave(AbstractSaveEventListener.java:181) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .saveWithGeneratedOrRequestedId >>>>> (DefaultSaveOrUpdateEventListener.java:187) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>>> at >>>>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>>>> 507) >>>>> at >>>>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>>>> at >>>>> org.hibernate.engine.CascadingAction >>>>> $5.cascade(CascadingAction.java:218) >>>>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>>>> at >>>>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>>>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>>>> 169) >>>>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .cascadeBeforeSave(AbstractSaveEventListener.java:431) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSaveOrReplicate(AbstractSaveEventListener.java:265) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSave(AbstractSaveEventListener.java:181) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .saveWithGeneratedOrRequestedId >>>>> (DefaultSaveOrUpdateEventListener.java:187) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveEventListener >>>>> .saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveEventListener >>>>> .performSaveOrUpdate(DefaultSaveEventListener.java:27) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java: >>>>> 535) >>>>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >>>>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java: >>>>> 38) >>>>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >>>>> Caused by: >>>>> com >>>>> .mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >>>>> Duplicate entry 'genbank' for key 'name' >>>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java: >>>>> 1011) >>>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java: >>>>> 956) >>>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >>>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >>>>> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >>>>> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >>>>> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java: >>>>> 2542) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeInternal(PreparedStatement.java: >>>>> 1734) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >>>>> at >>>>> >>>>> org.hibernate.id.IdentityGenerator >>>>> $ >>>>> GetGeneratedKeysDelegate >>>>> .executeAndExtract(IdentityGenerator.java:73) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .id >>>>> .insert >>>>> .AbstractReturningDelegate >>>>> .performInsert(AbstractReturningDelegate.java:33) >>>>> ... 31 more >>>>> ================================================================ >>>>> >>>>> _______________________________________________ >>>>> BioSQL-l mailing list >>>>> BioSQL-l at lists.open-bio.org >>>>> http://lists.open-bio.org/mailman/listinfo/biosql-l >>>>> >>>>> >>>>> >>> > > _______________________________________________ > BioSQL-l mailing list > BioSQL-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biosql-l > From gcappuccilli at protelix.com Thu May 22 11:39:37 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Thu, 22 May 2008 08:39:37 -0700 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: <48346614.6060102@molbio.mgh.harvard.edu> References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> <48346614.6060102@molbio.mgh.harvard.edu> Message-ID: <8D3625BC-B062-4979-94C1-324385705BF9@protelix.com> Gang, did you fix the problem? If so could you kindly share the solution? I tried your code last night and I couldn't clear those Term instances from the cache. Does RichObjectFactory.clearLRUCache() clear the first level or second level cache? Again, I am not an expert, so I apologize if my question is obvious. Thanks. Guido On May 21, 2008, at 11:12 AM, gang wu wrote: > The scenario is quite simple: I'm using the database to store > Genbank genome sequences. Later I've to update the sequences when > Genbank has newer releases. The following two lines are loading the > same sequence twice. The first time will insert a new BioEntry > record. the second time will delete the existing record and insert a > new record again. > > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > > Following code is used to load multiple genome sequences by calling > the loadSeq() method multiple times. All failed except the first time. > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_006723.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_008945.gbk", "genbank"); > The exception message has the details. Since all variables used in > loadSeq() are local, and I did the session flush/clear/close, then > it should be ok to call the method again. > > Thank you very much for your help. > > Gang > > > Richard Holland wrote: >> I'm not sure why you'd want to do that? Either way, as far as I know, >> Hibernate sessions are not designed for that. If you want to delete >> the sequence then replace it with a completely new sequence object, >> you have to create a new sequence object - you can't reuse the one >> you >> just deleted. The session info is embedded into that object so even >> if >> you clear the session, the object still refers to it. >> >> If you just want to load a sequence, modify it, then save it back, >> you >> should just load it then use saveOrUpdate to save it back again with >> changes. If you want to replace objects in your database, don't load >> them, just delete them, then use save to create new objects in their >> place. >> >> cheers, >> Richard >> >> 2008/5/21 gang wu : >> >>> I got another problem with almost the same code(see attached code >>> and >>> output). If I call the loadSeq() only once, everything works fine. >>> The >>> second call of the same method will fail. By the exception >>> message, it looks >>> like the session is not cleaned up yet though at the end of the >>> method the >>> session has been flush/clear/closed. Anything wrong? >>> >>> Or does anyone have a sequence data loader would like to share? >>> I'm quite >>> frustrated after keeping trying to do this seems simple thing >>> without >>> success. If I can make it work, I'd like to post it on the mailing >>> list. >>> Thanks in advance. >>> >>> Gang >>> >>> ==================================================== >>> public class SequenceLoaderNew { >>> public void loadSeq(String fileName, String namespace) throws >>> FileNotFoundException, BioException, SQLException, >>> InterruptedException { >>> SessionFactory sessionFactory = new >>> Configuration().configure().buildSessionFactory(); >>> Session session = sessionFactory.openSession(); >>> RichObjectFactory.connectToBioSQL(session); >>> Namespace ns = (Namespace) >>> RichObjectFactory.getObject(SimpleNamespace.class, new Object[] >>> {namespace}); >>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>> System.out.println("Start loading file " + fileName + " at " + >>> System.currentTimeMillis()); >>> BufferedReader br = new BufferedReader(new >>> FileReader(fileName)); >>> RichSequenceIterator rsi = >>> RichSequence.IOTools.readGenbankDNA(br, >>> ns); >>> try { >>> while (rsi.hasNext()) { >>> RichSequence sequence = rsi.nextRichSequence(); >>> System.out.println("Loaded sequence" + >>> sequence.getAccession() >>> + ", identifier: " + sequence.getIdentifier()); >>> Transaction tx = session.beginTransaction(); >>> try { >>> System.out.println("Delete sequence" + >>> sequence.getAccession() + " if exists."); >>> db.removeSequence(sequence.getAccession()); >>> tx.commit(); >>> session.flush(); >>> session.clear(); >>> } catch (Exception ex) { >>> if (tx != null) { >>> tx.rollback(); >>> } >>> } >>> try { >>> tx = session.beginTransaction(); >>> System.out.println("Save sequence " + >>> sequence.getAccession()); >>> //session.save("BioEntry", sequence); >>> //db.addSequence(sequence); >>> db.addRichSequence(sequence); >>> tx.commit(); >>> System.out.println("Finished savig sequence " + >>> sequence.getAccession() + "\n"); >>> } catch (HibernateException ex) { >>> tx.rollback(); >>> ex.printStackTrace(); >>> } >>> } >>> } finally { >>> session.flush(); >>> session.clear(); >>> session.close(); >>> } >>> } >>> >>> public static void main(String[] args) throws BioException, >>> FileNotFoundException, InterruptedException, SQLException { >>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>> } >>> } >>> ==================================================== >>> Start loading file /genomeseq/bacteria/NC_005813.gbk at >>> 1211349859602 >>> Loaded sequenceNC_005813, identifier: 45478502 >>> Delete sequenceNC_005813 if exists. >>> Save sequence NC_005813 >>> Finished savig sequence NC_005813 >>> >>> Start loading file /genomeseq/bacteria/NC_005813.gbk at >>> 1211349863761 >>> Loaded sequenceNC_005813, identifier: 45478502 >>> Delete sequenceNC_005813 if exists. >>> Save sequence NC_005813 >>> org.hibernate.NonUniqueObjectException: a different object with >>> the same >>> identifier value was already associated with the session: [Term#20] >>> at >>> org >>> .hibernate >>> .engine >>> .StatefulPersistenceContext >>> .checkUniqueness(StatefulPersistenceContext.java:590) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performUpdate(DefaultSaveOrUpdateEventListener.java:284) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .cascadeBeforeSave(AbstractSaveEventListener.java:431) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSaveOrReplicate(AbstractSaveEventListener.java:265) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSave(AbstractSaveEventListener.java:181) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .saveWithGeneratedOrRequestedId >>> (DefaultSaveOrUpdateEventListener.java:187) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at >>> org >>> .hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java: >>> 296) >>> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java: >>> 242) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .cascadeAfterSave(AbstractSaveEventListener.java:456) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSaveOrReplicate(AbstractSaveEventListener.java:334) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSave(AbstractSaveEventListener.java:181) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .saveWithGeneratedOrRequestedId >>> (DefaultSaveOrUpdateEventListener.java:187) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveEventListener >>> .saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveEventListener >>> .performSaveOrUpdate(DefaultSaveEventListener.java:27) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) >>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >>> Exception in thread "main" org.hibernate.NonUniqueObjectException: a >>> different object with the same identifier value was already >>> associated with >>> the session: [Term#19] >>> at >>> org >>> .hibernate >>> .engine >>> .StatefulPersistenceContext >>> .checkUniqueness(StatefulPersistenceContext.java:590) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performUpdate(DefaultSaveOrUpdateEventListener.java:284) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .cascadeBeforeSave(AbstractSaveEventListener.java:431) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSaveOrReplicate(AbstractSaveEventListener.java:265) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSave(AbstractSaveEventListener.java:181) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .saveWithGeneratedOrRequestedId >>> (DefaultSaveOrUpdateEventListener.java:187) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at >>> org >>> .hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java: >>> 296) >>> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java: >>> 242) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractFlushingEventListener >>> .cascadeOnFlush(AbstractFlushingEventListener.java:131) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractFlushingEventListener >>> .prepareEntityFlushes(AbstractFlushingEventListener.java:122) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractFlushingEventListener >>> .flushEverythingToExecutions(AbstractFlushingEventListener.java:65) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java: >>> 26) >>> at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) >>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) >>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >>> ==================================================== >>> >>> Richard Holland wrote: >>> >>>> Forgot to copy my reply back to the lists! >>>> >>>> >>>> ---------- Forwarded message ---------- >>>> From: Richard Holland >>>> Date: 2008/5/20 >>>> Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue >>>> To: gang wu >>>> >>>> >>>> You need to substitute this line: >>>> >>>> RichSequenceIterator rsi = >>>> RichSequence.IOTools.readGenbankDNA(br, new >>>> SimpleNamespace(namespace)); >>>> >>>> with this line: >>>> >>>> Namespace ns = >>>> (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new >>>> Object[]{namespace}); >>>> RichSequenceIterator rsi = >>>> RichSequence.IOTools.readGenbankDNA(br, ns); >>>> >>>> cheers, >>>> Richard >>>> >>>> PS. You're the second person who has quoted this section of code on >>>> this list recently, and had the same problem with it. If you got it >>>> from a website somewhere, could you send me the URL so I can get in >>>> touch with the authors and get them to correct it? Thanks! >>>> >>>> 2008/5/20 gang wu : >>>> >>>> >>>>> Hi all, >>>>> >>>>> I'm trying to load Genbank sequence into BioSQL database with >>>>> BioJavax/Hibernate. It's Ok to load the first sequence. Then I >>>>> got the >>>>> exception when loading new sequences or reloading the same >>>>> sequence. >>>>> Seems >>>>> the Hibernate is trying to insert "genbank" namespace again. Can >>>>> anybody >>>>> tell me what I did wrong? Thanks in advance. >>>>> >>>>> Gang >>>>> >>>>> ================================================================ >>>>> public class SequenceLoaderNew { >>>>> public void loadSeq(String fileName, String namespace) throws >>>>> FileNotFoundException, BioException { >>>>> System.out.println("Start loading file " + fileName + " at " + >>>>> System.currentTimeMillis()); >>>>> BufferedReader br = new BufferedReader(new >>>>> FileReader(fileName)); >>>>> Session session = new >>>>> Configuration().configure().buildSessionFactory().openSession(); >>>>> RichObjectFactory.connectToBioSQL(session); >>>>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>>>> RichSequenceIterator rsi = >>>>> RichSequence.IOTools.readGenbankDNA(br, >>>>> new >>>>> SimpleNamespace(namespace)); >>>>> while (rsi.hasNext()) { >>>>> Transaction tx = session.beginTransaction(); >>>>> RichSequence sequence = rsi.nextRichSequence(); >>>>> System.out.println("Loaded sequence" + >>>>> sequence.getAccession() + >>>>> ", identifier: " + sequence.getIdentifier()); >>>>> try { >>>>> System.out.println("Delete sequence" + >>>>> sequence.getAccession() >>>>> + " if exists."); >>>>> db.removeSequence(sequence.getAccession()); >>>>> } catch (Exception ex) { >>>>> } >>>>> try { >>>>> System.out.println("Save sequence " + >>>>> sequence.getAccession()); >>>>> session.save("BioEntry", sequence); >>>>> tx.commit(); >>>>> session.flush(); >>>>> session.clear(); >>>>> } catch (HibernateException ex) { >>>>> tx.rollback(); >>>>> ex.printStackTrace(); >>>>> } >>>>> } >>>>> } >>>>> >>>>> public static void main(String[] args) throws BioException, >>>>> FileNotFoundException { >>>>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>>>> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>>>> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >>>>> } >>>>> } >>>>> ================================================================ >>>>> org.hibernate.exception.ConstraintViolationException: could not >>>>> insert: >>>>> [Namespace] >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .exception.SQLStateConverter.convert(SQLStateConverter.java:71) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java: >>>>> 43) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .id >>>>> .insert >>>>> .AbstractReturningDelegate >>>>> .performInsert(AbstractReturningDelegate.java:40) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .persister >>>>> .entity >>>>> .AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .persister >>>>> .entity >>>>> .AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .action >>>>> .EntityIdentityInsertAction >>>>> .execute(EntityIdentityInsertAction.java:51) >>>>> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java: >>>>> 279) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSaveOrReplicate(AbstractSaveEventListener.java:298) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSave(AbstractSaveEventListener.java:181) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .saveWithGeneratedOrRequestedId >>>>> (DefaultSaveOrUpdateEventListener.java:187) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>>> at >>>>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>>>> 507) >>>>> at >>>>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>>>> at >>>>> org.hibernate.engine.CascadingAction >>>>> $5.cascade(CascadingAction.java:218) >>>>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>>>> at >>>>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>>>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>>>> 169) >>>>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .cascadeBeforeSave(AbstractSaveEventListener.java:431) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSaveOrReplicate(AbstractSaveEventListener.java:265) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSave(AbstractSaveEventListener.java:181) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .saveWithGeneratedOrRequestedId >>>>> (DefaultSaveOrUpdateEventListener.java:187) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveEventListener >>>>> .saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveEventListener >>>>> .performSaveOrUpdate(DefaultSaveEventListener.java:27) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java: >>>>> 535) >>>>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >>>>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java: >>>>> 38) >>>>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >>>>> Caused by: >>>>> com >>>>> .mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >>>>> Duplicate entry 'genbank' for key 'name' >>>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java: >>>>> 1011) >>>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java: >>>>> 956) >>>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >>>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >>>>> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >>>>> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >>>>> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java: >>>>> 2542) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeInternal(PreparedStatement.java: >>>>> 1734) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >>>>> at >>>>> >>>>> org.hibernate.id.IdentityGenerator >>>>> $ >>>>> GetGeneratedKeysDelegate >>>>> .executeAndExtract(IdentityGenerator.java:73) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .id >>>>> .insert >>>>> .AbstractReturningDelegate >>>>> .performInsert(AbstractReturningDelegate.java:33) >>>>> ... 31 more >>>>> ================================================================ >>>>> >>>>> _______________________________________________ >>>>> BioSQL-l mailing list >>>>> BioSQL-l at lists.open-bio.org >>>>> http://lists.open-bio.org/mailman/listinfo/biosql-l >>>>> >>>>> >>>>> >>> > > _______________________________________________ > BioSQL-l mailing list > BioSQL-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biosql-l > From dicknetherlands at gmail.com Thu May 22 17:07:23 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Thu, 22 May 2008 22:07:23 +0100 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: <4835DAAE.6080609@molbio.mgh.harvard.edu> References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> <48346EE1.70004@unity.ncsu.edu> <4835DAAE.6080609@molbio.mgh.harvard.edu> Message-ID: Interesting stuff. Have you tried parsing those Arabidopsis files without persisting them? i.e. just running them through the parser without attaching anything to Hibernate. I'm wondering how much of the slowness is Hibernate, and how much is BioJava's own object model. cheers, Richard 2008/5/22 gang wu : > Hi Doug and Richard, > > Thanks for your reply. I've been following your suggestions and finding a > way that works for me. Basically, if there is anything in the code that > flush/clear the session, it's going to be a problem for the following calls > to the same method. I'm not sure if it's Hibernate bug or is like Richard > suggested that it is a feature. Attached is the code I am using to > load/update Genbank sequences. It could be easily generalized to load other > sequences(if the process works). > > Seems it works for me now(still running test on bigger sequences). It's > pretty fast to load those small bacteria sequences, usually 10-60 seconds. > But it seems it's getting choked with the bigger sequences. I started it > last night at about 11pm to load the 5 Arabidopsis thaliana genome > sequences(about 280MB total). The first one finished in about 1.5 hours and > it's stilling hanging there now on the second sequence. I saw a 100% CPU > usage and 2.6GB memory assigned for the program. The MySQL server is running > on the same server. The machine has 8GB RAM and 2 dual core exon CPUS > running at 3.73GHZ. > > Doug, I tested your code and seems the output is not always consistent: I > tried to load two sequences. Sometimes succeeded and sometimes failed. I > wonder it's still the session issue. I did not try with removing those > flush/clear code. > > Thanks again for your response. It really helps me out. I'll post my code > here if I work out a better solution. > > Gang > > Doug Brown wrote: > > Hi Gang wu, > > I recognize your problem. I to had to build a loader for genbank flat > files. When attempting to 'replace' a record stored in the database, one > needs to explicitly delete it before doing the save. I found that the > hibernate code does not seem to understand that an in-memory deletion should > be realized in the data base prior to the new insertion. My solution, see > attached code, was to commit the transaction for the deletion and then open > a new transaction for the insertion. > > Try inserting the following after "System.out.println("Loaded sequence"": > > // delete any extant sequence from the database. The cascaded > // constraints will result in removal of all associated features > // and what-not. > Query q = session.createQuery( "from BioEntry as s where s.name = > :acc"); > q.setString( "acc", sequence.getAccession()); > BioEntry be = (BioEntry)q.uniqueResult(); > if ( be != null) > { > // Interestingly, hibernate does not seem to do transactions in the > // same sense that a database would. Thus, I need to commit the > // delete operation before I attempt to insert the replacement > // information. > session.delete( be); > tx.commit(); > tx = session.beginTransaction(); > } > > > Regards, > Doug > > gang wu wrote: > > I got another problem with almost the same code(see attached code and > output). If I call the loadSeq() only once, everything works fine. The > second call of the same method will fail. By the exception message, it looks > like the session is not cleaned up yet though at the end of the method the > session has been flush/clear/closed. Anything wrong? > > ________________________________ > // Copyright 2008, by North Carolina State University. All rights reserved. > > /** > * > * javac -cp > "C:\WorkData\javaCode\;C:\JavaDev\biojava-live\biojava-live.jar;C:\jars\hibernate3.jar;C:\jars\mysql-connector-java-3.1.13-bin.jar" > bioinformatics\biojava\BriefLoader.java > * > * java -Xmx100m -cp > "c:\jars\asm.jar;c:\jars\asm-attrs.jar;c:\jars\cglib-2.1.3.jar;c:\jars\jta.jar;c:\jars\antlr-2.7.6.jar;c:\jars\commons-collections-2.1.1.jar;c:\jars\commons-logging-1.0.4.jar;c:\jars\dom4j-1.6.1.jar;C:\WorkData\javaCode\;C:\JavaDev\biojava-live\biojava-live.jar;C:\jars\hibernate3.jar;C:\jars\mysql-connector-java-3.1.13-bin.jar" > -Djdbc.drivers=com.mysql.jdbc.Driver bioinformatics.biojava.BriefLoader > C:\WorkData\genomes\M_grisea_genbank_v5\CH476760.gb > */ > package bioinformatics.biojavaTools; > > import java.io.BufferedReader; > import java.io.File; > import java.io.FileNotFoundException; > import java.io.FileReader; > import java.io.IOException; > > import org.biojava.bio.BioException; > import org.biojavax.*; > import org.biojavax.RichObjectFactory; > import org.biojavax.bio.db.biosql.BioSQLRichSequenceDB; > import org.biojavax.bio.seq.*; > import org.biojavax.bio.seq.RichSequence.*; > import org.biojavax.bio.seq.RichSequence.IOTools; > import org.biojavax.bio.seq.io.*; > import org.biojavax.bio.BioEntry; > > import org.hibernate.*; > import org.hibernate.cfg.*; > > //import java.util.logging.*; > //import org.apache.commons.logging.*; > > > > > public class BriefLoader > { > static SessionFactory sessionFactory; > static boolean verbose = false; > public static void main(String[] args) > { > int argPos = 0; > if ( args.length > 0 && args[argPos].equals( "-v")) > { > verbose = true; > argPos++; > } > if ( argPos == args.length) > { > System.out.println( "Usage: BriefLoader [-v] file1.bg [file2.gb > ...]"); > return; > } > > BriefLoader bf = new BriefLoader(); > > // logging: > // I want to suppress the verbose info messages. > // After some investigation, it seems that commons > // logging uses a default of Jdk14Logger (the standard java logger). > // Thus, I can control the commons logger via the java.util.logging API. > // API > java.util.logging.Logger jdklogger = > java.util.logging.Logger.getLogger("org.hibernate"); > jdklogger.setLevel(java.util.logging.Level.WARNING); > > sessionFactory = new > // Configuration is very expensive and can only be done once. > // > // properties can be specified via the file hibernate.properties located > // on the classpath, > // on the command line via -D, > // via the defaut "hibernate.cfg.xml" file in the current working > directory, > // via an explicitly identified file, e.g. "specific_file.cfg.xml", > // via explicit calls to setProperty. The same goes for resources. > // Later definitions override earlier ones. > Configuration() > // Note: > // specifying the resource location of the configuration file > // works ONLY if I also modify the > // hibernate.cfg.xml file to add the class' package as a prefix > // for every resource. Hibernate does not understand the > // concept of relative locations based on the location of the > // configuratin file. Nonetheless, this allows me to organize the > // mapping files based on java packages. > .configure( bf.getClass().getResource( "hibernate.cfg.xml")) > // the following should allows use of a generic configuration file > // by overriding the items that need to be customized. > //.setProperty( "connection.url", > "jdbc:mysql://someMachine.ncsu.edu:3306/M_grisea_genbank_biosql") > //.setProperty( "connection.username", "aUser") > //.setProperty( "connection.password", "aPassword") > // > // The following can be used to adjust memory consumption. > //.setProperty( "hibernate.jdbc.batch_size", "20") > //.setProperty( "hibernate.cache.use_second_level_cache", "false") > // > // examining the generated SQL can be informative... > //.setProperty( "hibernate.show_sql", "true") > > // Go and make the support interfaces... > .buildSessionFactory(); > > Session session = null; > try > { > session = bf.doSessionFactoryBindings( sessionFactory); > > while ( argPos < args.length) > { > File f = new File( args[argPos++]); > > // handle one level of directories > if ( f.isDirectory()) > { > File contents[] = f.listFiles(); > for ( int j=contents.length-1;j>=0;j--) > bf.loadNSave( session, contents[j]); > } > > bf.loadNSave( session, f); > } > } > finally > { > if ( session != null) > { > session.flush(); // force in-memory to disk. > session.close(); // only for local sessions > } > } > } > > /** > * The session is the primary interaction layer between Hibernate and > * the underlying database. Closely allied with that is a suite of > * Biojavax classes handling the load and save operations. These classes > * are coordinated throught the RichObjectFactory. Thus, correctly > * setting up and using the factory for all object operations is > * critical! > */ > Session doSessionFactoryBindings( SessionFactory sessionFactory) > { > if ( verbose) System.out.println( "doing bindings."); > // open a session before processing the files. This allows the > // session to survive across the multiple transactions. And, hopefully, > // to provide level-2 caching services for the objects.... > // Contrast with getCurrentSession wich only survives for the current > // transaction. > Session session = sessionFactory.openSession(); > > // Change DefaultNamespaceName binding from "biojavax" > RichObjectFactory.setDefaultNamespaceName( "genbankBiosqlRich"); > > // Change DefaultOntologyName binding from "lcl". Hopefully, this will > // map the genbank annotation information into the SO term space. This > // works for some, but not all features. Those which donto map are > // flagged as "auto-generated by biojavax". > // nota bene: may be dangerous if semantics are not exactly the same! > // examination of the SO mapping indicated that were the terms align, > the > // semantics also align. > // Benefit is that semantic queries can be performed on the loaded info. > RichObjectFactory.setDefaultOntologyName( "sequence"); //"SO" ); > > > // Hook to BiojavaX and BioSQL. This sets up the proper conditions for > // transparently hooking to the database and supplying objects from > // that db if they exist within it. This is accomplished via hooking the > // Builder, Resolver, and Handler to BioSQL implementations. > // Establishes standard bindings for: > // RichObjectBuilder, > // DefaultCrossReferenceResolver, > // DefaultRichSequenceHandler. > // nb: PositionResolver is left as new AverageResolver(); > RichObjectFactory.connectToBioSQL(session); > > // also grab a reference to the underlying database (so that I can use > // the convenience wrapper methods for delting entries). > //db = new BioSQLRichSequenceDB( session); // create the > RichSequenceDB wrapper around the Hibernate session > > return session; > } > > /** > * This works for genbank files containing multiple sequences. > * Originaly concept from: > http://portal.open-bio.org/pipermail/biojava-l/2007-April/005824.html > * It fails on inserting existant record(s) - does not replace... > * This causes grief when loading multiple files... > */ > public void loadNSave( Session session, File fileName) > { > boolean localSession = (session == null); > Transaction tx = null; > // ensure that an acceptable session configuration exists. > if ( session == null) throw new Error( "session object not > established"); > > // Note the retrieval of namespace VIA the factory. The interface > // documentation did not make clear the requirement to use the > // established 'singleton' object (via getDefaultNamespace or > equivalent). > // The underlying hibernate code does not attempt to automatically > ensure > // the uniqueness (singleton) by attempting a load of any instances. > // Failure to use the factory will result in attempts to create a > // duplicate namespace in the database. > org.biojavax.Namespace ns = RichObjectFactory.getDefaultNamespace(); > > try > { > if ( verbose) System.out.println( "*********** Loading > "+fileName+"..."); > BufferedReader br = new BufferedReader( new FileReader( fileName) ); > > // readGenbankDNA loads the objects from the stream and uses the > // established factory(ies) and defaults for object creation. > if ( verbose) System.out.println( "*********** readGenbankDNA..."); > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA( br, > ns); > > while ( rsi.hasNext() ) // for each sequence in the file... > { > if ( verbose) System.out.println( "*********** start transaction."); > // Hibernate seems to REQUIRE transactions when objects are > modified. > tx = session.beginTransaction(); > > if ( verbose) System.out.println( "*********** Loading next > sequence..."); > RichSequence sequence = rsi.nextRichSequence(); > System.out.println( "loaded sequence "+sequence.getAccession()+ > ", identifier: "+ sequence.getIdentifier()); > > // delete any extant sequence from the database. The cascaded > // constraints will result in removal of all associated features > // and what-not. > Query q = session.createQuery( "from BioEntry as s where s.name = > :acc"); > q.setString( "acc", sequence.getAccession()); > BioEntry be = (BioEntry)q.uniqueResult(); > if ( be != null) > { > if ( verbose) System.out.println( "*********** DELETING extant > sequence..."); > // Interesintly, hibernate does not seem to do transactions in the > // same sense that a database would. Thus, I need to commit the > // delete operation before I attempt to insert the replacement > // information. > session.delete( be); > tx.commit(); > tx = session.beginTransaction(); > } > > try > { > // Loading entire genomes from genbank consumes large amounts > // of memory. Thus, each sequence and its associated > // annotations are wrapped in a transaction, the transaction > saved, > // and the in-memory cache is cleared. While being somewhat > // inefficient, this approach does limit memory consumption. > if ( verbose) System.out.println( "*********** saving..."); > > // synchronize in-memory representation w/ the database > session.saveOrUpdate( "Sequence", sequence ); > if ( verbose) System.out.println( "*********** comitting..."); > tx.commit(); // save to database - does an automatic flush > // batch operations overwhelm the hibernate cache - clear it out! > if ( verbose) System.out.println( "*********** flushing..."); > session.flush(); // force in-memory to disk. > if ( verbose) System.out.println( "*********** clearing..."); > session.clear(); // clean out cache. > } > catch (HibernateException ex) > { > tx.rollback(); // discard the sequence and all its annotations > ex.printStackTrace(); > } > } > } > catch (FileNotFoundException ex) > { > ex.printStackTrace(); > } > catch ( BioException bex) > { > bex.printStackTrace(); > } > } > > } > > > > package primerdb; > > import java.io.BufferedReader; > import java.io.File; > import java.io.FileFilter; > import java.io.FileNotFoundException; > import java.io.FileReader; > import java.io.IOException; > import java.sql.SQLException; > import java.util.ArrayList; > import org.biojava.bio.BioException; > import org.biojavax.Namespace; > import org.biojavax.RichObjectFactory; > import org.biojavax.SimpleNamespace; > import org.biojavax.bio.BioEntry; > import org.biojavax.bio.db.RichSequenceDB; > import org.biojavax.bio.db.biosql.BioSQLRichSequenceDB; > import org.biojavax.bio.seq.RichSequence; > import org.biojavax.bio.seq.RichSequenceIterator; > import org.hibernate.HibernateException; > import org.hibernate.Query; > import org.hibernate.Session; > import org.hibernate.SessionFactory; > import org.hibernate.Transaction; > import org.hibernate.cfg.Configuration; > > public class SequenceLoaderNew { > > private SessionFactory sessionFactory; > private Session session = null; > > private void initSession() { > sessionFactory = new > Configuration().configure().buildSessionFactory(); > session = sessionFactory.openSession(); > RichObjectFactory.connectToBioSQL(session); > } > > public static ArrayList getFiles(File filePath) { > FileFilter fileFilter = new FileFilter() { > > public boolean accept(File pathname) { > return pathname.isFile(); > } > }; > return getFiles(filePath, fileFilter); > } > > public static ArrayList getFiles(File filePath, FileFilter fileFilter) { > ArrayList rtn = new ArrayList(); > if (filePath.isFile()) { > if (fileFilter.accept(filePath)) { > rtn.add(filePath); > } > } else if (filePath.isDirectory()) { > File[] flist = filePath.listFiles(); > for (int i = 0; i < flist.length; i++) { > ArrayList subRtn = getFiles(flist[i], fileFilter); > for (int k = 0; k < subRtn.size(); k++) { > rtn.add(subRtn.get(k)); > } > } > } > return rtn; > } > > public void loadGenbankSeq(String[] filePaths, String namespace) throws > FileNotFoundException, BioException, SQLException, InterruptedException, > IOException { > File[] files = new File[filePaths.length]; > for (int i = 0; i < filePaths.length; i++) { > files[i] = new File(filePaths[i]); > } > loadGenbankSeq(files, namespace); > } > > public void loadGenbankSeq(File[] files, String namespace) throws > FileNotFoundException, BioException, SQLException, InterruptedException, > IOException { > if (session == null) { > initSession(); > } > Namespace ns = (Namespace) > RichObjectFactory.getObject(SimpleNamespace.class, new Object[]{namespace}); > RichSequenceDB db = new BioSQLRichSequenceDB(session); > for (int i = 0; i < files.length; i++) { > File file = files[i]; > System.out.println("Start loading file " + file.getAbsolutePath() > + " at " + System.currentTimeMillis()); > BufferedReader br = new BufferedReader(new FileReader(file)); > RichSequenceIterator rsi = > RichSequence.IOTools.readGenbankDNA(br, ns); > try { > while (rsi.hasNext()) { > Transaction tx = session.beginTransaction(); > try { > RichSequence sequence = rsi.nextRichSequence(); > System.out.println("Loaded sequence" + > sequence.getAccession() + ", identifier: " + sequence.getIdentifier()); > Query q = session.createQuery("from BioEntry as s > where s.name = :acc"); > q.setString("acc", sequence.getAccession()); > BioEntry be = (BioEntry) q.uniqueResult(); > if (be != null) { > session.delete(be); > tx.commit(); > tx = session.beginTransaction(); > } > System.out.println("Save sequence " + > sequence.getAccession()); > session.saveOrUpdate("Sequence", sequence); > tx.commit(); > System.out.println("Finished savig sequence " + > sequence.getAccession() + "\n"); > } catch (HibernateException ex) { > tx.rollback(); > ex.printStackTrace(); > } > } > } finally { > //session.flush(); > //RichObjectFactory.clearLRUCache(); > //session.clear(); > } > br.close(); > } > } > > public static void main(String[] args) throws BioException, > FileNotFoundException, InterruptedException, SQLException, IOException { > SequenceLoaderNew sl = new SequenceLoaderNew(); > FileFilter ff = new FileFilter() { > public boolean accept(File pathname) { > return pathname.isFile() && > (pathname.getName().toLowerCase().endsWith("gbk") || > pathname.getName().toLowerCase().endsWith("gb")); > } > }; > ArrayList flist = SequenceLoaderNew.getFiles(new > File("/genomeseq/bacteria"), ff); > File[] files = new File[flist.size()]; > for (int i = 0; i < flist.size(); i++) { > files[i] = (File) flist.get(i); > } > for (int i = 0; i < files.length; i++) { > System.out.println(files[i].getAbsolutePath() + ", size: " + > files[i].length()); > } > sl.loadGenbankSeq(files, "genbank"); > } > } > > From hemant_katta at yahoo.co.in Fri May 23 05:16:19 2008 From: hemant_katta at yahoo.co.in (HEMANT KATTA) Date: Fri, 23 May 2008 14:46:19 +0530 (IST) Subject: [Biojava-l] (no subject) Message-ID: <594536.37688.qm@web8317.mail.in.yahoo.com> sir, i m new in biojava. can any one tell what actually Distribution class does. with regards Hemant Best Jokes, Best Friends, Best Food and more. Go to http://in.promos.yahoo.com/groups/bestofyahoo/ From markjschreiber at gmail.com Fri May 23 07:26:51 2008 From: markjschreiber at gmail.com (Mark Schreiber) Date: Fri, 23 May 2008 19:26:51 +0800 Subject: [Biojava-l] (no subject) In-Reply-To: <594536.37688.qm@web8317.mail.in.yahoo.com> References: <594536.37688.qm@web8317.mail.in.yahoo.com> Message-ID: <93b45ca50805230426q463a9c91pa590ad3c4755e89d@mail.gmail.com> The Distribution classes hold the frequency of observed symbols. You can use them for example to store the frequency of ACGT in a sequence. Take a look at http://biojava.org/wiki/BioJava:CookBook#Counts_and_Distributions - Mark On Fri, May 23, 2008 at 5:16 PM, HEMANT KATTA wrote: > sir, i m new in biojava. can any one tell what actually Distribution > class does. > > with regards > Hemant > > > Best Jokes, Best Friends, Best Food and more. Go to > http://in.promos.yahoo.com/groups/bestofyahoo/ > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From gabrielle_doan at gmx.net Wed May 28 08:21:19 2008 From: gabrielle_doan at gmx.net (Gabrielle Doan) Date: Wed, 28 May 2008 14:21:19 +0200 Subject: [Biojava-l] How to query 'value' in 'seqfeature_qualifier_value' using HQL Message-ID: <483D4E3F.2080207@gmx.net> Hi all, I am a newbie to BioJava so sorry if questions are too simple! I started working on BioJava and BioSQL using Hibernate and BioJavaX and met the following problem: I would like to query the property 'value' in 'seqfeature_qualifier_value' using HQL but don't have a clue how to do that. I have found at the BiojavaX Documentation the Hibernate object-relational mappings. At the table you can see that the BioSQL table 'seqfeature_qualifier_value' is mapped to the HQL name 'Feature'. That means if I want to get the 'seqfeature_qualifier_value' I have to use the properties of Features. I had a look at the xml mapping files, but unfortunately I could not find a solution for my problem. It would be very nice if there was a table in which I could see the properties of all HQL names so that I could see which properties I can actually query for. In BioSQL I can simply see the table's definition and know all such properties. The designated XML files are not very helpful to understand the mapping between BioSQL and HQL. I am grateful for any hints, which explain the properties of these HQL object names. Cheers, Gabrielle Doan From dicknetherlands at gmail.com Wed May 28 09:57:47 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Wed, 28 May 2008 14:57:47 +0100 Subject: [Biojava-l] Fwd: How to query 'value' in 'seqfeature_qualifier_value' using HQL In-Reply-To: References: <483D4E3F.2080207@gmx.net> Message-ID: Forwarding this response to the list - i keep forgetting to hit reply-all instead of reply... ---------- Forwarded message ---------- From: Richard Holland Date: 2008/5/28 Subject: Re: [Biojava-l] How to query 'value' in 'seqfeature_qualifier_value' using HQL To: Gabrielle Doan Hello. I think you want a query like this: select feature.noteSet.note.value from Feature feature; This is because Feature.xml has a collection of annotations, called noteSet, which map to seqfeature_qualifier_value, which is the table you are looking for. That collection consists of a number of entries, each of which is a SimpleNote object called 'note' in the XML. Within that you can see a property called 'value'. If it doesn't work (I can't test it right now), some permutation of the above will (try removing either noteSet or note). See http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html for explanations on the select syntax. In terms of lookup tables, yes it would be great if someone could update the existing ones to also list out property names. Haven't got time myself at present but if there are volunteers they would be greatly appreciated. cheers, Richard 2008/5/28 Gabrielle Doan : > Hi all, > > I am a newbie to BioJava so sorry if questions are too simple! I started > working on BioJava and BioSQL using Hibernate and BioJavaX and met the > following problem: > > I would like to query the property 'value' in 'seqfeature_qualifier_value' > using HQL but don't have a clue how to do that. > I have found at the BiojavaX Documentation the Hibernate > object-relational mappings. At the table you can see that the BioSQL table > 'seqfeature_qualifier_value' is mapped to the HQL name 'Feature'. That means > if I want to get the 'seqfeature_qualifier_value' I have to use the > properties of Features. > I had a look at the xml mapping files, but unfortunately I could not find a > solution for my problem. > > It would be very nice if there was a table in which I could see the > properties of all HQL names so that I could see which properties I can > actually query for. In BioSQL I can simply see the table's definition and > know all such properties. The designated XML files are not very helpful to > understand the mapping between BioSQL and HQL. > I am grateful for any hints, which explain the properties of these HQL > object names. > > Cheers, > > Gabrielle Doan > > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From armita_sh at yahoo.com Tue May 13 14:00:19 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 18:00:19 -0000 Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <165609.65933.qm@web51412.mail.re2.yahoo.com> An HTML attachment was scrubbed... URL: From debrown at unity.ncsu.edu Wed May 21 14:57:38 2008 From: debrown at unity.ncsu.edu (Doug Brown) Date: Wed, 21 May 2008 18:57:38 -0000 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: <4833C100.7040304@molbio.mgh.harvard.edu> References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> Message-ID: <48346EE1.70004@unity.ncsu.edu> Hi Gang wu, I recognize your problem. I to had to build a loader for genbank flat files. When attempting to 'replace' a record stored in the database, one needs to explicitly delete it before doing the save. I found that the hibernate code does not seem to understand that an in-memory deletion should be realized in the data base prior to the new insertion. My solution, see attached code, was to commit the transaction for the deletion and then open a new transaction for the insertion. Try inserting the following after "System.out.println("Loaded sequence"": // delete any extant sequence from the database. The cascaded // constraints will result in removal of all associated features // and what-not. Query q = session.createQuery( "from BioEntry as s where s.name = :acc"); q.setString( "acc", sequence.getAccession()); BioEntry be = (BioEntry)q.uniqueResult(); if ( be != null) { // Interestingly, hibernate does not seem to do transactions in the // same sense that a database would. Thus, I need to commit the // delete operation before I attempt to insert the replacement // information. session.delete( be); tx.commit(); tx = session.beginTransaction(); } Regards, Doug gang wu wrote: > I got another problem with almost the same code(see attached code and > output). If I call the loadSeq() only once, everything works fine. The > second call of the same method will fail. By the exception message, it > looks like the session is not cleaned up yet though at the end of the > method the session has been flush/clear/closed. Anything wrong? -- Doug Brown - Bioinformatics Fungal Genomics Laboratory Center for Integrated Fungal Research North Carolina State University Campus Box 7251, Raleigh, NC 27695-7251 https://www.fungalgenomics.ncsu.edu/~debrown/ Tel: (919) 513-0394, Fax (919) 513-0024 e-mail: doug_brown AtSign ncsu.edu -------------- next part -------------- A non-text attachment was scrubbed... Name: BriefLoader.java Type: text/x-java Size: 11672 bytes Desc: not available URL: From gwu at molbio.mgh.harvard.edu Thu May 22 16:42:45 2008 From: gwu at molbio.mgh.harvard.edu (gang wu) Date: Thu, 22 May 2008 20:42:45 -0000 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: <48346EE1.70004@unity.ncsu.edu> References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> <48346EE1.70004@unity.ncsu.edu> Message-ID: <4835DAAE.6080609@molbio.mgh.harvard.edu> Hi Doug and Richard, Thanks for your reply. I've been following your suggestions and finding a way that works for me. Basically, if there is anything in the code that flush/clear the session, it's going to be a problem for the following calls to the same method. I'm not sure if it's Hibernate bug or is like Richard suggested that it is a feature. Attached is the code I am using to load/update Genbank sequences. It could be easily generalized to load other sequences(if the process works). Seems it works for me now(still running test on bigger sequences). It's pretty fast to load those small bacteria sequences, usually 10-60 seconds. But it seems it's getting choked with the bigger sequences. I started it last night at about 11pm to load the 5 Arabidopsis thaliana genome sequences(about 280MB total). The first one finished in about 1.5 hours and it's stilling hanging there now on the second sequence. I saw a 100% CPU usage and 2.6GB memory assigned for the program. The MySQL server is running on the same server. The machine has 8GB RAM and 2 dual core exon CPUS running at 3.73GHZ. Doug, I tested your code and seems the output is not always consistent: I tried to load two sequences. Sometimes succeeded and sometimes failed. I wonder it's still the session issue. I did not try with removing those flush/clear code. Thanks again for your response. It really helps me out. I'll post my code here if I work out a better solution. Gang Doug Brown wrote: > Hi Gang wu, > > I recognize your problem. I to had to build a loader for genbank flat > files. When attempting to 'replace' a record stored in the database, > one needs to explicitly delete it before doing the save. I found that > the hibernate code does not seem to understand that an in-memory > deletion should be realized in the data base prior to the new > insertion. My solution, see attached code, was to commit the > transaction for the deletion and then open a new transaction for the > insertion. > > Try inserting the following after "System.out.println("Loaded sequence"": > > // delete any extant sequence from the database. The cascaded > // constraints will result in removal of all associated features > // and what-not. > Query q = session.createQuery( "from BioEntry as s where s.name > = :acc"); > q.setString( "acc", sequence.getAccession()); > BioEntry be = (BioEntry)q.uniqueResult(); > if ( be != null) > { > // Interestingly, hibernate does not seem to do transactions > in the > // same sense that a database would. Thus, I need to commit the > // delete operation before I attempt to insert the replacement > // information. > session.delete( be); > tx.commit(); > tx = session.beginTransaction(); > } > > > Regards, > Doug > > gang wu wrote: >> I got another problem with almost the same code(see attached code and >> output). If I call the loadSeq() only once, everything works fine. >> The second call of the same method will fail. By the exception >> message, it looks like the session is not cleaned up yet though at >> the end of the method the session has been flush/clear/closed. >> Anything wrong? > > ------------------------------------------------------------------------ > > // Copyright 2008, by North Carolina State University. All rights reserved. > > /** > * > * javac -cp "C:\WorkData\javaCode\;C:\JavaDev\biojava-live\biojava-live.jar;C:\jars\hibernate3.jar;C:\jars\mysql-connector-java-3.1.13-bin.jar" bioinformatics\biojava\BriefLoader.java > * > * java -Xmx100m -cp "c:\jars\asm.jar;c:\jars\asm-attrs.jar;c:\jars\cglib-2.1.3.jar;c:\jars\jta.jar;c:\jars\antlr-2.7.6.jar;c:\jars\commons-collections-2.1.1.jar;c:\jars\commons-logging-1.0.4.jar;c:\jars\dom4j-1.6.1.jar;C:\WorkData\javaCode\;C:\JavaDev\biojava-live\biojava-live.jar;C:\jars\hibernate3.jar;C:\jars\mysql-connector-java-3.1.13-bin.jar" -Djdbc.drivers=com.mysql.jdbc.Driver bioinformatics.biojava.BriefLoader C:\WorkData\genomes\M_grisea_genbank_v5\CH476760.gb > */ > package bioinformatics.biojavaTools; > > import java.io.BufferedReader; > import java.io.File; > import java.io.FileNotFoundException; > import java.io.FileReader; > import java.io.IOException; > > import org.biojava.bio.BioException; > import org.biojavax.*; > import org.biojavax.RichObjectFactory; > import org.biojavax.bio.db.biosql.BioSQLRichSequenceDB; > import org.biojavax.bio.seq.*; > import org.biojavax.bio.seq.RichSequence.*; > import org.biojavax.bio.seq.RichSequence.IOTools; > import org.biojavax.bio.seq.io.*; > import org.biojavax.bio.BioEntry; > > import org.hibernate.*; > import org.hibernate.cfg.*; > > //import java.util.logging.*; > //import org.apache.commons.logging.*; > > > > > public class BriefLoader > { > static SessionFactory sessionFactory; > static boolean verbose = false; > public static void main(String[] args) > { > int argPos = 0; > if ( args.length > 0 && args[argPos].equals( "-v")) > { > verbose = true; > argPos++; > } > if ( argPos == args.length) > { > System.out.println( "Usage: BriefLoader [-v] file1.bg [file2.gb ...]"); > return; > } > > BriefLoader bf = new BriefLoader(); > > // logging: > // I want to suppress the verbose info messages. > // After some investigation, it seems that commons > // logging uses a default of Jdk14Logger (the standard java logger). > // Thus, I can control the commons logger via the java.util.logging API. > // API > java.util.logging.Logger jdklogger = java.util.logging.Logger.getLogger("org.hibernate"); > jdklogger.setLevel(java.util.logging.Level.WARNING); > > sessionFactory = new > // Configuration is very expensive and can only be done once. > // > // properties can be specified via the file hibernate.properties located > // on the classpath, > // on the command line via -D, > // via the defaut "hibernate.cfg.xml" file in the current working directory, > // via an explicitly identified file, e.g. "specific_file.cfg.xml", > // via explicit calls to setProperty. The same goes for resources. > // Later definitions override earlier ones. > Configuration() > // Note: > // specifying the resource location of the configuration file > // works ONLY if I also modify the > // hibernate.cfg.xml file to add the class' package as a prefix > // for every resource. Hibernate does not understand the > // concept of relative locations based on the location of the > // configuratin file. Nonetheless, this allows me to organize the > // mapping files based on java packages. > .configure( bf.getClass().getResource( "hibernate.cfg.xml")) > // the following should allows use of a generic configuration file > // by overriding the items that need to be customized. > //.setProperty( "connection.url", "jdbc:mysql://someMachine.ncsu.edu:3306/M_grisea_genbank_biosql") > //.setProperty( "connection.username", "aUser") > //.setProperty( "connection.password", "aPassword") > // > // The following can be used to adjust memory consumption. > //.setProperty( "hibernate.jdbc.batch_size", "20") > //.setProperty( "hibernate.cache.use_second_level_cache", "false") > // > // examining the generated SQL can be informative... > //.setProperty( "hibernate.show_sql", "true") > > // Go and make the support interfaces... > .buildSessionFactory(); > > Session session = null; > try > { > session = bf.doSessionFactoryBindings( sessionFactory); > > while ( argPos < args.length) > { > File f = new File( args[argPos++]); > > // handle one level of directories > if ( f.isDirectory()) > { > File contents[] = f.listFiles(); > for ( int j=contents.length-1;j>=0;j--) > bf.loadNSave( session, contents[j]); > } > > bf.loadNSave( session, f); > } > } > finally > { > if ( session != null) > { > session.flush(); // force in-memory to disk. > session.close(); // only for local sessions > } > } > } > > /** > * The session is the primary interaction layer between Hibernate and > * the underlying database. Closely allied with that is a suite of > * Biojavax classes handling the load and save operations. These classes > * are coordinated throught the RichObjectFactory. Thus, correctly > * setting up and using the factory for all object operations is > * critical! > */ > Session doSessionFactoryBindings( SessionFactory sessionFactory) > { > if ( verbose) System.out.println( "doing bindings."); > // open a session before processing the files. This allows the > // session to survive across the multiple transactions. And, hopefully, > // to provide level-2 caching services for the objects.... > // Contrast with getCurrentSession wich only survives for the current > // transaction. > Session session = sessionFactory.openSession(); > > // Change DefaultNamespaceName binding from "biojavax" > RichObjectFactory.setDefaultNamespaceName( "genbankBiosqlRich"); > > // Change DefaultOntologyName binding from "lcl". Hopefully, this will > // map the genbank annotation information into the SO term space. This > // works for some, but not all features. Those which donto map are > // flagged as "auto-generated by biojavax". > // nota bene: may be dangerous if semantics are not exactly the same! > // examination of the SO mapping indicated that were the terms align, the > // semantics also align. > // Benefit is that semantic queries can be performed on the loaded info. > RichObjectFactory.setDefaultOntologyName( "sequence"); //"SO" ); > > > // Hook to BiojavaX and BioSQL. This sets up the proper conditions for > // transparently hooking to the database and supplying objects from > // that db if they exist within it. This is accomplished via hooking the > // Builder, Resolver, and Handler to BioSQL implementations. > // Establishes standard bindings for: > // RichObjectBuilder, > // DefaultCrossReferenceResolver, > // DefaultRichSequenceHandler. > // nb: PositionResolver is left as new AverageResolver(); > RichObjectFactory.connectToBioSQL(session); > > // also grab a reference to the underlying database (so that I can use > // the convenience wrapper methods for delting entries). > //db = new BioSQLRichSequenceDB( session); // create the RichSequenceDB wrapper around the Hibernate session > > return session; > } > > /** > * This works for genbank files containing multiple sequences. > * Originaly concept from: http://portal.open-bio.org/pipermail/biojava-l/2007-April/005824.html > * It fails on inserting existant record(s) - does not replace... > * This causes grief when loading multiple files... > */ > public void loadNSave( Session session, File fileName) > { > boolean localSession = (session == null); > Transaction tx = null; > // ensure that an acceptable session configuration exists. > if ( session == null) throw new Error( "session object not established"); > > // Note the retrieval of namespace VIA the factory. The interface > // documentation did not make clear the requirement to use the > // established 'singleton' object (via getDefaultNamespace or equivalent). > // The underlying hibernate code does not attempt to automatically ensure > // the uniqueness (singleton) by attempting a load of any instances. > // Failure to use the factory will result in attempts to create a > // duplicate namespace in the database. > org.biojavax.Namespace ns = RichObjectFactory.getDefaultNamespace(); > > try > { > if ( verbose) System.out.println( "*********** Loading "+fileName+"..."); > BufferedReader br = new BufferedReader( new FileReader( fileName) ); > > // readGenbankDNA loads the objects from the stream and uses the > // established factory(ies) and defaults for object creation. > if ( verbose) System.out.println( "*********** readGenbankDNA..."); > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA( br, ns); > > while ( rsi.hasNext() ) // for each sequence in the file... > { > if ( verbose) System.out.println( "*********** start transaction."); > // Hibernate seems to REQUIRE transactions when objects are modified. > tx = session.beginTransaction(); > > if ( verbose) System.out.println( "*********** Loading next sequence..."); > RichSequence sequence = rsi.nextRichSequence(); > System.out.println( "loaded sequence "+sequence.getAccession()+ > ", identifier: "+ sequence.getIdentifier()); > > // delete any extant sequence from the database. The cascaded > // constraints will result in removal of all associated features > // and what-not. > Query q = session.createQuery( "from BioEntry as s where s.name = :acc"); > q.setString( "acc", sequence.getAccession()); > BioEntry be = (BioEntry)q.uniqueResult(); > if ( be != null) > { > if ( verbose) System.out.println( "*********** DELETING extant sequence..."); > // Interesintly, hibernate does not seem to do transactions in the > // same sense that a database would. Thus, I need to commit the > // delete operation before I attempt to insert the replacement > // information. > session.delete( be); > tx.commit(); > tx = session.beginTransaction(); > } > > try > { > // Loading entire genomes from genbank consumes large amounts > // of memory. Thus, each sequence and its associated > // annotations are wrapped in a transaction, the transaction saved, > // and the in-memory cache is cleared. While being somewhat > // inefficient, this approach does limit memory consumption. > if ( verbose) System.out.println( "*********** saving..."); > > // synchronize in-memory representation w/ the database > session.saveOrUpdate( "Sequence", sequence ); > if ( verbose) System.out.println( "*********** comitting..."); > tx.commit(); // save to database - does an automatic flush > // batch operations overwhelm the hibernate cache - clear it out! > if ( verbose) System.out.println( "*********** flushing..."); > session.flush(); // force in-memory to disk. > if ( verbose) System.out.println( "*********** clearing..."); > session.clear(); // clean out cache. > } > catch (HibernateException ex) > { > tx.rollback(); // discard the sequence and all its annotations > ex.printStackTrace(); > } > } > } > catch (FileNotFoundException ex) > { > ex.printStackTrace(); > } > catch ( BioException bex) > { > bex.printStackTrace(); > } > } > > } > > -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: SequenceLoaderNew.java URL: From rvincent at asti.dost.gov.ph Wed May 28 21:59:50 2008 From: rvincent at asti.dost.gov.ph (Rey Vincent Babilonia) Date: Thu, 29 May 2008 01:59:50 -0000 Subject: [Biojava-l] [Fwd: large genbank data] Message-ID: <483E0CA2.4010906@asti.dost.gov.ph> -------- Original Message -------- Subject: large genbank data Date: Wed, 28 May 2008 18:02:48 +0800 From: Rey Vincent Babilonia To: biojava-l at biojava.org hi, anybody tried uploading a large genbank data (e.g. ftp://bio-mirror.net/biomirror/genbank/gbbct1.seq.gz) to biosql? load_seqdatabase.pl of bioperl can do this. i'm switching to biojava and it can't read the sequence (maybe because it has 30000+ sequences). thanks. -- /** * @author Rey Vincent P. Babilonia * @number +63 2 426 9760 local 1302 * @pgp 0x383454CF pgp.mit.edu * @project Philippine Bioinformatics Solutions * @program Philippine e-Science Grid * @division Research and Development Division * @agency Advanced Science and Technology Institute * @url http://www.psigrid.gov.ph */ -- /** * @author Rey Vincent P. Babilonia * @number +63 2 426 9760 local 1302 * @pgp 0x383454CF pgp.mit.edu * @project Philippine Bioinformatics Solutions * @program Philippine e-Science Grid * @division Research and Development Division * @agency Advanced Science and Technology Institute * @url http://www.psigrid.gov.ph */ -------------- next part -------------- No virus found in this outgoing message. Checked by AVG. Version: 8.0.100 / Virus Database: 269.24.2/1471 - Release Date: 5/28/2008 5:33 PM From may03307 at gmail.com Mon May 5 15:11:35 2008 From: may03307 at gmail.com (=?GB2312?B?zau54sC8?=) Date: Mon, 5 May 2008 16:11:35 +0100 Subject: [Biojava-l] codon position Message-ID: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> Hi, everyone I will do a program to calculate the cg skew for each codon position (first base, second base and third base) as well as for the whole gene. For each codon position, I found the method to get the codons: SymbolList codons = SymbolListViews.windowedSymbolList (dna, 3); Are there any method or package can get the first, second or third letter from each codon? Thanks a lot! Lan From may03307 at gmail.com Mon May 5 15:11:35 2008 From: may03307 at gmail.com (=?GB2312?B?zau54sC8?=) Date: Mon, 5 May 2008 16:11:35 +0100 Subject: [Biojava-l] codon position Message-ID: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> Hi, everyone I will do a program to calculate the cg skew for each codon position (first base, second base and third base) as well as for the whole gene. For each codon position, I found the method to get the codons: SymbolList codons = SymbolListViews.windowedSymbolList (dna, 3); Are there any method or package can get the first, second or third letter from each codon? Thanks a lot! Lan From markjschreiber at gmail.com Tue May 6 01:59:04 2008 From: markjschreiber at gmail.com (Mark Schreiber) Date: Tue, 6 May 2008 09:59:04 +0800 Subject: [Biojava-l] codon position In-Reply-To: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> References: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> Message-ID: <93b45ca50805051859r124378c8y5e519ff302036b6a@mail.gmail.com> Hi - The listing at the this URL shows how to break a codon into it's component symbols. http://biojava.org/wiki/BioJava:Cookbook:Alphabets:Component - Mark On Mon, May 5, 2008 at 11:11 PM, ??? wrote: > Hi, everyone > > I will do a program to calculate the cg skew for each codon position (first > base, second base and third base) as well as for the whole gene. For each > codon position, I found the method to get the codons: > > SymbolList codons = SymbolListViews.windowedSymbolList (dna, 3); > > Are there any method or package can get the first, second or third letter > from each codon? > > Thanks a lot! > Lan > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From markjschreiber at gmail.com Tue May 6 01:59:04 2008 From: markjschreiber at gmail.com (Mark Schreiber) Date: Tue, 6 May 2008 09:59:04 +0800 Subject: [Biojava-l] codon position In-Reply-To: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> References: <6481bdc30805050811g3dc0be9fr8aee0de94048dead@mail.gmail.com> Message-ID: <93b45ca50805051859r124378c8y5e519ff302036b6a@mail.gmail.com> Hi - The listing at the this URL shows how to break a codon into it's component symbols. http://biojava.org/wiki/BioJava:Cookbook:Alphabets:Component - Mark On Mon, May 5, 2008 at 11:11 PM, ??? wrote: > Hi, everyone > > I will do a program to calculate the cg skew for each codon position (first > base, second base and third base) as well as for the whole gene. For each > codon position, I found the method to get the codons: > > SymbolList codons = SymbolListViews.windowedSymbolList (dna, 3); > > Are there any method or package can get the first, second or third letter > from each codon? > > Thanks a lot! > Lan > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From mail at florianschatz.de Wed May 7 10:15:36 2008 From: mail at florianschatz.de (Florian Schatz) Date: Wed, 7 May 2008 12:15:36 +0200 Subject: [Biojava-l] Gene direction Message-ID: Hello, is there any way to find out the direction of a gene, parsed from a Genbank file? e.g.: Genbank file: gene 185510..186463 or gene complement(203350..203505) I can not find something in the .getLocation() nor in the .getAnnotation() of a gene-Feature. Best, Florian From martin.jones at ed.ac.uk Wed May 7 10:36:53 2008 From: martin.jones at ed.ac.uk (Martin Jones) Date: Wed, 7 May 2008 11:36:53 +0100 Subject: [Biojava-l] Gene direction In-Reply-To: References: Message-ID: Hi, I've recently faced the same problem. Try this: RichSequenceIterator seqs = RichSequence.IOTools.readGenbankDNA(in, null); RichSequence mySeq = seqs.nextRichSequence(); for (Object o : mySeq.getFeatureSet()) { RichFeature f = (RichFeature) o; RichLocation l = (RichLocation) f.getLocation(); System.out.println("strand is " + l.getStrand().getName()); } I think that getStrand().getName() will return either "+" or "-". If you're looking at a genbank record for a single gene, you'll probably have a single "gene" feature and a single "CDS" feature. Martin 2008/5/7 Florian Schatz : > Hello, > > is there any way to find out the direction of a gene, parsed from a Genbank > file? > e.g.: Genbank file: > gene 185510..186463 > or > gene complement(203350..203505) > > I can not find something in the .getLocation() nor in the .getAnnotation() > of a gene-Feature. > > Best, > Florian > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > > -- ------------------------ Martin Jones School of Biological Sciences, Ashworth Laboratories, King's Buildings Edinburgh, EH9 3JT, UK From community at struck.lu Wed May 7 10:31:14 2008 From: community at struck.lu (community at struck.lu) Date: Wed, 07 May 2008 12:31:14 +0200 Subject: [Biojava-l] single letter code from protein ambiguities? Message-ID: Hi,I am just beginning to use biojava and I have a question concerning the parsing of protein sequences containing ambiguities:Is it possible to get all the possible amino acids at each position of the protein sequence with a single letter code instead of the three letter code?Suppose I would translate a DNA sequence containing an "N", so the protein translation would also contain ambiguities:SymbolList symL = DNATools.createDNA("atnatg");SymbolList symL2 = DNATools.toProtein(symL);Iterator symIt = symL2.iterator();System.out.println(symL2.seqString());OUTPUT:XMSymbol hm;while (symIt.hasNext()) {    hm = (Symbol) symIt.next();    System.out.println(hm.getName());}OUTOUT:[MET ILE]METWould it be possible to ouput:MIMRegards,Daniel Struck _________________________________________________________ Mail sent using root eSolutions Webmailer - www.root.lu From markjschreiber at gmail.com Wed May 7 10:54:49 2008 From: markjschreiber at gmail.com (Mark Schreiber) Date: Wed, 7 May 2008 18:54:49 +0800 Subject: [Biojava-l] single letter code from protein ambiguities? In-Reply-To: References: Message-ID: <93b45ca50805070354q540a3147tef59034b74d430f2@mail.gmail.com> Hi - Yes, this is absolutely possible. If biojava can create an unambigous amino acid from an ambigous codon it will. If the possible amino acids are a choice of 2 or more an ambiguity symbol (BasisSymbol) is created that contains those amino acids. Note that if you turn any ambiguous amino acid into a String then you will just get an X so you need to decompose it into it's underlying AtomicSymbols. See http://biojava.org/wiki/BioJava:Cookbook:Alphabets:Ambiguous for some idea (except in your case you need to do the reverse). This would make another nice example for the cookbook so when you get some demo code working it would be good if you could put it up on the wiki. - Mark On Wed, May 7, 2008 at 6:31 PM, community at struck.lu wrote: > Hi,I am just beginning to use biojava and I have a question concerning the > parsing of protein sequences containing ambiguities:Is it possible to get all > the possible amino acids at each position of the protein sequence with a > single letter code instead of the three letter code?Suppose I would translate > a DNA sequence containing an "N", so the protein translation would > also contain ambiguities:SymbolList symL = > DNATools.createDNA("atnatg");SymbolList symL2 = > DNATools.toProtein(symL);Iterator symIt = > symL2.iterator();System.out.println(symL2.seqString());OUTPUT:XMSymbol > hm;while (symIt.hasNext()) {    hm = (Symbol) > symIt.next();    System.out.println(hm.getName());}OUTOUT:[MET > ILE]METWould it be possible to ouput:MIMRegards,Daniel Struck > _________________________________________________________ > Mail sent using root eSolutions Webmailer - www.root.lu > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From gcappuccilli at protelix.com Thu May 8 15:25:32 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Thu, 8 May 2008 08:25:32 -0700 Subject: [Biojava-l] BioEntryRelationship query problem Message-ID: First of all, I am new here so I apologize in advance if I am discussing something obvious. Moreover I am far from being a BioJava or Hibernate guru. I am working on a small project using BioJava (1.6) + BioSQL (1.0) (mysql 4.1.22 on Mac OS X server 10.4.11). I want to persist relationships between BioEntry objects. Storing objects to DB didn't give any problems. Sample code: Transaction tx=s.beginTransaction(); try { ComparableTerm term=RichObjectFactory.getDefaultOntology ().getOrCreateTerm("TestTerm"); Namespace ns=RichObjectFactory.getDefaultNamespace(); BioEntry parent=new SimpleBioEntry(ns, "parentbe", "pACCESSION",0); BioEntry child=new SimpleBioEntry(ns, "childbe", "cACCESSION",0); BioEntryRelationship rel=new SimpleBioEntryRelationship (parent, child, term, null); parent.addRelationship(rel); s.saveOrUpdate("BioEntry",parent ); tx.commit(); } catch (Exception ex) { tx.rollback(); } When I started to query the db I got errors from hibernate (see below). After digging a little I found out that hibernate couldn't query the Bioentry_relationship table. Even a simple "from BioEntryRelationship" query was giving me these errors. 09:43:19,088 ERROR BasicPropertyAccessor:94 - IllegalArgumentException in class: org.biojavax.bio.SimpleBioEntryRelationship, setter method of property: object 09:43:19,089 ERROR BasicPropertyAccessor:98 - expected type: org.biojavax.bio.BioEntry, actual value: org.biojavax.bio.seq.SimpleRichFeature$$EnhancerByCGLIB$$91b34b44 Checking the mapping files I found the following line in the BioEntryRelationship.hbm.xml: It looked strange to me. So I've changed to Now I can query relationships without problems. Did I do the right thing or I am messing up the mapping and I am breaking something else? If this has been already discussed I apologize and I would appreciate a link to the original thread. Thank you in advance G. From armita_sh at yahoo.com Tue May 13 17:49:26 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:26 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <739889.77239.qm@web51405.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From armita_sh at yahoo.com Tue May 13 17:49:31 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:31 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <876778.61385.qm@web51409.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From armita_sh at yahoo.com Tue May 13 17:49:42 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:42 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <862338.69656.qm@web51402.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From armita_sh at yahoo.com Tue May 13 17:49:47 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:47 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <403542.32695.qm@web51410.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From armita_sh at yahoo.com Tue May 13 17:49:52 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 10:49:52 -0700 (PDT) Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <196253.35082.qm@web51411.mail.re2.yahoo.com> Hi everyone, I need to write a program that can construct the backbone of the protein from its sequence and the relevant phi and psi angles. I want to know if there is a class or method that can help me to calculate the coordinates form phi and psi angles! thanks, ArmitaSh From ap3 at sanger.ac.uk Wed May 14 12:20:53 2008 From: ap3 at sanger.ac.uk (Andreas Prlic) Date: Wed, 14 May 2008 13:20:53 +0100 Subject: [Biojava-l] Constructing Backbone of Protein In-Reply-To: <403542.32695.qm@web51410.mail.re2.yahoo.com> References: <403542.32695.qm@web51410.mail.re2.yahoo.com> Message-ID: <318B9A5F-4F2D-4A95-845D-B4B81B0397FD@sanger.ac.uk> Hi Armita, > I need to write a program that can construct the backbone of the > protein from its sequence and the relevant phi and psi angles. I > want to know if there is a class or method that can help me to > calculate the coordinates form phi and psi angles! Where do you get the phi and psi angles from? sounds a bit like a protein structure prediction problem, which Biojava can not do. If you have a structure and you want to get the phi and psi angles, you can have a look at the example in the docu: http://www.biojava.org/ docs/api16/org/biojava/bio/structure/Structure.html There are also some tools for calculations on atoms and amino acids available from: http://www.biojava.org/docs/api16/org/biojava/bio/structure/Calc.html Cheers, Andreas ----------------------------------------------------------------------- Andreas Prlic Wellcome Trust Sanger Institute Hinxton, Cambridge CB10 1SA, UK +44 (0) 1223 49 6891 ----------------------------------------------------------------------- -- The Wellcome Trust Sanger Institute is operated by Genome Research Limited, a charity registered in England with number 1021457 and a company registered in England with number 2742969, whose registered office is 215 Euston Road, London, NW1 2BE. From community at struck.lu Mon May 19 09:35:54 2008 From: community at struck.lu (community at struck.lu) Date: Mon, 19 May 2008 11:35:54 +0200 Subject: [Biojava-l] single letter code from protein ambiguities? In-Reply-To: <93b45ca50805070354q540a3147tef59034b74d430f2@mail.gmail.com> References: <93b45ca50805070354q540a3147tef59034b74d430f2@mail.gmail.com> Message-ID: Thank you for pointing me in the right direction:##################################             SymbolList symL = DNATools.createDNA("atnatggnnatg");            SymbolList symL2 = DNATools.toProtein(symL);            System.out.println(symL2.seqString());            for (Iterator i = symL2.iterator(); i.hasNext();) {                Symbol sym = (Symbol) i.next();                System.out.println(sym.getName() + "#");            }            SymbolTokenization toke = symL2.getAlphabet().getTokenization("token");            for (Iterator i = symL2.iterator(); i.hasNext();) {                Symbol sym = (Symbol) i.next();                Alphabet arg = sym.getMatches();                for (Iterator i2 = ((FiniteAlphabet) arg).iterator(); i2.hasNext();) {                    Symbol sym2 = (Symbol) i2.next();                    System.out.println("toke: "+toke.tokenizeSymbol(sym2));                    System.out.println("name: "+sym2.getName());                }                System.out.println("\n");            }################################## This will print out the single letter code: System.out.println("toke: "+toke.tokenizeSymbol(sym2)); This will print out the three letter code: System.out.println("name: "+sym2.getName()); Do you think it is worthwhile to put this sample code in the wiki?Thanks,Daniel"Mark Schreiber" <markjschreiber at gmail.com> wrote: > Hi - > > Yes, this is absolutely possible. If biojava can create an unambigous > amino acid from an ambigous codon it will. If the possible amino acids > are a choice of 2 or more an ambiguity symbol (BasisSymbol) is created > that contains those amino acids. > > Note that if you turn any ambiguous amino acid into a String then you > will just get an X so you need to decompose it into it's underlying > AtomicSymbols. > > See http://biojava.org/wiki/BioJava:Cookbook:Alphabets:Ambiguous for > some idea (except in your case you need to do the reverse). > > This would make another nice example for the cookbook so when you get > some demo code working it would be good if you could put it up on the > wiki. > > - Mark > > On Wed, May 7, 2008 at 6:31 PM, community at struck.lu <community at struck.lu> > wrote: > > Hi,I am just beginning to use biojava and I have a question concerning the > > parsing of protein sequences containing ambiguities:Is it possible to get > all > > the possible amino acids at each position of the protein sequence with a > > single letter code instead of the three letter code?Suppose I would > translate > > a DNA sequence containing an &quot;N&quot;, so the protein translation would > > also contain ambiguities:SymbolList symL = > > DNATools.createDNA(&quot;atnatg&quot;);SymbolList symL2 = > > DNATools.toProtein(symL);Iterator symIt = > > symL2.iterator();System.out.println(symL2.seqString());OUTPUT:XMSymbol > > hm;while (symIt.hasNext()) {&nbsp;&nbsp;&nbsp; hm = (Symbol) > > symIt.next();&nbsp;&nbsp;&nbsp; > System.out.println(hm.getName());}OUTOUT:[MET > > ILE]METWould it be possible to ouput:MIMRegards,Daniel Struck > > _________________________________________________________ > > Mail sent using root eSolutions Webmailer - www.root.lu > > _______________________________________________ > > Biojava-l mailing list - Biojava-l at lists.open-bio.org > > http://lists.open-bio.org/mailman/listinfo/biojava-l > > > _________________________________________________________ Mail sent using root eSolutions Webmailer - www.root.lu From ap3 at sanger.ac.uk Mon May 19 15:56:38 2008 From: ap3 at sanger.ac.uk (Andreas Prlic) Date: Mon, 19 May 2008 16:56:38 +0100 Subject: [Biojava-l] Open DAS position Message-ID: Hi, The Wellcome Trust Sanger Institute has an open position for a DAS developer (see below). If you have further questions please contact me - ap3 at sanger.ac.uk see also: http://www.sanger.ac.uk/cgi-bin/careers/jobs/jobslist? action=item;format=html;id=742;location=external Andreas === The Wellcome Trust Sanger Institute leads the world in genomic research, with an expanding scientific programme dedicated to understanding gene function in health & disease. With several hundred servers provided by more than 40 institutions, the Distributed Annotation System (DAS) is a frequently used data integration technology both internationally and within the Sanger Institute. We are looking for a Senior Web Developer who will be responsible to further develop, maintain, and coordinate the DAS activities within the Sanger Institute and in close collaboration with the international community that has grown around DAS. You will be involved in maintaining and further developing DAS by implementation of high quality, user-friendly code and applications.You will ensure that the Institute's data resources are made available worldwide in highly reliable services. Good communication skills are essential as the role involves liaising with lab scientists and bioinformatitions. Occasional traveling might be required. Qualifications: Bioinformatics/Computer Science degree or relevant experience. Experience of working with the following is essential: Java and/or PERL programming language (including object oriented software design) in a Unix/Linux environment, MySQL. Experience of working with the following is desirable: A good knowledge of Linux systems, a good understanding of web technologies, web systems administration (Apache) and web architecture design, web services (REST,SOAP), HTML/CSS/Javascript/ AJAX. Knowledge of the Ensembl API and DAS would be advantageous. For further information regarding the post, please contact ap3 at sanger.ac.uk Salary range for this position is ?27,316 to ?36,951. We offer a comprehensive range of benefits including a final salary pension scheme and excellent on-site facilities. Further details can be found on our website www.sanger.ac.uk/careers/jobs/ To apply for this position please email a covering letter, CV (including 2 referees) and current salary details, quoting reference SW1662 to: recruit at sanger.ac.uk. Or post your application to: Human Resources Department, The Wellcome Trust Sanger Institute, Genome Campus, Hinxton, Cambridge, CB10 1SA, UK. The closing date for applications is 15th June 2008. ----------------------------------------------------------------------- Andreas Prlic Wellcome Trust Sanger Institute Hinxton, Cambridge CB10 1SA, UK +44 (0) 1223 49 6891 ----------------------------------------------------------------------- -- The Wellcome Trust Sanger Institute is operated by Genome Research Limited, a charity registered in England with number 1021457 and a company registered in England with number 2742969, whose registered office is 215 Euston Road, London, NW1 2BE. From gwu at molbio.mgh.harvard.edu Tue May 20 18:03:35 2008 From: gwu at molbio.mgh.harvard.edu (gang wu) Date: Tue, 20 May 2008 14:03:35 -0400 Subject: [Biojava-l] Load/Update Genbank sequence issue Message-ID: <48331277.7060105@molbio.mgh.harvard.edu> Hi all, I'm trying to load Genbank sequence into BioSQL database with BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the exception when loading new sequences or reloading the same sequence. Seems the Hibernate is trying to insert "genbank" namespace again. Can anybody tell me what I did wrong? Thanks in advance. Gang ================================================================ public class SequenceLoaderNew { public void loadSeq(String fileName, String namespace) throws FileNotFoundException, BioException { System.out.println("Start loading file " + fileName + " at " + System.currentTimeMillis()); BufferedReader br = new BufferedReader(new FileReader(fileName)); Session session = new Configuration().configure().buildSessionFactory().openSession(); RichObjectFactory.connectToBioSQL(session); RichSequenceDB db = new BioSQLRichSequenceDB(session); RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new SimpleNamespace(namespace)); while (rsi.hasNext()) { Transaction tx = session.beginTransaction(); RichSequence sequence = rsi.nextRichSequence(); System.out.println("Loaded sequence" + sequence.getAccession() + ", identifier: " + sequence.getIdentifier()); try { System.out.println("Delete sequence" + sequence.getAccession() + " if exists."); db.removeSequence(sequence.getAccession()); } catch (Exception ex) { } try { System.out.println("Save sequence " + sequence.getAccession()); session.save("BioEntry", sequence); tx.commit(); session.flush(); session.clear(); } catch (HibernateException ex) { tx.rollback(); ex.printStackTrace(); } } } public static void main(String[] args) throws BioException, FileNotFoundException { SequenceLoaderNew sl = new SequenceLoaderNew(); //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); } } ================================================================ org.hibernate.exception.ConstraintViolationException: could not insert: [Namespace] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry 'genbank' for key 'name' at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) ... 31 more ================================================================ From gwu at molbio.mgh.harvard.edu Tue May 20 18:37:18 2008 From: gwu at molbio.mgh.harvard.edu (gang wu) Date: Tue, 20 May 2008 14:37:18 -0400 Subject: [Biojava-l] Load, Update Genbank sequence issue Message-ID: <48331A5E.9020908@molbio.mgh.harvard.edu> Hi all, I'm trying to load Genbank sequence into BioSQL database with BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the exception when loading new sequences or reloading the same sequence. Seems the Hibernate is trying to insert "genbank" namespace again. Can anybody tell me what I did wrong? Thanks in advance. Gang ================================================================ public class SequenceLoaderNew { public void loadSeq(String fileName, String namespace) throws FileNotFoundException, BioException { System.out.println("Start loading file " + fileName + " at " + System.currentTimeMillis()); BufferedReader br = new BufferedReader(new FileReader(fileName)); Session session = new Configuration().configure().buildSessionFactory().openSession(); RichObjectFactory.connectToBioSQL(session); RichSequenceDB db = new BioSQLRichSequenceDB(session); RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new SimpleNamespace(namespace)); while (rsi.hasNext()) { Transaction tx = session.beginTransaction(); RichSequence sequence = rsi.nextRichSequence(); System.out.println("Loaded sequence" + sequence.getAccession() + ", identifier: " + sequence.getIdentifier()); try { System.out.println("Delete sequence" + sequence.getAccession() + " if exists."); db.removeSequence(sequence.getAccession()); } catch (Exception ex) { } try { System.out.println("Save sequence " + sequence.getAccession()); session.save("BioEntry", sequence); tx.commit(); session.flush(); session.clear(); } catch (HibernateException ex) { tx.rollback(); ex.printStackTrace(); } } } public static void main(String[] args) throws BioException, FileNotFoundException { SequenceLoaderNew sl = new SequenceLoaderNew(); //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); } } ================================================================ org.hibernate.exception.ConstraintViolationException: could not insert: [Namespace] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry 'genbank' for key 'name' at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) ... 31 more ================================================================ From dicknetherlands at gmail.com Tue May 20 18:44:09 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Tue, 20 May 2008 19:44:09 +0100 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: References: <48331277.7060105@molbio.mgh.harvard.edu> Message-ID: Forgot to copy my reply back to the lists! ---------- Forwarded message ---------- From: Richard Holland Date: 2008/5/20 Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue To: gang wu You need to substitute this line: RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new SimpleNamespace(namespace)); with this line: Namespace ns = (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new Object[]{namespace}); RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); cheers, Richard PS. You're the second person who has quoted this section of code on this list recently, and had the same problem with it. If you got it from a website somewhere, could you send me the URL so I can get in touch with the authors and get them to correct it? Thanks! 2008/5/20 gang wu : > Hi all, > > I'm trying to load Genbank sequence into BioSQL database with > BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the > exception when loading new sequences or reloading the same sequence. Seems > the Hibernate is trying to insert "genbank" namespace again. Can anybody > tell me what I did wrong? Thanks in advance. > > Gang > > ================================================================ > public class SequenceLoaderNew { > public void loadSeq(String fileName, String namespace) throws > FileNotFoundException, BioException { > System.out.println("Start loading file " + fileName + " at " + > System.currentTimeMillis()); > BufferedReader br = new BufferedReader(new FileReader(fileName)); > Session session = new > Configuration().configure().buildSessionFactory().openSession(); > RichObjectFactory.connectToBioSQL(session); > RichSequenceDB db = new BioSQLRichSequenceDB(session); > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new > SimpleNamespace(namespace)); > while (rsi.hasNext()) { > Transaction tx = session.beginTransaction(); > RichSequence sequence = rsi.nextRichSequence(); > System.out.println("Loaded sequence" + sequence.getAccession() + > ", identifier: " + sequence.getIdentifier()); > try { > System.out.println("Delete sequence" + sequence.getAccession() > + " if exists."); > db.removeSequence(sequence.getAccession()); > } catch (Exception ex) { > } > try { > System.out.println("Save sequence " + > sequence.getAccession()); > session.save("BioEntry", sequence); > tx.commit(); > session.flush(); > session.clear(); > } catch (HibernateException ex) { > tx.rollback(); > ex.printStackTrace(); > } > } > } > > public static void main(String[] args) throws BioException, > FileNotFoundException { > SequenceLoaderNew sl = new SequenceLoaderNew(); > //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); > } > } > ================================================================ > org.hibernate.exception.ConstraintViolationException: could not insert: > [Namespace] > at > org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) > at > org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) > at > org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) > at > org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) > at > org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) > at > org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) > at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) > at > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) > at > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) > at > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) > at > org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) > at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) > at > org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) > at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) > at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) > at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) > at org.hibernate.engine.Cascade.cascade(Cascade.java:130) > at > org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) > at > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) > at > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) > at > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) > at > org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) > at > org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) > at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) > at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) > at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) > at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) > Caused by: > com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: > Duplicate entry 'genbank' for key 'name' > at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) > at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) > at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) > at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) > at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) > at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) > at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) > at > com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) > at > com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) > at > com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) > at > com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) > at > org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) > at > org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) > ... 31 more > ================================================================ > > _______________________________________________ > BioSQL-l mailing list > BioSQL-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biosql-l > From gcappuccilli at protelix.com Tue May 20 19:07:04 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Tue, 20 May 2008 12:07:04 -0700 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue Message-ID: <4CE0E6A1-F082-4A2D-AFFC-7A4233D36350@protelix.com> Looks like Richard had already answered... Sorry for the doubled reply... at least I know got it right :-))) From gcappuccilli at protelix.com Tue May 20 19:17:56 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Tue, 20 May 2008 12:17:56 -0700 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue Message-ID: I am not an expert, but I think the problem is that you try to create a new Namespace over and over. You should use singletones instead. Try to do something like this afet you connect to BioSQL: Namespace n = (Namespace) RichObjectFactory.getObject(SimpleNamespace.class, new Object[] {namespace}); And then read your genebank like this. RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, n); Agaian I am not an expert so I might be wrong. Try and let me know. Ciao Guido From gcappuccilli at protelix.com Tue May 20 18:58:35 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Tue, 20 May 2008 11:58:35 -0700 Subject: [Biojava-l] Load, Update Genbank sequence issue Message-ID: <7116E9C2-4523-4C25-A2AC-D97E74E3A662@protelix.com> I am not an expert, but I think the problem is that you try to create a new Namespace over and over. You should use singletones instead. Try to do something like this afet you connect to BioSQL: Namespace n = (Namespace) RichObjectFactory.getObject(SimpleNamespace.class, new Object[] {namespace}); And then read your genebank like this. RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, n); Again I am not an expert so I might be wrong. Try and let me know. Ciao Guido From gwu at molbio.mgh.harvard.edu Wed May 21 06:28:16 2008 From: gwu at molbio.mgh.harvard.edu (gang wu) Date: Wed, 21 May 2008 02:28:16 -0400 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: References: <48331277.7060105@molbio.mgh.harvard.edu> Message-ID: <4833C100.7040304@molbio.mgh.harvard.edu> I got another problem with almost the same code(see attached code and output). If I call the loadSeq() only once, everything works fine. The second call of the same method will fail. By the exception message, it looks like the session is not cleaned up yet though at the end of the method the session has been flush/clear/closed. Anything wrong? Or does anyone have a sequence data loader would like to share? I'm quite frustrated after keeping trying to do this seems simple thing without success. If I can make it work, I'd like to post it on the mailing list. Thanks in advance. Gang ==================================================== public class SequenceLoaderNew { public void loadSeq(String fileName, String namespace) throws FileNotFoundException, BioException, SQLException, InterruptedException { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); RichObjectFactory.connectToBioSQL(session); Namespace ns = (Namespace) RichObjectFactory.getObject(SimpleNamespace.class, new Object[]{namespace}); RichSequenceDB db = new BioSQLRichSequenceDB(session); System.out.println("Start loading file " + fileName + " at " + System.currentTimeMillis()); BufferedReader br = new BufferedReader(new FileReader(fileName)); RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); try { while (rsi.hasNext()) { RichSequence sequence = rsi.nextRichSequence(); System.out.println("Loaded sequence" + sequence.getAccession() + ", identifier: " + sequence.getIdentifier()); Transaction tx = session.beginTransaction(); try { System.out.println("Delete sequence" + sequence.getAccession() + " if exists."); db.removeSequence(sequence.getAccession()); tx.commit(); session.flush(); session.clear(); } catch (Exception ex) { if (tx != null) { tx.rollback(); } } try { tx = session.beginTransaction(); System.out.println("Save sequence " + sequence.getAccession()); //session.save("BioEntry", sequence); //db.addSequence(sequence); db.addRichSequence(sequence); tx.commit(); System.out.println("Finished savig sequence " + sequence.getAccession() + "\n"); } catch (HibernateException ex) { tx.rollback(); ex.printStackTrace(); } } } finally { session.flush(); session.clear(); session.close(); } } public static void main(String[] args) throws BioException, FileNotFoundException, InterruptedException, SQLException { SequenceLoaderNew sl = new SequenceLoaderNew(); sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); } } ==================================================== Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349859602 Loaded sequenceNC_005813, identifier: 45478502 Delete sequenceNC_005813 if exists. Save sequence NC_005813 Finished savig sequence NC_005813 Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349863761 Loaded sequenceNC_005813, identifier: 45478502 Delete sequenceNC_005813 if exists. Save sequence NC_005813 org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [Term#20] at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) Exception in thread "main" org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [Term#19] at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) at org.hibernate.engine.Cascade.cascade(Cascade.java:130) at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131) at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122) at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) ==================================================== Richard Holland wrote: > Forgot to copy my reply back to the lists! > > > ---------- Forwarded message ---------- > From: Richard Holland > Date: 2008/5/20 > Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue > To: gang wu > > > You need to substitute this line: > > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new > SimpleNamespace(namespace)); > > with this line: > > Namespace ns = (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new > Object[]{namespace}); > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); > > cheers, > Richard > > PS. You're the second person who has quoted this section of code on > this list recently, and had the same problem with it. If you got it > from a website somewhere, could you send me the URL so I can get in > touch with the authors and get them to correct it? Thanks! > > 2008/5/20 gang wu : > >> Hi all, >> >> I'm trying to load Genbank sequence into BioSQL database with >> BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the >> exception when loading new sequences or reloading the same sequence. Seems >> the Hibernate is trying to insert "genbank" namespace again. Can anybody >> tell me what I did wrong? Thanks in advance. >> >> Gang >> >> ================================================================ >> public class SequenceLoaderNew { >> public void loadSeq(String fileName, String namespace) throws >> FileNotFoundException, BioException { >> System.out.println("Start loading file " + fileName + " at " + >> System.currentTimeMillis()); >> BufferedReader br = new BufferedReader(new FileReader(fileName)); >> Session session = new >> Configuration().configure().buildSessionFactory().openSession(); >> RichObjectFactory.connectToBioSQL(session); >> RichSequenceDB db = new BioSQLRichSequenceDB(session); >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new >> SimpleNamespace(namespace)); >> while (rsi.hasNext()) { >> Transaction tx = session.beginTransaction(); >> RichSequence sequence = rsi.nextRichSequence(); >> System.out.println("Loaded sequence" + sequence.getAccession() + >> ", identifier: " + sequence.getIdentifier()); >> try { >> System.out.println("Delete sequence" + sequence.getAccession() >> + " if exists."); >> db.removeSequence(sequence.getAccession()); >> } catch (Exception ex) { >> } >> try { >> System.out.println("Save sequence " + >> sequence.getAccession()); >> session.save("BioEntry", sequence); >> tx.commit(); >> session.flush(); >> session.clear(); >> } catch (HibernateException ex) { >> tx.rollback(); >> ex.printStackTrace(); >> } >> } >> } >> >> public static void main(String[] args) throws BioException, >> FileNotFoundException { >> SequenceLoaderNew sl = new SequenceLoaderNew(); >> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >> } >> } >> ================================================================ >> org.hibernate.exception.ConstraintViolationException: could not insert: >> [Namespace] >> at >> org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) >> at >> org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) >> at >> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) >> at >> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >> at >> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >> at >> org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) >> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >> Caused by: >> com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >> Duplicate entry 'genbank' for key 'name' >> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) >> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) >> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) >> at >> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) >> at >> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >> at >> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >> at >> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >> at >> org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) >> at >> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) >> ... 31 more >> ================================================================ >> >> _______________________________________________ >> BioSQL-l mailing list >> BioSQL-l at lists.open-bio.org >> http://lists.open-bio.org/mailman/listinfo/biosql-l >> >> From markus.jaritz at novartis.com Wed May 21 07:37:36 2008 From: markus.jaritz at novartis.com (markus.jaritz at novartis.com) Date: Wed, 21 May 2008 09:37:36 +0200 Subject: [Biojava-l] Markus Jaritz is out of the office. Message-ID: I will be out of the office starting 21.05.2008 and will not return until 31.05.2008. I will leave Novartis with June 1st. If you like to stay in contact with me and I had no chance to contact you before I left, please check my pages at www.LinkedIn.com and www.xing.com. Thank you and all the best Markus Jaritz From dicknetherlands at gmail.com Wed May 21 17:17:39 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Wed, 21 May 2008 18:17:39 +0100 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: <4833C100.7040304@molbio.mgh.harvard.edu> References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> Message-ID: I'm not sure why you'd want to do that? Either way, as far as I know, Hibernate sessions are not designed for that. If you want to delete the sequence then replace it with a completely new sequence object, you have to create a new sequence object - you can't reuse the one you just deleted. The session info is embedded into that object so even if you clear the session, the object still refers to it. If you just want to load a sequence, modify it, then save it back, you should just load it then use saveOrUpdate to save it back again with changes. If you want to replace objects in your database, don't load them, just delete them, then use save to create new objects in their place. cheers, Richard 2008/5/21 gang wu : > I got another problem with almost the same code(see attached code and > output). If I call the loadSeq() only once, everything works fine. The > second call of the same method will fail. By the exception message, it looks > like the session is not cleaned up yet though at the end of the method the > session has been flush/clear/closed. Anything wrong? > > Or does anyone have a sequence data loader would like to share? I'm quite > frustrated after keeping trying to do this seems simple thing without > success. If I can make it work, I'd like to post it on the mailing list. > Thanks in advance. > > Gang > > ==================================================== > public class SequenceLoaderNew { > public void loadSeq(String fileName, String namespace) throws > FileNotFoundException, BioException, SQLException, InterruptedException { > SessionFactory sessionFactory = new > Configuration().configure().buildSessionFactory(); > Session session = sessionFactory.openSession(); > RichObjectFactory.connectToBioSQL(session); > Namespace ns = (Namespace) > RichObjectFactory.getObject(SimpleNamespace.class, new Object[]{namespace}); > RichSequenceDB db = new BioSQLRichSequenceDB(session); > System.out.println("Start loading file " + fileName + " at " + > System.currentTimeMillis()); > BufferedReader br = new BufferedReader(new FileReader(fileName)); > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, > ns); > try { > while (rsi.hasNext()) { > RichSequence sequence = rsi.nextRichSequence(); > System.out.println("Loaded sequence" + sequence.getAccession() > + ", identifier: " + sequence.getIdentifier()); > Transaction tx = session.beginTransaction(); > try { > System.out.println("Delete sequence" + > sequence.getAccession() + " if exists."); > db.removeSequence(sequence.getAccession()); > tx.commit(); > session.flush(); > session.clear(); > } catch (Exception ex) { > if (tx != null) { > tx.rollback(); > } > } > try { > tx = session.beginTransaction(); > System.out.println("Save sequence " + > sequence.getAccession()); > //session.save("BioEntry", sequence); > //db.addSequence(sequence); > db.addRichSequence(sequence); > tx.commit(); > System.out.println("Finished savig sequence " + > sequence.getAccession() + "\n"); > } catch (HibernateException ex) { > tx.rollback(); > ex.printStackTrace(); > } > } > } finally { > session.flush(); > session.clear(); > session.close(); > } > } > > public static void main(String[] args) throws BioException, > FileNotFoundException, InterruptedException, SQLException { > SequenceLoaderNew sl = new SequenceLoaderNew(); > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > } > } > ==================================================== > Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349859602 > Loaded sequenceNC_005813, identifier: 45478502 > Delete sequenceNC_005813 if exists. > Save sequence NC_005813 > Finished savig sequence NC_005813 > > Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349863761 > Loaded sequenceNC_005813, identifier: 45478502 > Delete sequenceNC_005813 if exists. > Save sequence NC_005813 > org.hibernate.NonUniqueObjectException: a different object with the same > identifier value was already associated with the session: [Term#20] > at > org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) > at > org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) > at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) > at > org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) > at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) > at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) > at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) > at org.hibernate.engine.Cascade.cascade(Cascade.java:130) > at > org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) > at > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) > at > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) > at > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) > at > org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) > at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) > at > org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) > at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) > at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) > at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) > at > org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) > at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) > at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) > at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) > at org.hibernate.engine.Cascade.cascade(Cascade.java:130) > at > org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456) > at > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334) > at > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) > at > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) > at > org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) > at > org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) > at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) > at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) > at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) > at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) > Exception in thread "main" org.hibernate.NonUniqueObjectException: a > different object with the same identifier value was already associated with > the session: [Term#19] > at > org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) > at > org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) > at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) > at > org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) > at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) > at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) > at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) > at org.hibernate.engine.Cascade.cascade(Cascade.java:130) > at > org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) > at > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) > at > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) > at > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) > at > org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) > at > org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) > at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) > at > org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) > at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) > at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) > at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) > at > org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) > at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) > at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) > at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) > at org.hibernate.engine.Cascade.cascade(Cascade.java:130) > at > org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131) > at > org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122) > at > org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65) > at > org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) > at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) > at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) > at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) > ==================================================== > > Richard Holland wrote: >> >> Forgot to copy my reply back to the lists! >> >> >> ---------- Forwarded message ---------- >> From: Richard Holland >> Date: 2008/5/20 >> Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue >> To: gang wu >> >> >> You need to substitute this line: >> >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new >> SimpleNamespace(namespace)); >> >> with this line: >> >> Namespace ns = >> (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new >> Object[]{namespace}); >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); >> >> cheers, >> Richard >> >> PS. You're the second person who has quoted this section of code on >> this list recently, and had the same problem with it. If you got it >> from a website somewhere, could you send me the URL so I can get in >> touch with the authors and get them to correct it? Thanks! >> >> 2008/5/20 gang wu : >> >>> >>> Hi all, >>> >>> I'm trying to load Genbank sequence into BioSQL database with >>> BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the >>> exception when loading new sequences or reloading the same sequence. >>> Seems >>> the Hibernate is trying to insert "genbank" namespace again. Can anybody >>> tell me what I did wrong? Thanks in advance. >>> >>> Gang >>> >>> ================================================================ >>> public class SequenceLoaderNew { >>> public void loadSeq(String fileName, String namespace) throws >>> FileNotFoundException, BioException { >>> System.out.println("Start loading file " + fileName + " at " + >>> System.currentTimeMillis()); >>> BufferedReader br = new BufferedReader(new FileReader(fileName)); >>> Session session = new >>> Configuration().configure().buildSessionFactory().openSession(); >>> RichObjectFactory.connectToBioSQL(session); >>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >>> new >>> SimpleNamespace(namespace)); >>> while (rsi.hasNext()) { >>> Transaction tx = session.beginTransaction(); >>> RichSequence sequence = rsi.nextRichSequence(); >>> System.out.println("Loaded sequence" + sequence.getAccession() + >>> ", identifier: " + sequence.getIdentifier()); >>> try { >>> System.out.println("Delete sequence" + >>> sequence.getAccession() >>> + " if exists."); >>> db.removeSequence(sequence.getAccession()); >>> } catch (Exception ex) { >>> } >>> try { >>> System.out.println("Save sequence " + >>> sequence.getAccession()); >>> session.save("BioEntry", sequence); >>> tx.commit(); >>> session.flush(); >>> session.clear(); >>> } catch (HibernateException ex) { >>> tx.rollback(); >>> ex.printStackTrace(); >>> } >>> } >>> } >>> >>> public static void main(String[] args) throws BioException, >>> FileNotFoundException { >>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >>> } >>> } >>> ================================================================ >>> org.hibernate.exception.ConstraintViolationException: could not insert: >>> [Namespace] >>> at >>> >>> org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) >>> at >>> >>> org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) >>> at >>> >>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) >>> at >>> >>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >>> at >>> >>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >>> at >>> >>> org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) >>> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> >>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >>> at >>> >>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> >>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>> at >>> >>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >>> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>> at >>> >>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> >>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >>> at >>> >>> org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >>> at >>> >>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> >>> org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) >>> at >>> >>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) >>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >>> Caused by: >>> com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >>> Duplicate entry 'genbank' for key 'name' >>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) >>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) >>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >>> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >>> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >>> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) >>> at >>> >>> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) >>> at >>> >>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >>> at >>> >>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >>> at >>> >>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >>> at >>> >>> org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) >>> at >>> >>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) >>> ... 31 more >>> ================================================================ >>> >>> _______________________________________________ >>> BioSQL-l mailing list >>> BioSQL-l at lists.open-bio.org >>> http://lists.open-bio.org/mailman/listinfo/biosql-l >>> >>> > > From gwu at molbio.mgh.harvard.edu Wed May 21 18:12:36 2008 From: gwu at molbio.mgh.harvard.edu (gang wu) Date: Wed, 21 May 2008 14:12:36 -0400 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> Message-ID: <48346614.6060102@molbio.mgh.harvard.edu> The scenario is quite simple: I'm using the database to store Genbank genome sequences. Later I've to update the sequences when Genbank has newer releases. The following two lines are loading the same sequence twice. The first time will insert a new BioEntry record. the second time will delete the existing record and insert a new record again. sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); Following code is used to load multiple genome sequences by calling the loadSeq() method multiple times. All failed except the first time. sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_006723.gbk", "genbank"); sl.loadSeq("/genomeseq/bacteria/NC_008945.gbk", "genbank"); The exception message has the details. Since all variables used in loadSeq() are local, and I did the session flush/clear/close, then it should be ok to call the method again. Thank you very much for your help. Gang Richard Holland wrote: > I'm not sure why you'd want to do that? Either way, as far as I know, > Hibernate sessions are not designed for that. If you want to delete > the sequence then replace it with a completely new sequence object, > you have to create a new sequence object - you can't reuse the one you > just deleted. The session info is embedded into that object so even if > you clear the session, the object still refers to it. > > If you just want to load a sequence, modify it, then save it back, you > should just load it then use saveOrUpdate to save it back again with > changes. If you want to replace objects in your database, don't load > them, just delete them, then use save to create new objects in their > place. > > cheers, > Richard > > 2008/5/21 gang wu : > >> I got another problem with almost the same code(see attached code and >> output). If I call the loadSeq() only once, everything works fine. The >> second call of the same method will fail. By the exception message, it looks >> like the session is not cleaned up yet though at the end of the method the >> session has been flush/clear/closed. Anything wrong? >> >> Or does anyone have a sequence data loader would like to share? I'm quite >> frustrated after keeping trying to do this seems simple thing without >> success. If I can make it work, I'd like to post it on the mailing list. >> Thanks in advance. >> >> Gang >> >> ==================================================== >> public class SequenceLoaderNew { >> public void loadSeq(String fileName, String namespace) throws >> FileNotFoundException, BioException, SQLException, InterruptedException { >> SessionFactory sessionFactory = new >> Configuration().configure().buildSessionFactory(); >> Session session = sessionFactory.openSession(); >> RichObjectFactory.connectToBioSQL(session); >> Namespace ns = (Namespace) >> RichObjectFactory.getObject(SimpleNamespace.class, new Object[]{namespace}); >> RichSequenceDB db = new BioSQLRichSequenceDB(session); >> System.out.println("Start loading file " + fileName + " at " + >> System.currentTimeMillis()); >> BufferedReader br = new BufferedReader(new FileReader(fileName)); >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >> ns); >> try { >> while (rsi.hasNext()) { >> RichSequence sequence = rsi.nextRichSequence(); >> System.out.println("Loaded sequence" + sequence.getAccession() >> + ", identifier: " + sequence.getIdentifier()); >> Transaction tx = session.beginTransaction(); >> try { >> System.out.println("Delete sequence" + >> sequence.getAccession() + " if exists."); >> db.removeSequence(sequence.getAccession()); >> tx.commit(); >> session.flush(); >> session.clear(); >> } catch (Exception ex) { >> if (tx != null) { >> tx.rollback(); >> } >> } >> try { >> tx = session.beginTransaction(); >> System.out.println("Save sequence " + >> sequence.getAccession()); >> //session.save("BioEntry", sequence); >> //db.addSequence(sequence); >> db.addRichSequence(sequence); >> tx.commit(); >> System.out.println("Finished savig sequence " + >> sequence.getAccession() + "\n"); >> } catch (HibernateException ex) { >> tx.rollback(); >> ex.printStackTrace(); >> } >> } >> } finally { >> session.flush(); >> session.clear(); >> session.close(); >> } >> } >> >> public static void main(String[] args) throws BioException, >> FileNotFoundException, InterruptedException, SQLException { >> SequenceLoaderNew sl = new SequenceLoaderNew(); >> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> } >> } >> ==================================================== >> Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349859602 >> Loaded sequenceNC_005813, identifier: 45478502 >> Delete sequenceNC_005813 if exists. >> Save sequence NC_005813 >> Finished savig sequence NC_005813 >> >> Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349863761 >> Loaded sequenceNC_005813, identifier: 45478502 >> Delete sequenceNC_005813 if exists. >> Save sequence NC_005813 >> org.hibernate.NonUniqueObjectException: a different object with the same >> identifier value was already associated with the session: [Term#20] >> at >> org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at >> org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) >> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >> Exception in thread "main" org.hibernate.NonUniqueObjectException: a >> different object with the same identifier value was already associated with >> the session: [Term#19] >> at >> org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at >> org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) >> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65) >> at >> org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) >> at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) >> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >> ==================================================== >> >> Richard Holland wrote: >> >>> Forgot to copy my reply back to the lists! >>> >>> >>> ---------- Forwarded message ---------- >>> From: Richard Holland >>> Date: 2008/5/20 >>> Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue >>> To: gang wu >>> >>> >>> You need to substitute this line: >>> >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new >>> SimpleNamespace(namespace)); >>> >>> with this line: >>> >>> Namespace ns = >>> (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new >>> Object[]{namespace}); >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); >>> >>> cheers, >>> Richard >>> >>> PS. You're the second person who has quoted this section of code on >>> this list recently, and had the same problem with it. If you got it >>> from a website somewhere, could you send me the URL so I can get in >>> touch with the authors and get them to correct it? Thanks! >>> >>> 2008/5/20 gang wu : >>> >>> >>>> Hi all, >>>> >>>> I'm trying to load Genbank sequence into BioSQL database with >>>> BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the >>>> exception when loading new sequences or reloading the same sequence. >>>> Seems >>>> the Hibernate is trying to insert "genbank" namespace again. Can anybody >>>> tell me what I did wrong? Thanks in advance. >>>> >>>> Gang >>>> >>>> ================================================================ >>>> public class SequenceLoaderNew { >>>> public void loadSeq(String fileName, String namespace) throws >>>> FileNotFoundException, BioException { >>>> System.out.println("Start loading file " + fileName + " at " + >>>> System.currentTimeMillis()); >>>> BufferedReader br = new BufferedReader(new FileReader(fileName)); >>>> Session session = new >>>> Configuration().configure().buildSessionFactory().openSession(); >>>> RichObjectFactory.connectToBioSQL(session); >>>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >>>> new >>>> SimpleNamespace(namespace)); >>>> while (rsi.hasNext()) { >>>> Transaction tx = session.beginTransaction(); >>>> RichSequence sequence = rsi.nextRichSequence(); >>>> System.out.println("Loaded sequence" + sequence.getAccession() + >>>> ", identifier: " + sequence.getIdentifier()); >>>> try { >>>> System.out.println("Delete sequence" + >>>> sequence.getAccession() >>>> + " if exists."); >>>> db.removeSequence(sequence.getAccession()); >>>> } catch (Exception ex) { >>>> } >>>> try { >>>> System.out.println("Save sequence " + >>>> sequence.getAccession()); >>>> session.save("BioEntry", sequence); >>>> tx.commit(); >>>> session.flush(); >>>> session.clear(); >>>> } catch (HibernateException ex) { >>>> tx.rollback(); >>>> ex.printStackTrace(); >>>> } >>>> } >>>> } >>>> >>>> public static void main(String[] args) throws BioException, >>>> FileNotFoundException { >>>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>>> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>>> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >>>> } >>>> } >>>> ================================================================ >>>> org.hibernate.exception.ConstraintViolationException: could not insert: >>>> [Namespace] >>>> at >>>> >>>> org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) >>>> at >>>> >>>> org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) >>>> at >>>> >>>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) >>>> at >>>> >>>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >>>> at >>>> >>>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >>>> at >>>> >>>> org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) >>>> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>> at >>>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >>>> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>>> at >>>> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >>>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>>> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >>>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >>>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >>>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) >>>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >>>> Caused by: >>>> com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >>>> Duplicate entry 'genbank' for key 'name' >>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) >>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) >>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >>>> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >>>> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >>>> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >>>> at >>>> >>>> org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) >>>> at >>>> >>>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) >>>> ... 31 more >>>> ================================================================ >>>> >>>> _______________________________________________ >>>> BioSQL-l mailing list >>>> BioSQL-l at lists.open-bio.org >>>> http://lists.open-bio.org/mailman/listinfo/biosql-l >>>> >>>> >>>> >> From debrown at unity.ncsu.edu Wed May 21 18:18:53 2008 From: debrown at unity.ncsu.edu (Doug Brown) Date: Wed, 21 May 2008 14:18:53 -0400 Subject: [Biojava-l] Unexpected behavior from GFF3 parser In-Reply-To: References: Message-ID: <4834678D.8090604@unity.ncsu.edu> Hi All, In the process of putting together a piece of code to load GFF3 features into an extant BioSQL database, I ran across a scenario wherein the values for notes stored in the data base (seqfeature_qualifier_value tale) are of the form "[= 54.9]" and the value as it occurred in the GFF3 file were of the form "... ;someName= 54.9; ..." There are two things that trouble me about this: 1) the brackets are puzzling. It looks as if some piece of code is calling SimpleRichAnnotation.toString() 2) inclusion of the equals sign and lack of trimming for the value. As for #2, a quick inspection of the code shows line 343 of GFF3Parser.java maybe erroneous in that it does not eliminate the equals sign. That then would cause a failure of the trimming. As for #1, the problem might be due to my high level of ignorance of proper Biojavax programming style. OR, it may be due to something in hibernate calling toString on the Set returned by SimpleRichAnnotation.getNoteSet(). I am attempting to add GFF3 features to an bioentries in a BioSQL database. Being unable to find any code similar to that which lives in the org.biojava.bio.program.gff package, I started rolling my own. If there is an easier way, would somebody please set me on the correct path? Here is a code snippet from the GFF3DocumentHandler implementation: public void recordLine( GFF3Record record) { . . . // use the HQL approach to get a thin sequence Query q = session.createQuery( "from ThinSequence as s where s.name = :acc"); q.setString( "acc", record.getSequenceID()); seq = (Sequence)q.uniqueResult(); // add the GFF annotation(s) to the sequence if ( seq != null) this.getAnnotator( (GFF3Record.Impl)record, true).annotate( seq); . . . } . . . public SequenceAnnotator getAnnotator( final GFF3Record.Impl rec, final boolean checkSeqName) { return new SequenceAnnotator() { public Sequence annotate(Sequence seq) throws BioException, ChangeVetoException { if (!checkSeqName || rec.getSequenceID().equals(seq.getName())) { Feature.Template thisTemplate = null; //Build the three types of annotations: 1) non-stranded, non-phased // 2) stranded, non-phased, or 3) stranded, phased. if (rec.getStrand() == StrandedFeature.UNKNOWN) { RichFeature.Template plain = new RichFeature.Template(); plain.annotation = Annotation.EMPTY_ANNOTATION; } else if (rec.getPhase() == GFFTools.NO_FRAME) { StrandedFeature.Template stranded = new StrandedFeature.Template(); stranded.annotation = Annotation.EMPTY_ANNOTATION; stranded.strand = rec.getStrand(); thisTemplate = stranded; } else { // translate GFF phases into Biojava phases FramedFeature.Template framed = new FramedFeature.Template(); framed.annotation = Annotation.EMPTY_ANNOTATION; framed.strand = rec.getStrand(); switch (rec.getPhase()) { case 0: framed.readingFrame = FramedFeature.FRAME_0; break; case 1: framed.readingFrame = FramedFeature.FRAME_1; break; case 2: framed.readingFrame = FramedFeature.FRAME_2; break; } thisTemplate = framed; } // set the items common to all three types thisTemplate.location = new RangeLocation( rec.getStart(), rec.getEnd()); thisTemplate.typeTerm = rec.getType(); thisTemplate.sourceTerm = rec.getSource(); // the annotation was already filled out by the parser thisTemplate.annotation = rec.getAnnotation(); // annotate the seqeunce seq.createFeature(thisTemplate); } return seq; } }; } Regards, Doug Brown -- Doug Brown - Bioinformatics Fungal Genomics Laboratory Center for Integrated Fungal Research North Carolina State University Campus Box 7251, Raleigh, NC 27695-7251 https://www.fungalgenomics.ncsu.edu/~debrown/ Tel: (919) 513-0394, Fax (919) 513-0024 e-mail: doug_brown AtSign ncsu.edu From dicknetherlands at gmail.com Wed May 21 18:40:41 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Wed, 21 May 2008 19:40:41 +0100 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> Message-ID: Sorry, I misread the original question. My bad. What it actually seems that you're doing is simply iterating through a genbank file, deleting from the db that already exist, then replacing them with members from the file. Looking more closely it seems that it is complaining about duplicated Term objects, probably because the cache is getting confused with all this flushing and clearing. Have you tried running this code without flushing and clearing the session? If not, try also inserting If that didn't work, then after each call to flush(), insert a RichObjectFactory.clearLRUCache() call. That really will completely clear memory of all objects from the database. cheers, Richard 2008/5/21 Richard Holland : > I'm not sure why you'd want to do that? Either way, as far as I know, > Hibernate sessions are not designed for that. If you want to delete > the sequence then replace it with a completely new sequence object, > you have to create a new sequence object - you can't reuse the one you > just deleted. The session info is embedded into that object so even if > you clear the session, the object still refers to it. > > If you just want to load a sequence, modify it, then save it back, you > should just load it then use saveOrUpdate to save it back again with > changes. If you want to replace objects in your database, don't load > them, just delete them, then use save to create new objects in their > place. > > cheers, > Richard > > 2008/5/21 gang wu : >> I got another problem with almost the same code(see attached code and >> output). If I call the loadSeq() only once, everything works fine. The >> second call of the same method will fail. By the exception message, it looks >> like the session is not cleaned up yet though at the end of the method the >> session has been flush/clear/closed. Anything wrong? >> >> Or does anyone have a sequence data loader would like to share? I'm quite >> frustrated after keeping trying to do this seems simple thing without >> success. If I can make it work, I'd like to post it on the mailing list. >> Thanks in advance. >> >> Gang >> >> ==================================================== >> public class SequenceLoaderNew { >> public void loadSeq(String fileName, String namespace) throws >> FileNotFoundException, BioException, SQLException, InterruptedException { >> SessionFactory sessionFactory = new >> Configuration().configure().buildSessionFactory(); >> Session session = sessionFactory.openSession(); >> RichObjectFactory.connectToBioSQL(session); >> Namespace ns = (Namespace) >> RichObjectFactory.getObject(SimpleNamespace.class, new Object[]{namespace}); >> RichSequenceDB db = new BioSQLRichSequenceDB(session); >> System.out.println("Start loading file " + fileName + " at " + >> System.currentTimeMillis()); >> BufferedReader br = new BufferedReader(new FileReader(fileName)); >> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >> ns); >> try { >> while (rsi.hasNext()) { >> RichSequence sequence = rsi.nextRichSequence(); >> System.out.println("Loaded sequence" + sequence.getAccession() >> + ", identifier: " + sequence.getIdentifier()); >> Transaction tx = session.beginTransaction(); >> try { >> System.out.println("Delete sequence" + >> sequence.getAccession() + " if exists."); >> db.removeSequence(sequence.getAccession()); >> tx.commit(); >> session.flush(); >> session.clear(); >> } catch (Exception ex) { >> if (tx != null) { >> tx.rollback(); >> } >> } >> try { >> tx = session.beginTransaction(); >> System.out.println("Save sequence " + >> sequence.getAccession()); >> //session.save("BioEntry", sequence); >> //db.addSequence(sequence); >> db.addRichSequence(sequence); >> tx.commit(); >> System.out.println("Finished savig sequence " + >> sequence.getAccession() + "\n"); >> } catch (HibernateException ex) { >> tx.rollback(); >> ex.printStackTrace(); >> } >> } >> } finally { >> session.flush(); >> session.clear(); >> session.close(); >> } >> } >> >> public static void main(String[] args) throws BioException, >> FileNotFoundException, InterruptedException, SQLException { >> SequenceLoaderNew sl = new SequenceLoaderNew(); >> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >> } >> } >> ==================================================== >> Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349859602 >> Loaded sequenceNC_005813, identifier: 45478502 >> Delete sequenceNC_005813 if exists. >> Save sequence NC_005813 >> Finished savig sequence NC_005813 >> >> Start loading file /genomeseq/bacteria/NC_005813.gbk at 1211349863761 >> Loaded sequenceNC_005813, identifier: 45478502 >> Delete sequenceNC_005813 if exists. >> Save sequence NC_005813 >> org.hibernate.NonUniqueObjectException: a different object with the same >> identifier value was already associated with the session: [Term#20] >> at >> org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at >> org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) >> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >> Exception in thread "main" org.hibernate.NonUniqueObjectException: a >> different object with the same identifier value was already associated with >> the session: [Term#19] >> at >> org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >> at >> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >> at >> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >> at >> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >> at >> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >> at >> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at >> org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296) >> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242) >> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122) >> at >> org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65) >> at >> org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) >> at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) >> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) >> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >> ==================================================== >> >> Richard Holland wrote: >>> >>> Forgot to copy my reply back to the lists! >>> >>> >>> ---------- Forwarded message ---------- >>> From: Richard Holland >>> Date: 2008/5/20 >>> Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue >>> To: gang wu >>> >>> >>> You need to substitute this line: >>> >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, new >>> SimpleNamespace(namespace)); >>> >>> with this line: >>> >>> Namespace ns = >>> (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new >>> Object[]{namespace}); >>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, ns); >>> >>> cheers, >>> Richard >>> >>> PS. You're the second person who has quoted this section of code on >>> this list recently, and had the same problem with it. If you got it >>> from a website somewhere, could you send me the URL so I can get in >>> touch with the authors and get them to correct it? Thanks! >>> >>> 2008/5/20 gang wu : >>> >>>> >>>> Hi all, >>>> >>>> I'm trying to load Genbank sequence into BioSQL database with >>>> BioJavax/Hibernate. It's Ok to load the first sequence. Then I got the >>>> exception when loading new sequences or reloading the same sequence. >>>> Seems >>>> the Hibernate is trying to insert "genbank" namespace again. Can anybody >>>> tell me what I did wrong? Thanks in advance. >>>> >>>> Gang >>>> >>>> ================================================================ >>>> public class SequenceLoaderNew { >>>> public void loadSeq(String fileName, String namespace) throws >>>> FileNotFoundException, BioException { >>>> System.out.println("Start loading file " + fileName + " at " + >>>> System.currentTimeMillis()); >>>> BufferedReader br = new BufferedReader(new FileReader(fileName)); >>>> Session session = new >>>> Configuration().configure().buildSessionFactory().openSession(); >>>> RichObjectFactory.connectToBioSQL(session); >>>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>>> RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA(br, >>>> new >>>> SimpleNamespace(namespace)); >>>> while (rsi.hasNext()) { >>>> Transaction tx = session.beginTransaction(); >>>> RichSequence sequence = rsi.nextRichSequence(); >>>> System.out.println("Loaded sequence" + sequence.getAccession() + >>>> ", identifier: " + sequence.getIdentifier()); >>>> try { >>>> System.out.println("Delete sequence" + >>>> sequence.getAccession() >>>> + " if exists."); >>>> db.removeSequence(sequence.getAccession()); >>>> } catch (Exception ex) { >>>> } >>>> try { >>>> System.out.println("Save sequence " + >>>> sequence.getAccession()); >>>> session.save("BioEntry", sequence); >>>> tx.commit(); >>>> session.flush(); >>>> session.clear(); >>>> } catch (HibernateException ex) { >>>> tx.rollback(); >>>> ex.printStackTrace(); >>>> } >>>> } >>>> } >>>> >>>> public static void main(String[] args) throws BioException, >>>> FileNotFoundException { >>>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>>> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>>> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >>>> } >>>> } >>>> ================================================================ >>>> org.hibernate.exception.ConstraintViolationException: could not insert: >>>> [Namespace] >>>> at >>>> >>>> org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) >>>> at >>>> >>>> org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) >>>> at >>>> >>>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) >>>> at >>>> >>>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >>>> at >>>> >>>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >>>> at >>>> >>>> org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:51) >>>> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>> at >>>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) >>>> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>>> at >>>> org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218) >>>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>>> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169) >>>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) >>>> at >>>> >>>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) >>>> at >>>> >>>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >>>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >>>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:38) >>>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >>>> Caused by: >>>> com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >>>> Duplicate entry 'genbank' for key 'name' >>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1011) >>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) >>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >>>> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >>>> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >>>> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >>>> at >>>> >>>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >>>> at >>>> >>>> org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73) >>>> at >>>> >>>> org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33) >>>> ... 31 more >>>> ================================================================ >>>> >>>> _______________________________________________ >>>> BioSQL-l mailing list >>>> BioSQL-l at lists.open-bio.org >>>> http://lists.open-bio.org/mailman/listinfo/biosql-l >>>> >>>> >> >> > From dicknetherlands at gmail.com Wed May 21 18:49:57 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Wed, 21 May 2008 19:49:57 +0100 Subject: [Biojava-l] Unexpected behavior from GFF3 parser In-Reply-To: <4834678D.8090604@unity.ncsu.edu> References: <4834678D.8090604@unity.ncsu.edu> Message-ID: Hello. The GFF3 parser is an 'old' pre-BioJavaX one which basically stuffs everything from the file into string annotations. It's fine as long as you don't attempt to round-trip it to the database, but then things get interesting. Still, you're right about the equals - it's a bug that it isn't trimming it. But, the string is getting stored verbatim because the BioJavaX persistence layer always stores all 'old' annotations as toStrings of the actual objects (it's a best-fit solution for translating 'old' data into BioJavaX data as in BioJavaX all annotations are strings). The problem really lies in the GFF3 parser not having been updated/replaced to work with the new BioJavaX-style parsing, where things are parsed more deeply and filed into more appropriate locations in the object model. If there's a volunteer to convert it, we'd appreciate hearing from them.... cheers, Richard 2008/5/21 Doug Brown : > Hi All, > > In the process of putting together a piece of code to load GFF3 features > into an extant BioSQL database, I ran across a scenario wherein the values > for notes stored in the data base (seqfeature_qualifier_value tale) are of > the form > "[= 54.9]" > and the value as it occurred in the GFF3 file were of the form > "... ;someName= 54.9; ..." > > There are two things that trouble me about this: > 1) the brackets are puzzling. It looks as if some piece of code is calling > SimpleRichAnnotation.toString() > 2) inclusion of the equals sign and lack of trimming for the value. > > As for #2, a quick inspection of the code shows line 343 of GFF3Parser.java > maybe erroneous in that it does not eliminate the equals sign. That then > would cause a failure of the trimming. > > As for #1, the problem might be due to my high level of ignorance of proper > Biojavax programming style. OR, it may be due to something in hibernate > calling toString on the Set returned by SimpleRichAnnotation.getNoteSet(). > > I am attempting to add GFF3 features to an bioentries in a BioSQL database. > Being unable to find any code similar to that which lives in the > org.biojava.bio.program.gff package, I started rolling my own. If there is > an easier way, would somebody please set me on the correct path? > > Here is a code snippet from the GFF3DocumentHandler implementation: > > public void recordLine( GFF3Record record) > { > > . . . > > // use the HQL approach to get a thin sequence > Query q = session.createQuery( "from ThinSequence as s where s.name = > :acc"); > q.setString( "acc", record.getSequenceID()); > seq = (Sequence)q.uniqueResult(); > > // add the GFF annotation(s) to the sequence > if ( seq != null) > this.getAnnotator( (GFF3Record.Impl)record, true).annotate( seq); > > . . . > } > > . . . > > public SequenceAnnotator getAnnotator( final GFF3Record.Impl rec, > final boolean checkSeqName) > { > return new SequenceAnnotator() > { > public Sequence annotate(Sequence seq) throws BioException, > ChangeVetoException > { > if (!checkSeqName || rec.getSequenceID().equals(seq.getName())) > { > Feature.Template thisTemplate = null; > > //Build the three types of annotations: 1) non-stranded, > non-phased > // 2) stranded, non-phased, or 3) stranded, phased. > if (rec.getStrand() == StrandedFeature.UNKNOWN) > { > RichFeature.Template plain = new RichFeature.Template(); > plain.annotation = Annotation.EMPTY_ANNOTATION; > } > else if (rec.getPhase() == GFFTools.NO_FRAME) > { > StrandedFeature.Template stranded = new > StrandedFeature.Template(); > stranded.annotation = Annotation.EMPTY_ANNOTATION; > stranded.strand = rec.getStrand(); > thisTemplate = stranded; > } > else > { > // translate GFF phases into Biojava phases > FramedFeature.Template framed = new FramedFeature.Template(); > framed.annotation = Annotation.EMPTY_ANNOTATION; > framed.strand = rec.getStrand(); > switch (rec.getPhase()) > { > case 0: > framed.readingFrame = FramedFeature.FRAME_0; > break; > case 1: > framed.readingFrame = FramedFeature.FRAME_1; > break; > case 2: > framed.readingFrame = FramedFeature.FRAME_2; > break; > } > thisTemplate = framed; > } > // set the items common to all three types > thisTemplate.location = new RangeLocation( rec.getStart(), > rec.getEnd()); > thisTemplate.typeTerm = rec.getType(); > thisTemplate.sourceTerm = rec.getSource(); > > // the annotation was already filled out by the parser > thisTemplate.annotation = rec.getAnnotation(); > > // annotate the seqeunce > seq.createFeature(thisTemplate); > } > return seq; > } > }; > } > > Regards, > Doug Brown > > -- > Doug Brown - Bioinformatics > Fungal Genomics Laboratory > Center for Integrated Fungal Research > North Carolina State University > Campus Box 7251, Raleigh, NC 27695-7251 > https://www.fungalgenomics.ncsu.edu/~debrown/ > Tel: (919) 513-0394, Fax (919) 513-0024 > e-mail: doug_brown AtSign ncsu.edu > > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From dreher at molgen.mpg.de Thu May 22 09:27:22 2008 From: dreher at molgen.mpg.de (Felix Dreher) Date: Thu, 22 May 2008 11:27:22 +0200 Subject: [Biojava-l] Java source files missing? Message-ID: <48353C7A.5070308@molgen.mpg.de> Hi all, the source files within the "biojava-1.6.jar" archive seem to be missing (I've downloaded it from the homepage: http://biojava.org/wiki/BioJava:Download_1.6). Best regards, Felix From ap3 at sanger.ac.uk Thu May 22 10:31:32 2008 From: ap3 at sanger.ac.uk (Andreas Prlic) Date: Thu, 22 May 2008 11:31:32 +0100 Subject: [Biojava-l] Java source files missing? In-Reply-To: <48353C7A.5070308@molgen.mpg.de> References: <48353C7A.5070308@molgen.mpg.de> Message-ID: Hi Felix, Yes, it looks like the src directory got lost out in biojava-1.6.- all.jar. I will have a look at the release build scripts and fix this. In the meanwhile, you could access the code via the public svn. There is a branch for this release in svn://code.open-bio.org/ biojava/biojava-live/branches/release-1_6 Andreas On 22 May 2008, at 10:27, Felix Dreher wrote: > Hi all, > > the source files within the "biojava-1.6.jar" archive seem to be > missing (I've downloaded it from the homepage: http://biojava.org/ > wiki/BioJava:Download_1.6). > > Best regards, > Felix > > > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l ----------------------------------------------------------------------- Andreas Prlic Wellcome Trust Sanger Institute Hinxton, Cambridge CB10 1SA, UK +44 (0) 1223 49 6891 ----------------------------------------------------------------------- -- The Wellcome Trust Sanger Institute is operated by Genome Research Limited, a charity registered in England with number 1021457 and a company registered in England with number 2742969, whose registered office is 215 Euston Road, London, NW1 2BE. From ap3 at sanger.ac.uk Thu May 22 13:20:13 2008 From: ap3 at sanger.ac.uk (Andreas Prlic) Date: Thu, 22 May 2008 14:20:13 +0100 Subject: [Biojava-l] Java source files missing? In-Reply-To: <48353C7A.5070308@molgen.mpg.de> References: <48353C7A.5070308@molgen.mpg.de> Message-ID: Hi Felix, This should be fixed now (see the biojava-1.6-all.jar) . Not sure what went wrong with the first file, doing "ant dist" seems to copy the src directories fine... Andreas On 22 May 2008, at 10:27, Felix Dreher wrote: > Hi all, > > the source files within the "biojava-1.6.jar" archive seem to be > missing (I've downloaded it from the homepage: http://biojava.org/ > wiki/BioJava:Download_1.6). > > Best regards, > Felix > > > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l ----------------------------------------------------------------------- Andreas Prlic Wellcome Trust Sanger Institute Hinxton, Cambridge CB10 1SA, UK +44 (0) 1223 49 6891 ----------------------------------------------------------------------- -- The Wellcome Trust Sanger Institute is operated by Genome Research Limited, a charity registered in England with number 1021457 and a company registered in England with number 2742969, whose registered office is 215 Euston Road, London, NW1 2BE. From gcappuccilli at protelix.com Thu May 22 15:39:37 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Thu, 22 May 2008 08:39:37 -0700 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: <48346614.6060102@molbio.mgh.harvard.edu> References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> <48346614.6060102@molbio.mgh.harvard.edu> Message-ID: <8D3625BC-B062-4979-94C1-324385705BF9@protelix.com> Gang, did you fix the problem? If so could you kindly share the solution? I tried your code last night and I couldn't clear those Term instances from the cache. Does RichObjectFactory.clearLRUCache() clear the first level or second level cache? Again, I am not an expert, so I apologize if my question is obvious. Thanks. Guido On May 21, 2008, at 11:12 AM, gang wu wrote: > The scenario is quite simple: I'm using the database to store > Genbank genome sequences. Later I've to update the sequences when > Genbank has newer releases. The following two lines are loading the > same sequence twice. The first time will insert a new BioEntry > record. the second time will delete the existing record and insert a > new record again. > > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > > Following code is used to load multiple genome sequences by calling > the loadSeq() method multiple times. All failed except the first time. > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_006723.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_008945.gbk", "genbank"); > The exception message has the details. Since all variables used in > loadSeq() are local, and I did the session flush/clear/close, then > it should be ok to call the method again. > > Thank you very much for your help. > > Gang > > > Richard Holland wrote: >> I'm not sure why you'd want to do that? Either way, as far as I know, >> Hibernate sessions are not designed for that. If you want to delete >> the sequence then replace it with a completely new sequence object, >> you have to create a new sequence object - you can't reuse the one >> you >> just deleted. The session info is embedded into that object so even >> if >> you clear the session, the object still refers to it. >> >> If you just want to load a sequence, modify it, then save it back, >> you >> should just load it then use saveOrUpdate to save it back again with >> changes. If you want to replace objects in your database, don't load >> them, just delete them, then use save to create new objects in their >> place. >> >> cheers, >> Richard >> >> 2008/5/21 gang wu : >> >>> I got another problem with almost the same code(see attached code >>> and >>> output). If I call the loadSeq() only once, everything works fine. >>> The >>> second call of the same method will fail. By the exception >>> message, it looks >>> like the session is not cleaned up yet though at the end of the >>> method the >>> session has been flush/clear/closed. Anything wrong? >>> >>> Or does anyone have a sequence data loader would like to share? >>> I'm quite >>> frustrated after keeping trying to do this seems simple thing >>> without >>> success. If I can make it work, I'd like to post it on the mailing >>> list. >>> Thanks in advance. >>> >>> Gang >>> >>> ==================================================== >>> public class SequenceLoaderNew { >>> public void loadSeq(String fileName, String namespace) throws >>> FileNotFoundException, BioException, SQLException, >>> InterruptedException { >>> SessionFactory sessionFactory = new >>> Configuration().configure().buildSessionFactory(); >>> Session session = sessionFactory.openSession(); >>> RichObjectFactory.connectToBioSQL(session); >>> Namespace ns = (Namespace) >>> RichObjectFactory.getObject(SimpleNamespace.class, new Object[] >>> {namespace}); >>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>> System.out.println("Start loading file " + fileName + " at " + >>> System.currentTimeMillis()); >>> BufferedReader br = new BufferedReader(new >>> FileReader(fileName)); >>> RichSequenceIterator rsi = >>> RichSequence.IOTools.readGenbankDNA(br, >>> ns); >>> try { >>> while (rsi.hasNext()) { >>> RichSequence sequence = rsi.nextRichSequence(); >>> System.out.println("Loaded sequence" + >>> sequence.getAccession() >>> + ", identifier: " + sequence.getIdentifier()); >>> Transaction tx = session.beginTransaction(); >>> try { >>> System.out.println("Delete sequence" + >>> sequence.getAccession() + " if exists."); >>> db.removeSequence(sequence.getAccession()); >>> tx.commit(); >>> session.flush(); >>> session.clear(); >>> } catch (Exception ex) { >>> if (tx != null) { >>> tx.rollback(); >>> } >>> } >>> try { >>> tx = session.beginTransaction(); >>> System.out.println("Save sequence " + >>> sequence.getAccession()); >>> //session.save("BioEntry", sequence); >>> //db.addSequence(sequence); >>> db.addRichSequence(sequence); >>> tx.commit(); >>> System.out.println("Finished savig sequence " + >>> sequence.getAccession() + "\n"); >>> } catch (HibernateException ex) { >>> tx.rollback(); >>> ex.printStackTrace(); >>> } >>> } >>> } finally { >>> session.flush(); >>> session.clear(); >>> session.close(); >>> } >>> } >>> >>> public static void main(String[] args) throws BioException, >>> FileNotFoundException, InterruptedException, SQLException { >>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>> } >>> } >>> ==================================================== >>> Start loading file /genomeseq/bacteria/NC_005813.gbk at >>> 1211349859602 >>> Loaded sequenceNC_005813, identifier: 45478502 >>> Delete sequenceNC_005813 if exists. >>> Save sequence NC_005813 >>> Finished savig sequence NC_005813 >>> >>> Start loading file /genomeseq/bacteria/NC_005813.gbk at >>> 1211349863761 >>> Loaded sequenceNC_005813, identifier: 45478502 >>> Delete sequenceNC_005813 if exists. >>> Save sequence NC_005813 >>> org.hibernate.NonUniqueObjectException: a different object with >>> the same >>> identifier value was already associated with the session: [Term#20] >>> at >>> org >>> .hibernate >>> .engine >>> .StatefulPersistenceContext >>> .checkUniqueness(StatefulPersistenceContext.java:590) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performUpdate(DefaultSaveOrUpdateEventListener.java:284) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .cascadeBeforeSave(AbstractSaveEventListener.java:431) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSaveOrReplicate(AbstractSaveEventListener.java:265) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSave(AbstractSaveEventListener.java:181) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .saveWithGeneratedOrRequestedId >>> (DefaultSaveOrUpdateEventListener.java:187) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at >>> org >>> .hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java: >>> 296) >>> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java: >>> 242) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .cascadeAfterSave(AbstractSaveEventListener.java:456) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSaveOrReplicate(AbstractSaveEventListener.java:334) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSave(AbstractSaveEventListener.java:181) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .saveWithGeneratedOrRequestedId >>> (DefaultSaveOrUpdateEventListener.java:187) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveEventListener >>> .saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveEventListener >>> .performSaveOrUpdate(DefaultSaveEventListener.java:27) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) >>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >>> Exception in thread "main" org.hibernate.NonUniqueObjectException: a >>> different object with the same identifier value was already >>> associated with >>> the session: [Term#19] >>> at >>> org >>> .hibernate >>> .engine >>> .StatefulPersistenceContext >>> .checkUniqueness(StatefulPersistenceContext.java:590) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performUpdate(DefaultSaveOrUpdateEventListener.java:284) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .cascadeBeforeSave(AbstractSaveEventListener.java:431) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSaveOrReplicate(AbstractSaveEventListener.java:265) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSave(AbstractSaveEventListener.java:181) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .saveWithGeneratedOrRequestedId >>> (DefaultSaveOrUpdateEventListener.java:187) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at >>> org >>> .hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java: >>> 296) >>> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java: >>> 242) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractFlushingEventListener >>> .cascadeOnFlush(AbstractFlushingEventListener.java:131) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractFlushingEventListener >>> .prepareEntityFlushes(AbstractFlushingEventListener.java:122) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractFlushingEventListener >>> .flushEverythingToExecutions(AbstractFlushingEventListener.java:65) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java: >>> 26) >>> at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) >>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) >>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >>> ==================================================== >>> >>> Richard Holland wrote: >>> >>>> Forgot to copy my reply back to the lists! >>>> >>>> >>>> ---------- Forwarded message ---------- >>>> From: Richard Holland >>>> Date: 2008/5/20 >>>> Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue >>>> To: gang wu >>>> >>>> >>>> You need to substitute this line: >>>> >>>> RichSequenceIterator rsi = >>>> RichSequence.IOTools.readGenbankDNA(br, new >>>> SimpleNamespace(namespace)); >>>> >>>> with this line: >>>> >>>> Namespace ns = >>>> (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new >>>> Object[]{namespace}); >>>> RichSequenceIterator rsi = >>>> RichSequence.IOTools.readGenbankDNA(br, ns); >>>> >>>> cheers, >>>> Richard >>>> >>>> PS. You're the second person who has quoted this section of code on >>>> this list recently, and had the same problem with it. If you got it >>>> from a website somewhere, could you send me the URL so I can get in >>>> touch with the authors and get them to correct it? Thanks! >>>> >>>> 2008/5/20 gang wu : >>>> >>>> >>>>> Hi all, >>>>> >>>>> I'm trying to load Genbank sequence into BioSQL database with >>>>> BioJavax/Hibernate. It's Ok to load the first sequence. Then I >>>>> got the >>>>> exception when loading new sequences or reloading the same >>>>> sequence. >>>>> Seems >>>>> the Hibernate is trying to insert "genbank" namespace again. Can >>>>> anybody >>>>> tell me what I did wrong? Thanks in advance. >>>>> >>>>> Gang >>>>> >>>>> ================================================================ >>>>> public class SequenceLoaderNew { >>>>> public void loadSeq(String fileName, String namespace) throws >>>>> FileNotFoundException, BioException { >>>>> System.out.println("Start loading file " + fileName + " at " + >>>>> System.currentTimeMillis()); >>>>> BufferedReader br = new BufferedReader(new >>>>> FileReader(fileName)); >>>>> Session session = new >>>>> Configuration().configure().buildSessionFactory().openSession(); >>>>> RichObjectFactory.connectToBioSQL(session); >>>>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>>>> RichSequenceIterator rsi = >>>>> RichSequence.IOTools.readGenbankDNA(br, >>>>> new >>>>> SimpleNamespace(namespace)); >>>>> while (rsi.hasNext()) { >>>>> Transaction tx = session.beginTransaction(); >>>>> RichSequence sequence = rsi.nextRichSequence(); >>>>> System.out.println("Loaded sequence" + >>>>> sequence.getAccession() + >>>>> ", identifier: " + sequence.getIdentifier()); >>>>> try { >>>>> System.out.println("Delete sequence" + >>>>> sequence.getAccession() >>>>> + " if exists."); >>>>> db.removeSequence(sequence.getAccession()); >>>>> } catch (Exception ex) { >>>>> } >>>>> try { >>>>> System.out.println("Save sequence " + >>>>> sequence.getAccession()); >>>>> session.save("BioEntry", sequence); >>>>> tx.commit(); >>>>> session.flush(); >>>>> session.clear(); >>>>> } catch (HibernateException ex) { >>>>> tx.rollback(); >>>>> ex.printStackTrace(); >>>>> } >>>>> } >>>>> } >>>>> >>>>> public static void main(String[] args) throws BioException, >>>>> FileNotFoundException { >>>>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>>>> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>>>> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >>>>> } >>>>> } >>>>> ================================================================ >>>>> org.hibernate.exception.ConstraintViolationException: could not >>>>> insert: >>>>> [Namespace] >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .exception.SQLStateConverter.convert(SQLStateConverter.java:71) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java: >>>>> 43) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .id >>>>> .insert >>>>> .AbstractReturningDelegate >>>>> .performInsert(AbstractReturningDelegate.java:40) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .persister >>>>> .entity >>>>> .AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .persister >>>>> .entity >>>>> .AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .action >>>>> .EntityIdentityInsertAction >>>>> .execute(EntityIdentityInsertAction.java:51) >>>>> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java: >>>>> 279) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSaveOrReplicate(AbstractSaveEventListener.java:298) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSave(AbstractSaveEventListener.java:181) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .saveWithGeneratedOrRequestedId >>>>> (DefaultSaveOrUpdateEventListener.java:187) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>>> at >>>>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>>>> 507) >>>>> at >>>>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>>>> at >>>>> org.hibernate.engine.CascadingAction >>>>> $5.cascade(CascadingAction.java:218) >>>>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>>>> at >>>>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>>>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>>>> 169) >>>>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .cascadeBeforeSave(AbstractSaveEventListener.java:431) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSaveOrReplicate(AbstractSaveEventListener.java:265) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSave(AbstractSaveEventListener.java:181) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .saveWithGeneratedOrRequestedId >>>>> (DefaultSaveOrUpdateEventListener.java:187) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveEventListener >>>>> .saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveEventListener >>>>> .performSaveOrUpdate(DefaultSaveEventListener.java:27) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java: >>>>> 535) >>>>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >>>>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java: >>>>> 38) >>>>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >>>>> Caused by: >>>>> com >>>>> .mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >>>>> Duplicate entry 'genbank' for key 'name' >>>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java: >>>>> 1011) >>>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java: >>>>> 956) >>>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >>>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >>>>> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >>>>> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >>>>> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java: >>>>> 2542) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeInternal(PreparedStatement.java: >>>>> 1734) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >>>>> at >>>>> >>>>> org.hibernate.id.IdentityGenerator >>>>> $ >>>>> GetGeneratedKeysDelegate >>>>> .executeAndExtract(IdentityGenerator.java:73) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .id >>>>> .insert >>>>> .AbstractReturningDelegate >>>>> .performInsert(AbstractReturningDelegate.java:33) >>>>> ... 31 more >>>>> ================================================================ >>>>> >>>>> _______________________________________________ >>>>> BioSQL-l mailing list >>>>> BioSQL-l at lists.open-bio.org >>>>> http://lists.open-bio.org/mailman/listinfo/biosql-l >>>>> >>>>> >>>>> >>> > > _______________________________________________ > BioSQL-l mailing list > BioSQL-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biosql-l > From gcappuccilli at protelix.com Thu May 22 15:39:37 2008 From: gcappuccilli at protelix.com (Guido Cappuccilli) Date: Thu, 22 May 2008 08:39:37 -0700 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: <48346614.6060102@molbio.mgh.harvard.edu> References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> <48346614.6060102@molbio.mgh.harvard.edu> Message-ID: <8D3625BC-B062-4979-94C1-324385705BF9@protelix.com> Gang, did you fix the problem? If so could you kindly share the solution? I tried your code last night and I couldn't clear those Term instances from the cache. Does RichObjectFactory.clearLRUCache() clear the first level or second level cache? Again, I am not an expert, so I apologize if my question is obvious. Thanks. Guido On May 21, 2008, at 11:12 AM, gang wu wrote: > The scenario is quite simple: I'm using the database to store > Genbank genome sequences. Later I've to update the sequences when > Genbank has newer releases. The following two lines are loading the > same sequence twice. The first time will insert a new BioEntry > record. the second time will delete the existing record and insert a > new record again. > > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > > Following code is used to load multiple genome sequences by calling > the loadSeq() method multiple times. All failed except the first time. > sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_006723.gbk", "genbank"); > sl.loadSeq("/genomeseq/bacteria/NC_008945.gbk", "genbank"); > The exception message has the details. Since all variables used in > loadSeq() are local, and I did the session flush/clear/close, then > it should be ok to call the method again. > > Thank you very much for your help. > > Gang > > > Richard Holland wrote: >> I'm not sure why you'd want to do that? Either way, as far as I know, >> Hibernate sessions are not designed for that. If you want to delete >> the sequence then replace it with a completely new sequence object, >> you have to create a new sequence object - you can't reuse the one >> you >> just deleted. The session info is embedded into that object so even >> if >> you clear the session, the object still refers to it. >> >> If you just want to load a sequence, modify it, then save it back, >> you >> should just load it then use saveOrUpdate to save it back again with >> changes. If you want to replace objects in your database, don't load >> them, just delete them, then use save to create new objects in their >> place. >> >> cheers, >> Richard >> >> 2008/5/21 gang wu : >> >>> I got another problem with almost the same code(see attached code >>> and >>> output). If I call the loadSeq() only once, everything works fine. >>> The >>> second call of the same method will fail. By the exception >>> message, it looks >>> like the session is not cleaned up yet though at the end of the >>> method the >>> session has been flush/clear/closed. Anything wrong? >>> >>> Or does anyone have a sequence data loader would like to share? >>> I'm quite >>> frustrated after keeping trying to do this seems simple thing >>> without >>> success. If I can make it work, I'd like to post it on the mailing >>> list. >>> Thanks in advance. >>> >>> Gang >>> >>> ==================================================== >>> public class SequenceLoaderNew { >>> public void loadSeq(String fileName, String namespace) throws >>> FileNotFoundException, BioException, SQLException, >>> InterruptedException { >>> SessionFactory sessionFactory = new >>> Configuration().configure().buildSessionFactory(); >>> Session session = sessionFactory.openSession(); >>> RichObjectFactory.connectToBioSQL(session); >>> Namespace ns = (Namespace) >>> RichObjectFactory.getObject(SimpleNamespace.class, new Object[] >>> {namespace}); >>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>> System.out.println("Start loading file " + fileName + " at " + >>> System.currentTimeMillis()); >>> BufferedReader br = new BufferedReader(new >>> FileReader(fileName)); >>> RichSequenceIterator rsi = >>> RichSequence.IOTools.readGenbankDNA(br, >>> ns); >>> try { >>> while (rsi.hasNext()) { >>> RichSequence sequence = rsi.nextRichSequence(); >>> System.out.println("Loaded sequence" + >>> sequence.getAccession() >>> + ", identifier: " + sequence.getIdentifier()); >>> Transaction tx = session.beginTransaction(); >>> try { >>> System.out.println("Delete sequence" + >>> sequence.getAccession() + " if exists."); >>> db.removeSequence(sequence.getAccession()); >>> tx.commit(); >>> session.flush(); >>> session.clear(); >>> } catch (Exception ex) { >>> if (tx != null) { >>> tx.rollback(); >>> } >>> } >>> try { >>> tx = session.beginTransaction(); >>> System.out.println("Save sequence " + >>> sequence.getAccession()); >>> //session.save("BioEntry", sequence); >>> //db.addSequence(sequence); >>> db.addRichSequence(sequence); >>> tx.commit(); >>> System.out.println("Finished savig sequence " + >>> sequence.getAccession() + "\n"); >>> } catch (HibernateException ex) { >>> tx.rollback(); >>> ex.printStackTrace(); >>> } >>> } >>> } finally { >>> session.flush(); >>> session.clear(); >>> session.close(); >>> } >>> } >>> >>> public static void main(String[] args) throws BioException, >>> FileNotFoundException, InterruptedException, SQLException { >>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>> sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>> } >>> } >>> ==================================================== >>> Start loading file /genomeseq/bacteria/NC_005813.gbk at >>> 1211349859602 >>> Loaded sequenceNC_005813, identifier: 45478502 >>> Delete sequenceNC_005813 if exists. >>> Save sequence NC_005813 >>> Finished savig sequence NC_005813 >>> >>> Start loading file /genomeseq/bacteria/NC_005813.gbk at >>> 1211349863761 >>> Loaded sequenceNC_005813, identifier: 45478502 >>> Delete sequenceNC_005813 if exists. >>> Save sequence NC_005813 >>> org.hibernate.NonUniqueObjectException: a different object with >>> the same >>> identifier value was already associated with the session: [Term#20] >>> at >>> org >>> .hibernate >>> .engine >>> .StatefulPersistenceContext >>> .checkUniqueness(StatefulPersistenceContext.java:590) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performUpdate(DefaultSaveOrUpdateEventListener.java:284) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .cascadeBeforeSave(AbstractSaveEventListener.java:431) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSaveOrReplicate(AbstractSaveEventListener.java:265) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSave(AbstractSaveEventListener.java:181) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .saveWithGeneratedOrRequestedId >>> (DefaultSaveOrUpdateEventListener.java:187) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at >>> org >>> .hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java: >>> 296) >>> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java: >>> 242) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .cascadeAfterSave(AbstractSaveEventListener.java:456) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSaveOrReplicate(AbstractSaveEventListener.java:334) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSave(AbstractSaveEventListener.java:181) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .saveWithGeneratedOrRequestedId >>> (DefaultSaveOrUpdateEventListener.java:187) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveEventListener >>> .saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveEventListener >>> .performSaveOrUpdate(DefaultSaveEventListener.java:27) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) >>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:51) >>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >>> Exception in thread "main" org.hibernate.NonUniqueObjectException: a >>> different object with the same identifier value was already >>> associated with >>> the session: [Term#19] >>> at >>> org >>> .hibernate >>> .engine >>> .StatefulPersistenceContext >>> .checkUniqueness(StatefulPersistenceContext.java:590) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performUpdate(DefaultSaveOrUpdateEventListener.java:284) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsDetached(DefaultSaveOrUpdateEventListener.java:223) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .cascadeBeforeSave(AbstractSaveEventListener.java:431) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSaveOrReplicate(AbstractSaveEventListener.java:265) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .performSave(AbstractSaveEventListener.java:181) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractSaveEventListener >>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .saveWithGeneratedOrRequestedId >>> (DefaultSaveOrUpdateEventListener.java:187) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultSaveOrUpdateEventListener >>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>> at >>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>> 507) >>> at >>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>> at >>> org.hibernate.engine.CascadingAction >>> $5.cascade(CascadingAction.java:218) >>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at >>> org >>> .hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java: >>> 296) >>> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java: >>> 242) >>> at >>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219) >>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>> 169) >>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractFlushingEventListener >>> .cascadeOnFlush(AbstractFlushingEventListener.java:131) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractFlushingEventListener >>> .prepareEntityFlushes(AbstractFlushingEventListener.java:122) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .AbstractFlushingEventListener >>> .flushEverythingToExecutions(AbstractFlushingEventListener.java:65) >>> at >>> org >>> .hibernate >>> .event >>> .def >>> .DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java: >>> 26) >>> at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) >>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java:60) >>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:69) >>> ==================================================== >>> >>> Richard Holland wrote: >>> >>>> Forgot to copy my reply back to the lists! >>>> >>>> >>>> ---------- Forwarded message ---------- >>>> From: Richard Holland >>>> Date: 2008/5/20 >>>> Subject: Re: [BioSQL-l] Load/Update Genbank sequence issue >>>> To: gang wu >>>> >>>> >>>> You need to substitute this line: >>>> >>>> RichSequenceIterator rsi = >>>> RichSequence.IOTools.readGenbankDNA(br, new >>>> SimpleNamespace(namespace)); >>>> >>>> with this line: >>>> >>>> Namespace ns = >>>> (Namespace)RichObjectFactory.getObject(SimpleNamespace.class,new >>>> Object[]{namespace}); >>>> RichSequenceIterator rsi = >>>> RichSequence.IOTools.readGenbankDNA(br, ns); >>>> >>>> cheers, >>>> Richard >>>> >>>> PS. You're the second person who has quoted this section of code on >>>> this list recently, and had the same problem with it. If you got it >>>> from a website somewhere, could you send me the URL so I can get in >>>> touch with the authors and get them to correct it? Thanks! >>>> >>>> 2008/5/20 gang wu : >>>> >>>> >>>>> Hi all, >>>>> >>>>> I'm trying to load Genbank sequence into BioSQL database with >>>>> BioJavax/Hibernate. It's Ok to load the first sequence. Then I >>>>> got the >>>>> exception when loading new sequences or reloading the same >>>>> sequence. >>>>> Seems >>>>> the Hibernate is trying to insert "genbank" namespace again. Can >>>>> anybody >>>>> tell me what I did wrong? Thanks in advance. >>>>> >>>>> Gang >>>>> >>>>> ================================================================ >>>>> public class SequenceLoaderNew { >>>>> public void loadSeq(String fileName, String namespace) throws >>>>> FileNotFoundException, BioException { >>>>> System.out.println("Start loading file " + fileName + " at " + >>>>> System.currentTimeMillis()); >>>>> BufferedReader br = new BufferedReader(new >>>>> FileReader(fileName)); >>>>> Session session = new >>>>> Configuration().configure().buildSessionFactory().openSession(); >>>>> RichObjectFactory.connectToBioSQL(session); >>>>> RichSequenceDB db = new BioSQLRichSequenceDB(session); >>>>> RichSequenceIterator rsi = >>>>> RichSequence.IOTools.readGenbankDNA(br, >>>>> new >>>>> SimpleNamespace(namespace)); >>>>> while (rsi.hasNext()) { >>>>> Transaction tx = session.beginTransaction(); >>>>> RichSequence sequence = rsi.nextRichSequence(); >>>>> System.out.println("Loaded sequence" + >>>>> sequence.getAccession() + >>>>> ", identifier: " + sequence.getIdentifier()); >>>>> try { >>>>> System.out.println("Delete sequence" + >>>>> sequence.getAccession() >>>>> + " if exists."); >>>>> db.removeSequence(sequence.getAccession()); >>>>> } catch (Exception ex) { >>>>> } >>>>> try { >>>>> System.out.println("Save sequence " + >>>>> sequence.getAccession()); >>>>> session.save("BioEntry", sequence); >>>>> tx.commit(); >>>>> session.flush(); >>>>> session.clear(); >>>>> } catch (HibernateException ex) { >>>>> tx.rollback(); >>>>> ex.printStackTrace(); >>>>> } >>>>> } >>>>> } >>>>> >>>>> public static void main(String[] args) throws BioException, >>>>> FileNotFoundException { >>>>> SequenceLoaderNew sl = new SequenceLoaderNew(); >>>>> //sl.loadSeq("/genomeseq/bacteria/NC_005813.gbk", "genbank"); >>>>> sl.loadSeq("/genomeseq/bacteria/NC_004349.gbk", "genbank"); >>>>> } >>>>> } >>>>> ================================================================ >>>>> org.hibernate.exception.ConstraintViolationException: could not >>>>> insert: >>>>> [Namespace] >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .exception.SQLStateConverter.convert(SQLStateConverter.java:71) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java: >>>>> 43) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .id >>>>> .insert >>>>> .AbstractReturningDelegate >>>>> .performInsert(AbstractReturningDelegate.java:40) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .persister >>>>> .entity >>>>> .AbstractEntityPersister.insert(AbstractEntityPersister.java:2163) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .persister >>>>> .entity >>>>> .AbstractEntityPersister.insert(AbstractEntityPersister.java:2643) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .action >>>>> .EntityIdentityInsertAction >>>>> .execute(EntityIdentityInsertAction.java:51) >>>>> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java: >>>>> 279) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSaveOrReplicate(AbstractSaveEventListener.java:298) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSave(AbstractSaveEventListener.java:181) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .saveWithGeneratedOrRequestedId >>>>> (DefaultSaveOrUpdateEventListener.java:187) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>>> at >>>>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java: >>>>> 507) >>>>> at >>>>> org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) >>>>> at >>>>> org.hibernate.engine.CascadingAction >>>>> $5.cascade(CascadingAction.java:218) >>>>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268) >>>>> at >>>>> org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216) >>>>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java: >>>>> 169) >>>>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .cascadeBeforeSave(AbstractSaveEventListener.java:431) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSaveOrReplicate(AbstractSaveEventListener.java:265) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .performSave(AbstractSaveEventListener.java:181) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .AbstractSaveEventListener >>>>> .saveWithGeneratedId(AbstractSaveEventListener.java:107) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .saveWithGeneratedOrRequestedId >>>>> (DefaultSaveOrUpdateEventListener.java:187) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveEventListener >>>>> .saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveEventListener >>>>> .performSaveOrUpdate(DefaultSaveEventListener.java:27) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .event >>>>> .def >>>>> .DefaultSaveOrUpdateEventListener >>>>> .onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) >>>>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java: >>>>> 535) >>>>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) >>>>> at primerdb.SequenceLoaderNew.loadSeq(SequenceLoaderNew.java: >>>>> 38) >>>>> at primerdb.SequenceLoaderNew.main(SequenceLoaderNew.java:52) >>>>> Caused by: >>>>> com >>>>> .mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: >>>>> Duplicate entry 'genbank' for key 'name' >>>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java: >>>>> 1011) >>>>> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java: >>>>> 956) >>>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) >>>>> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) >>>>> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) >>>>> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) >>>>> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java: >>>>> 2542) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeInternal(PreparedStatement.java: >>>>> 1734) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) >>>>> at >>>>> >>>>> com >>>>> .mysql >>>>> .jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) >>>>> at >>>>> >>>>> org.hibernate.id.IdentityGenerator >>>>> $ >>>>> GetGeneratedKeysDelegate >>>>> .executeAndExtract(IdentityGenerator.java:73) >>>>> at >>>>> >>>>> org >>>>> .hibernate >>>>> .id >>>>> .insert >>>>> .AbstractReturningDelegate >>>>> .performInsert(AbstractReturningDelegate.java:33) >>>>> ... 31 more >>>>> ================================================================ >>>>> >>>>> _______________________________________________ >>>>> BioSQL-l mailing list >>>>> BioSQL-l at lists.open-bio.org >>>>> http://lists.open-bio.org/mailman/listinfo/biosql-l >>>>> >>>>> >>>>> >>> > > _______________________________________________ > BioSQL-l mailing list > BioSQL-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biosql-l > From dicknetherlands at gmail.com Thu May 22 21:07:23 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Thu, 22 May 2008 22:07:23 +0100 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: <4835DAAE.6080609@molbio.mgh.harvard.edu> References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> <48346EE1.70004@unity.ncsu.edu> <4835DAAE.6080609@molbio.mgh.harvard.edu> Message-ID: Interesting stuff. Have you tried parsing those Arabidopsis files without persisting them? i.e. just running them through the parser without attaching anything to Hibernate. I'm wondering how much of the slowness is Hibernate, and how much is BioJava's own object model. cheers, Richard 2008/5/22 gang wu : > Hi Doug and Richard, > > Thanks for your reply. I've been following your suggestions and finding a > way that works for me. Basically, if there is anything in the code that > flush/clear the session, it's going to be a problem for the following calls > to the same method. I'm not sure if it's Hibernate bug or is like Richard > suggested that it is a feature. Attached is the code I am using to > load/update Genbank sequences. It could be easily generalized to load other > sequences(if the process works). > > Seems it works for me now(still running test on bigger sequences). It's > pretty fast to load those small bacteria sequences, usually 10-60 seconds. > But it seems it's getting choked with the bigger sequences. I started it > last night at about 11pm to load the 5 Arabidopsis thaliana genome > sequences(about 280MB total). The first one finished in about 1.5 hours and > it's stilling hanging there now on the second sequence. I saw a 100% CPU > usage and 2.6GB memory assigned for the program. The MySQL server is running > on the same server. The machine has 8GB RAM and 2 dual core exon CPUS > running at 3.73GHZ. > > Doug, I tested your code and seems the output is not always consistent: I > tried to load two sequences. Sometimes succeeded and sometimes failed. I > wonder it's still the session issue. I did not try with removing those > flush/clear code. > > Thanks again for your response. It really helps me out. I'll post my code > here if I work out a better solution. > > Gang > > Doug Brown wrote: > > Hi Gang wu, > > I recognize your problem. I to had to build a loader for genbank flat > files. When attempting to 'replace' a record stored in the database, one > needs to explicitly delete it before doing the save. I found that the > hibernate code does not seem to understand that an in-memory deletion should > be realized in the data base prior to the new insertion. My solution, see > attached code, was to commit the transaction for the deletion and then open > a new transaction for the insertion. > > Try inserting the following after "System.out.println("Loaded sequence"": > > // delete any extant sequence from the database. The cascaded > // constraints will result in removal of all associated features > // and what-not. > Query q = session.createQuery( "from BioEntry as s where s.name = > :acc"); > q.setString( "acc", sequence.getAccession()); > BioEntry be = (BioEntry)q.uniqueResult(); > if ( be != null) > { > // Interestingly, hibernate does not seem to do transactions in the > // same sense that a database would. Thus, I need to commit the > // delete operation before I attempt to insert the replacement > // information. > session.delete( be); > tx.commit(); > tx = session.beginTransaction(); > } > > > Regards, > Doug > > gang wu wrote: > > I got another problem with almost the same code(see attached code and > output). If I call the loadSeq() only once, everything works fine. The > second call of the same method will fail. By the exception message, it looks > like the session is not cleaned up yet though at the end of the method the > session has been flush/clear/closed. Anything wrong? > > ________________________________ > // Copyright 2008, by North Carolina State University. All rights reserved. > > /** > * > * javac -cp > "C:\WorkData\javaCode\;C:\JavaDev\biojava-live\biojava-live.jar;C:\jars\hibernate3.jar;C:\jars\mysql-connector-java-3.1.13-bin.jar" > bioinformatics\biojava\BriefLoader.java > * > * java -Xmx100m -cp > "c:\jars\asm.jar;c:\jars\asm-attrs.jar;c:\jars\cglib-2.1.3.jar;c:\jars\jta.jar;c:\jars\antlr-2.7.6.jar;c:\jars\commons-collections-2.1.1.jar;c:\jars\commons-logging-1.0.4.jar;c:\jars\dom4j-1.6.1.jar;C:\WorkData\javaCode\;C:\JavaDev\biojava-live\biojava-live.jar;C:\jars\hibernate3.jar;C:\jars\mysql-connector-java-3.1.13-bin.jar" > -Djdbc.drivers=com.mysql.jdbc.Driver bioinformatics.biojava.BriefLoader > C:\WorkData\genomes\M_grisea_genbank_v5\CH476760.gb > */ > package bioinformatics.biojavaTools; > > import java.io.BufferedReader; > import java.io.File; > import java.io.FileNotFoundException; > import java.io.FileReader; > import java.io.IOException; > > import org.biojava.bio.BioException; > import org.biojavax.*; > import org.biojavax.RichObjectFactory; > import org.biojavax.bio.db.biosql.BioSQLRichSequenceDB; > import org.biojavax.bio.seq.*; > import org.biojavax.bio.seq.RichSequence.*; > import org.biojavax.bio.seq.RichSequence.IOTools; > import org.biojavax.bio.seq.io.*; > import org.biojavax.bio.BioEntry; > > import org.hibernate.*; > import org.hibernate.cfg.*; > > //import java.util.logging.*; > //import org.apache.commons.logging.*; > > > > > public class BriefLoader > { > static SessionFactory sessionFactory; > static boolean verbose = false; > public static void main(String[] args) > { > int argPos = 0; > if ( args.length > 0 && args[argPos].equals( "-v")) > { > verbose = true; > argPos++; > } > if ( argPos == args.length) > { > System.out.println( "Usage: BriefLoader [-v] file1.bg [file2.gb > ...]"); > return; > } > > BriefLoader bf = new BriefLoader(); > > // logging: > // I want to suppress the verbose info messages. > // After some investigation, it seems that commons > // logging uses a default of Jdk14Logger (the standard java logger). > // Thus, I can control the commons logger via the java.util.logging API. > // API > java.util.logging.Logger jdklogger = > java.util.logging.Logger.getLogger("org.hibernate"); > jdklogger.setLevel(java.util.logging.Level.WARNING); > > sessionFactory = new > // Configuration is very expensive and can only be done once. > // > // properties can be specified via the file hibernate.properties located > // on the classpath, > // on the command line via -D, > // via the defaut "hibernate.cfg.xml" file in the current working > directory, > // via an explicitly identified file, e.g. "specific_file.cfg.xml", > // via explicit calls to setProperty. The same goes for resources. > // Later definitions override earlier ones. > Configuration() > // Note: > // specifying the resource location of the configuration file > // works ONLY if I also modify the > // hibernate.cfg.xml file to add the class' package as a prefix > // for every resource. Hibernate does not understand the > // concept of relative locations based on the location of the > // configuratin file. Nonetheless, this allows me to organize the > // mapping files based on java packages. > .configure( bf.getClass().getResource( "hibernate.cfg.xml")) > // the following should allows use of a generic configuration file > // by overriding the items that need to be customized. > //.setProperty( "connection.url", > "jdbc:mysql://someMachine.ncsu.edu:3306/M_grisea_genbank_biosql") > //.setProperty( "connection.username", "aUser") > //.setProperty( "connection.password", "aPassword") > // > // The following can be used to adjust memory consumption. > //.setProperty( "hibernate.jdbc.batch_size", "20") > //.setProperty( "hibernate.cache.use_second_level_cache", "false") > // > // examining the generated SQL can be informative... > //.setProperty( "hibernate.show_sql", "true") > > // Go and make the support interfaces... > .buildSessionFactory(); > > Session session = null; > try > { > session = bf.doSessionFactoryBindings( sessionFactory); > > while ( argPos < args.length) > { > File f = new File( args[argPos++]); > > // handle one level of directories > if ( f.isDirectory()) > { > File contents[] = f.listFiles(); > for ( int j=contents.length-1;j>=0;j--) > bf.loadNSave( session, contents[j]); > } > > bf.loadNSave( session, f); > } > } > finally > { > if ( session != null) > { > session.flush(); // force in-memory to disk. > session.close(); // only for local sessions > } > } > } > > /** > * The session is the primary interaction layer between Hibernate and > * the underlying database. Closely allied with that is a suite of > * Biojavax classes handling the load and save operations. These classes > * are coordinated throught the RichObjectFactory. Thus, correctly > * setting up and using the factory for all object operations is > * critical! > */ > Session doSessionFactoryBindings( SessionFactory sessionFactory) > { > if ( verbose) System.out.println( "doing bindings."); > // open a session before processing the files. This allows the > // session to survive across the multiple transactions. And, hopefully, > // to provide level-2 caching services for the objects.... > // Contrast with getCurrentSession wich only survives for the current > // transaction. > Session session = sessionFactory.openSession(); > > // Change DefaultNamespaceName binding from "biojavax" > RichObjectFactory.setDefaultNamespaceName( "genbankBiosqlRich"); > > // Change DefaultOntologyName binding from "lcl". Hopefully, this will > // map the genbank annotation information into the SO term space. This > // works for some, but not all features. Those which donto map are > // flagged as "auto-generated by biojavax". > // nota bene: may be dangerous if semantics are not exactly the same! > // examination of the SO mapping indicated that were the terms align, > the > // semantics also align. > // Benefit is that semantic queries can be performed on the loaded info. > RichObjectFactory.setDefaultOntologyName( "sequence"); //"SO" ); > > > // Hook to BiojavaX and BioSQL. This sets up the proper conditions for > // transparently hooking to the database and supplying objects from > // that db if they exist within it. This is accomplished via hooking the > // Builder, Resolver, and Handler to BioSQL implementations. > // Establishes standard bindings for: > // RichObjectBuilder, > // DefaultCrossReferenceResolver, > // DefaultRichSequenceHandler. > // nb: PositionResolver is left as new AverageResolver(); > RichObjectFactory.connectToBioSQL(session); > > // also grab a reference to the underlying database (so that I can use > // the convenience wrapper methods for delting entries). > //db = new BioSQLRichSequenceDB( session); // create the > RichSequenceDB wrapper around the Hibernate session > > return session; > } > > /** > * This works for genbank files containing multiple sequences. > * Originaly concept from: > http://portal.open-bio.org/pipermail/biojava-l/2007-April/005824.html > * It fails on inserting existant record(s) - does not replace... > * This causes grief when loading multiple files... > */ > public void loadNSave( Session session, File fileName) > { > boolean localSession = (session == null); > Transaction tx = null; > // ensure that an acceptable session configuration exists. > if ( session == null) throw new Error( "session object not > established"); > > // Note the retrieval of namespace VIA the factory. The interface > // documentation did not make clear the requirement to use the > // established 'singleton' object (via getDefaultNamespace or > equivalent). > // The underlying hibernate code does not attempt to automatically > ensure > // the uniqueness (singleton) by attempting a load of any instances. > // Failure to use the factory will result in attempts to create a > // duplicate namespace in the database. > org.biojavax.Namespace ns = RichObjectFactory.getDefaultNamespace(); > > try > { > if ( verbose) System.out.println( "*********** Loading > "+fileName+"..."); > BufferedReader br = new BufferedReader( new FileReader( fileName) ); > > // readGenbankDNA loads the objects from the stream and uses the > // established factory(ies) and defaults for object creation. > if ( verbose) System.out.println( "*********** readGenbankDNA..."); > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA( br, > ns); > > while ( rsi.hasNext() ) // for each sequence in the file... > { > if ( verbose) System.out.println( "*********** start transaction."); > // Hibernate seems to REQUIRE transactions when objects are > modified. > tx = session.beginTransaction(); > > if ( verbose) System.out.println( "*********** Loading next > sequence..."); > RichSequence sequence = rsi.nextRichSequence(); > System.out.println( "loaded sequence "+sequence.getAccession()+ > ", identifier: "+ sequence.getIdentifier()); > > // delete any extant sequence from the database. The cascaded > // constraints will result in removal of all associated features > // and what-not. > Query q = session.createQuery( "from BioEntry as s where s.name = > :acc"); > q.setString( "acc", sequence.getAccession()); > BioEntry be = (BioEntry)q.uniqueResult(); > if ( be != null) > { > if ( verbose) System.out.println( "*********** DELETING extant > sequence..."); > // Interesintly, hibernate does not seem to do transactions in the > // same sense that a database would. Thus, I need to commit the > // delete operation before I attempt to insert the replacement > // information. > session.delete( be); > tx.commit(); > tx = session.beginTransaction(); > } > > try > { > // Loading entire genomes from genbank consumes large amounts > // of memory. Thus, each sequence and its associated > // annotations are wrapped in a transaction, the transaction > saved, > // and the in-memory cache is cleared. While being somewhat > // inefficient, this approach does limit memory consumption. > if ( verbose) System.out.println( "*********** saving..."); > > // synchronize in-memory representation w/ the database > session.saveOrUpdate( "Sequence", sequence ); > if ( verbose) System.out.println( "*********** comitting..."); > tx.commit(); // save to database - does an automatic flush > // batch operations overwhelm the hibernate cache - clear it out! > if ( verbose) System.out.println( "*********** flushing..."); > session.flush(); // force in-memory to disk. > if ( verbose) System.out.println( "*********** clearing..."); > session.clear(); // clean out cache. > } > catch (HibernateException ex) > { > tx.rollback(); // discard the sequence and all its annotations > ex.printStackTrace(); > } > } > } > catch (FileNotFoundException ex) > { > ex.printStackTrace(); > } > catch ( BioException bex) > { > bex.printStackTrace(); > } > } > > } > > > > package primerdb; > > import java.io.BufferedReader; > import java.io.File; > import java.io.FileFilter; > import java.io.FileNotFoundException; > import java.io.FileReader; > import java.io.IOException; > import java.sql.SQLException; > import java.util.ArrayList; > import org.biojava.bio.BioException; > import org.biojavax.Namespace; > import org.biojavax.RichObjectFactory; > import org.biojavax.SimpleNamespace; > import org.biojavax.bio.BioEntry; > import org.biojavax.bio.db.RichSequenceDB; > import org.biojavax.bio.db.biosql.BioSQLRichSequenceDB; > import org.biojavax.bio.seq.RichSequence; > import org.biojavax.bio.seq.RichSequenceIterator; > import org.hibernate.HibernateException; > import org.hibernate.Query; > import org.hibernate.Session; > import org.hibernate.SessionFactory; > import org.hibernate.Transaction; > import org.hibernate.cfg.Configuration; > > public class SequenceLoaderNew { > > private SessionFactory sessionFactory; > private Session session = null; > > private void initSession() { > sessionFactory = new > Configuration().configure().buildSessionFactory(); > session = sessionFactory.openSession(); > RichObjectFactory.connectToBioSQL(session); > } > > public static ArrayList getFiles(File filePath) { > FileFilter fileFilter = new FileFilter() { > > public boolean accept(File pathname) { > return pathname.isFile(); > } > }; > return getFiles(filePath, fileFilter); > } > > public static ArrayList getFiles(File filePath, FileFilter fileFilter) { > ArrayList rtn = new ArrayList(); > if (filePath.isFile()) { > if (fileFilter.accept(filePath)) { > rtn.add(filePath); > } > } else if (filePath.isDirectory()) { > File[] flist = filePath.listFiles(); > for (int i = 0; i < flist.length; i++) { > ArrayList subRtn = getFiles(flist[i], fileFilter); > for (int k = 0; k < subRtn.size(); k++) { > rtn.add(subRtn.get(k)); > } > } > } > return rtn; > } > > public void loadGenbankSeq(String[] filePaths, String namespace) throws > FileNotFoundException, BioException, SQLException, InterruptedException, > IOException { > File[] files = new File[filePaths.length]; > for (int i = 0; i < filePaths.length; i++) { > files[i] = new File(filePaths[i]); > } > loadGenbankSeq(files, namespace); > } > > public void loadGenbankSeq(File[] files, String namespace) throws > FileNotFoundException, BioException, SQLException, InterruptedException, > IOException { > if (session == null) { > initSession(); > } > Namespace ns = (Namespace) > RichObjectFactory.getObject(SimpleNamespace.class, new Object[]{namespace}); > RichSequenceDB db = new BioSQLRichSequenceDB(session); > for (int i = 0; i < files.length; i++) { > File file = files[i]; > System.out.println("Start loading file " + file.getAbsolutePath() > + " at " + System.currentTimeMillis()); > BufferedReader br = new BufferedReader(new FileReader(file)); > RichSequenceIterator rsi = > RichSequence.IOTools.readGenbankDNA(br, ns); > try { > while (rsi.hasNext()) { > Transaction tx = session.beginTransaction(); > try { > RichSequence sequence = rsi.nextRichSequence(); > System.out.println("Loaded sequence" + > sequence.getAccession() + ", identifier: " + sequence.getIdentifier()); > Query q = session.createQuery("from BioEntry as s > where s.name = :acc"); > q.setString("acc", sequence.getAccession()); > BioEntry be = (BioEntry) q.uniqueResult(); > if (be != null) { > session.delete(be); > tx.commit(); > tx = session.beginTransaction(); > } > System.out.println("Save sequence " + > sequence.getAccession()); > session.saveOrUpdate("Sequence", sequence); > tx.commit(); > System.out.println("Finished savig sequence " + > sequence.getAccession() + "\n"); > } catch (HibernateException ex) { > tx.rollback(); > ex.printStackTrace(); > } > } > } finally { > //session.flush(); > //RichObjectFactory.clearLRUCache(); > //session.clear(); > } > br.close(); > } > } > > public static void main(String[] args) throws BioException, > FileNotFoundException, InterruptedException, SQLException, IOException { > SequenceLoaderNew sl = new SequenceLoaderNew(); > FileFilter ff = new FileFilter() { > public boolean accept(File pathname) { > return pathname.isFile() && > (pathname.getName().toLowerCase().endsWith("gbk") || > pathname.getName().toLowerCase().endsWith("gb")); > } > }; > ArrayList flist = SequenceLoaderNew.getFiles(new > File("/genomeseq/bacteria"), ff); > File[] files = new File[flist.size()]; > for (int i = 0; i < flist.size(); i++) { > files[i] = (File) flist.get(i); > } > for (int i = 0; i < files.length; i++) { > System.out.println(files[i].getAbsolutePath() + ", size: " + > files[i].length()); > } > sl.loadGenbankSeq(files, "genbank"); > } > } > > From hemant_katta at yahoo.co.in Fri May 23 09:16:19 2008 From: hemant_katta at yahoo.co.in (HEMANT KATTA) Date: Fri, 23 May 2008 14:46:19 +0530 (IST) Subject: [Biojava-l] (no subject) Message-ID: <594536.37688.qm@web8317.mail.in.yahoo.com> sir, i m new in biojava. can any one tell what actually Distribution class does. with regards Hemant Best Jokes, Best Friends, Best Food and more. Go to http://in.promos.yahoo.com/groups/bestofyahoo/ From markjschreiber at gmail.com Fri May 23 11:26:51 2008 From: markjschreiber at gmail.com (Mark Schreiber) Date: Fri, 23 May 2008 19:26:51 +0800 Subject: [Biojava-l] (no subject) In-Reply-To: <594536.37688.qm@web8317.mail.in.yahoo.com> References: <594536.37688.qm@web8317.mail.in.yahoo.com> Message-ID: <93b45ca50805230426q463a9c91pa590ad3c4755e89d@mail.gmail.com> The Distribution classes hold the frequency of observed symbols. You can use them for example to store the frequency of ACGT in a sequence. Take a look at http://biojava.org/wiki/BioJava:CookBook#Counts_and_Distributions - Mark On Fri, May 23, 2008 at 5:16 PM, HEMANT KATTA wrote: > sir, i m new in biojava. can any one tell what actually Distribution > class does. > > with regards > Hemant > > > Best Jokes, Best Friends, Best Food and more. Go to > http://in.promos.yahoo.com/groups/bestofyahoo/ > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From gabrielle_doan at gmx.net Wed May 28 12:21:19 2008 From: gabrielle_doan at gmx.net (Gabrielle Doan) Date: Wed, 28 May 2008 14:21:19 +0200 Subject: [Biojava-l] How to query 'value' in 'seqfeature_qualifier_value' using HQL Message-ID: <483D4E3F.2080207@gmx.net> Hi all, I am a newbie to BioJava so sorry if questions are too simple! I started working on BioJava and BioSQL using Hibernate and BioJavaX and met the following problem: I would like to query the property 'value' in 'seqfeature_qualifier_value' using HQL but don't have a clue how to do that. I have found at the BiojavaX Documentation the Hibernate object-relational mappings. At the table you can see that the BioSQL table 'seqfeature_qualifier_value' is mapped to the HQL name 'Feature'. That means if I want to get the 'seqfeature_qualifier_value' I have to use the properties of Features. I had a look at the xml mapping files, but unfortunately I could not find a solution for my problem. It would be very nice if there was a table in which I could see the properties of all HQL names so that I could see which properties I can actually query for. In BioSQL I can simply see the table's definition and know all such properties. The designated XML files are not very helpful to understand the mapping between BioSQL and HQL. I am grateful for any hints, which explain the properties of these HQL object names. Cheers, Gabrielle Doan From dicknetherlands at gmail.com Wed May 28 13:57:47 2008 From: dicknetherlands at gmail.com (Richard Holland) Date: Wed, 28 May 2008 14:57:47 +0100 Subject: [Biojava-l] Fwd: How to query 'value' in 'seqfeature_qualifier_value' using HQL In-Reply-To: References: <483D4E3F.2080207@gmx.net> Message-ID: Forwarding this response to the list - i keep forgetting to hit reply-all instead of reply... ---------- Forwarded message ---------- From: Richard Holland Date: 2008/5/28 Subject: Re: [Biojava-l] How to query 'value' in 'seqfeature_qualifier_value' using HQL To: Gabrielle Doan Hello. I think you want a query like this: select feature.noteSet.note.value from Feature feature; This is because Feature.xml has a collection of annotations, called noteSet, which map to seqfeature_qualifier_value, which is the table you are looking for. That collection consists of a number of entries, each of which is a SimpleNote object called 'note' in the XML. Within that you can see a property called 'value'. If it doesn't work (I can't test it right now), some permutation of the above will (try removing either noteSet or note). See http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html for explanations on the select syntax. In terms of lookup tables, yes it would be great if someone could update the existing ones to also list out property names. Haven't got time myself at present but if there are volunteers they would be greatly appreciated. cheers, Richard 2008/5/28 Gabrielle Doan : > Hi all, > > I am a newbie to BioJava so sorry if questions are too simple! I started > working on BioJava and BioSQL using Hibernate and BioJavaX and met the > following problem: > > I would like to query the property 'value' in 'seqfeature_qualifier_value' > using HQL but don't have a clue how to do that. > I have found at the BiojavaX Documentation the Hibernate > object-relational mappings. At the table you can see that the BioSQL table > 'seqfeature_qualifier_value' is mapped to the HQL name 'Feature'. That means > if I want to get the 'seqfeature_qualifier_value' I have to use the > properties of Features. > I had a look at the xml mapping files, but unfortunately I could not find a > solution for my problem. > > It would be very nice if there was a table in which I could see the > properties of all HQL names so that I could see which properties I can > actually query for. In BioSQL I can simply see the table's definition and > know all such properties. The designated XML files are not very helpful to > understand the mapping between BioSQL and HQL. > I am grateful for any hints, which explain the properties of these HQL > object names. > > Cheers, > > Gabrielle Doan > > _______________________________________________ > Biojava-l mailing list - Biojava-l at lists.open-bio.org > http://lists.open-bio.org/mailman/listinfo/biojava-l > From armita_sh at yahoo.com Tue May 13 18:00:19 2008 From: armita_sh at yahoo.com (Armita Sheari) Date: Tue, 13 May 2008 18:00:19 -0000 Subject: [Biojava-l] Constructing Backbone of Protein Message-ID: <165609.65933.qm@web51412.mail.re2.yahoo.com> An HTML attachment was scrubbed... URL: From debrown at unity.ncsu.edu Wed May 21 18:57:38 2008 From: debrown at unity.ncsu.edu (Doug Brown) Date: Wed, 21 May 2008 18:57:38 -0000 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: <4833C100.7040304@molbio.mgh.harvard.edu> References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> Message-ID: <48346EE1.70004@unity.ncsu.edu> Hi Gang wu, I recognize your problem. I to had to build a loader for genbank flat files. When attempting to 'replace' a record stored in the database, one needs to explicitly delete it before doing the save. I found that the hibernate code does not seem to understand that an in-memory deletion should be realized in the data base prior to the new insertion. My solution, see attached code, was to commit the transaction for the deletion and then open a new transaction for the insertion. Try inserting the following after "System.out.println("Loaded sequence"": // delete any extant sequence from the database. The cascaded // constraints will result in removal of all associated features // and what-not. Query q = session.createQuery( "from BioEntry as s where s.name = :acc"); q.setString( "acc", sequence.getAccession()); BioEntry be = (BioEntry)q.uniqueResult(); if ( be != null) { // Interestingly, hibernate does not seem to do transactions in the // same sense that a database would. Thus, I need to commit the // delete operation before I attempt to insert the replacement // information. session.delete( be); tx.commit(); tx = session.beginTransaction(); } Regards, Doug gang wu wrote: > I got another problem with almost the same code(see attached code and > output). If I call the loadSeq() only once, everything works fine. The > second call of the same method will fail. By the exception message, it > looks like the session is not cleaned up yet though at the end of the > method the session has been flush/clear/closed. Anything wrong? -- Doug Brown - Bioinformatics Fungal Genomics Laboratory Center for Integrated Fungal Research North Carolina State University Campus Box 7251, Raleigh, NC 27695-7251 https://www.fungalgenomics.ncsu.edu/~debrown/ Tel: (919) 513-0394, Fax (919) 513-0024 e-mail: doug_brown AtSign ncsu.edu -------------- next part -------------- A non-text attachment was scrubbed... Name: BriefLoader.java Type: text/x-java Size: 11672 bytes Desc: not available URL: From gwu at molbio.mgh.harvard.edu Thu May 22 20:42:45 2008 From: gwu at molbio.mgh.harvard.edu (gang wu) Date: Thu, 22 May 2008 20:42:45 -0000 Subject: [Biojava-l] [BioSQL-l] Load/Update Genbank sequence issue In-Reply-To: <48346EE1.70004@unity.ncsu.edu> References: <48331277.7060105@molbio.mgh.harvard.edu> <4833C100.7040304@molbio.mgh.harvard.edu> <48346EE1.70004@unity.ncsu.edu> Message-ID: <4835DAAE.6080609@molbio.mgh.harvard.edu> Hi Doug and Richard, Thanks for your reply. I've been following your suggestions and finding a way that works for me. Basically, if there is anything in the code that flush/clear the session, it's going to be a problem for the following calls to the same method. I'm not sure if it's Hibernate bug or is like Richard suggested that it is a feature. Attached is the code I am using to load/update Genbank sequences. It could be easily generalized to load other sequences(if the process works). Seems it works for me now(still running test on bigger sequences). It's pretty fast to load those small bacteria sequences, usually 10-60 seconds. But it seems it's getting choked with the bigger sequences. I started it last night at about 11pm to load the 5 Arabidopsis thaliana genome sequences(about 280MB total). The first one finished in about 1.5 hours and it's stilling hanging there now on the second sequence. I saw a 100% CPU usage and 2.6GB memory assigned for the program. The MySQL server is running on the same server. The machine has 8GB RAM and 2 dual core exon CPUS running at 3.73GHZ. Doug, I tested your code and seems the output is not always consistent: I tried to load two sequences. Sometimes succeeded and sometimes failed. I wonder it's still the session issue. I did not try with removing those flush/clear code. Thanks again for your response. It really helps me out. I'll post my code here if I work out a better solution. Gang Doug Brown wrote: > Hi Gang wu, > > I recognize your problem. I to had to build a loader for genbank flat > files. When attempting to 'replace' a record stored in the database, > one needs to explicitly delete it before doing the save. I found that > the hibernate code does not seem to understand that an in-memory > deletion should be realized in the data base prior to the new > insertion. My solution, see attached code, was to commit the > transaction for the deletion and then open a new transaction for the > insertion. > > Try inserting the following after "System.out.println("Loaded sequence"": > > // delete any extant sequence from the database. The cascaded > // constraints will result in removal of all associated features > // and what-not. > Query q = session.createQuery( "from BioEntry as s where s.name > = :acc"); > q.setString( "acc", sequence.getAccession()); > BioEntry be = (BioEntry)q.uniqueResult(); > if ( be != null) > { > // Interestingly, hibernate does not seem to do transactions > in the > // same sense that a database would. Thus, I need to commit the > // delete operation before I attempt to insert the replacement > // information. > session.delete( be); > tx.commit(); > tx = session.beginTransaction(); > } > > > Regards, > Doug > > gang wu wrote: >> I got another problem with almost the same code(see attached code and >> output). If I call the loadSeq() only once, everything works fine. >> The second call of the same method will fail. By the exception >> message, it looks like the session is not cleaned up yet though at >> the end of the method the session has been flush/clear/closed. >> Anything wrong? > > ------------------------------------------------------------------------ > > // Copyright 2008, by North Carolina State University. All rights reserved. > > /** > * > * javac -cp "C:\WorkData\javaCode\;C:\JavaDev\biojava-live\biojava-live.jar;C:\jars\hibernate3.jar;C:\jars\mysql-connector-java-3.1.13-bin.jar" bioinformatics\biojava\BriefLoader.java > * > * java -Xmx100m -cp "c:\jars\asm.jar;c:\jars\asm-attrs.jar;c:\jars\cglib-2.1.3.jar;c:\jars\jta.jar;c:\jars\antlr-2.7.6.jar;c:\jars\commons-collections-2.1.1.jar;c:\jars\commons-logging-1.0.4.jar;c:\jars\dom4j-1.6.1.jar;C:\WorkData\javaCode\;C:\JavaDev\biojava-live\biojava-live.jar;C:\jars\hibernate3.jar;C:\jars\mysql-connector-java-3.1.13-bin.jar" -Djdbc.drivers=com.mysql.jdbc.Driver bioinformatics.biojava.BriefLoader C:\WorkData\genomes\M_grisea_genbank_v5\CH476760.gb > */ > package bioinformatics.biojavaTools; > > import java.io.BufferedReader; > import java.io.File; > import java.io.FileNotFoundException; > import java.io.FileReader; > import java.io.IOException; > > import org.biojava.bio.BioException; > import org.biojavax.*; > import org.biojavax.RichObjectFactory; > import org.biojavax.bio.db.biosql.BioSQLRichSequenceDB; > import org.biojavax.bio.seq.*; > import org.biojavax.bio.seq.RichSequence.*; > import org.biojavax.bio.seq.RichSequence.IOTools; > import org.biojavax.bio.seq.io.*; > import org.biojavax.bio.BioEntry; > > import org.hibernate.*; > import org.hibernate.cfg.*; > > //import java.util.logging.*; > //import org.apache.commons.logging.*; > > > > > public class BriefLoader > { > static SessionFactory sessionFactory; > static boolean verbose = false; > public static void main(String[] args) > { > int argPos = 0; > if ( args.length > 0 && args[argPos].equals( "-v")) > { > verbose = true; > argPos++; > } > if ( argPos == args.length) > { > System.out.println( "Usage: BriefLoader [-v] file1.bg [file2.gb ...]"); > return; > } > > BriefLoader bf = new BriefLoader(); > > // logging: > // I want to suppress the verbose info messages. > // After some investigation, it seems that commons > // logging uses a default of Jdk14Logger (the standard java logger). > // Thus, I can control the commons logger via the java.util.logging API. > // API > java.util.logging.Logger jdklogger = java.util.logging.Logger.getLogger("org.hibernate"); > jdklogger.setLevel(java.util.logging.Level.WARNING); > > sessionFactory = new > // Configuration is very expensive and can only be done once. > // > // properties can be specified via the file hibernate.properties located > // on the classpath, > // on the command line via -D, > // via the defaut "hibernate.cfg.xml" file in the current working directory, > // via an explicitly identified file, e.g. "specific_file.cfg.xml", > // via explicit calls to setProperty. The same goes for resources. > // Later definitions override earlier ones. > Configuration() > // Note: > // specifying the resource location of the configuration file > // works ONLY if I also modify the > // hibernate.cfg.xml file to add the class' package as a prefix > // for every resource. Hibernate does not understand the > // concept of relative locations based on the location of the > // configuratin file. Nonetheless, this allows me to organize the > // mapping files based on java packages. > .configure( bf.getClass().getResource( "hibernate.cfg.xml")) > // the following should allows use of a generic configuration file > // by overriding the items that need to be customized. > //.setProperty( "connection.url", "jdbc:mysql://someMachine.ncsu.edu:3306/M_grisea_genbank_biosql") > //.setProperty( "connection.username", "aUser") > //.setProperty( "connection.password", "aPassword") > // > // The following can be used to adjust memory consumption. > //.setProperty( "hibernate.jdbc.batch_size", "20") > //.setProperty( "hibernate.cache.use_second_level_cache", "false") > // > // examining the generated SQL can be informative... > //.setProperty( "hibernate.show_sql", "true") > > // Go and make the support interfaces... > .buildSessionFactory(); > > Session session = null; > try > { > session = bf.doSessionFactoryBindings( sessionFactory); > > while ( argPos < args.length) > { > File f = new File( args[argPos++]); > > // handle one level of directories > if ( f.isDirectory()) > { > File contents[] = f.listFiles(); > for ( int j=contents.length-1;j>=0;j--) > bf.loadNSave( session, contents[j]); > } > > bf.loadNSave( session, f); > } > } > finally > { > if ( session != null) > { > session.flush(); // force in-memory to disk. > session.close(); // only for local sessions > } > } > } > > /** > * The session is the primary interaction layer between Hibernate and > * the underlying database. Closely allied with that is a suite of > * Biojavax classes handling the load and save operations. These classes > * are coordinated throught the RichObjectFactory. Thus, correctly > * setting up and using the factory for all object operations is > * critical! > */ > Session doSessionFactoryBindings( SessionFactory sessionFactory) > { > if ( verbose) System.out.println( "doing bindings."); > // open a session before processing the files. This allows the > // session to survive across the multiple transactions. And, hopefully, > // to provide level-2 caching services for the objects.... > // Contrast with getCurrentSession wich only survives for the current > // transaction. > Session session = sessionFactory.openSession(); > > // Change DefaultNamespaceName binding from "biojavax" > RichObjectFactory.setDefaultNamespaceName( "genbankBiosqlRich"); > > // Change DefaultOntologyName binding from "lcl". Hopefully, this will > // map the genbank annotation information into the SO term space. This > // works for some, but not all features. Those which donto map are > // flagged as "auto-generated by biojavax". > // nota bene: may be dangerous if semantics are not exactly the same! > // examination of the SO mapping indicated that were the terms align, the > // semantics also align. > // Benefit is that semantic queries can be performed on the loaded info. > RichObjectFactory.setDefaultOntologyName( "sequence"); //"SO" ); > > > // Hook to BiojavaX and BioSQL. This sets up the proper conditions for > // transparently hooking to the database and supplying objects from > // that db if they exist within it. This is accomplished via hooking the > // Builder, Resolver, and Handler to BioSQL implementations. > // Establishes standard bindings for: > // RichObjectBuilder, > // DefaultCrossReferenceResolver, > // DefaultRichSequenceHandler. > // nb: PositionResolver is left as new AverageResolver(); > RichObjectFactory.connectToBioSQL(session); > > // also grab a reference to the underlying database (so that I can use > // the convenience wrapper methods for delting entries). > //db = new BioSQLRichSequenceDB( session); // create the RichSequenceDB wrapper around the Hibernate session > > return session; > } > > /** > * This works for genbank files containing multiple sequences. > * Originaly concept from: http://portal.open-bio.org/pipermail/biojava-l/2007-April/005824.html > * It fails on inserting existant record(s) - does not replace... > * This causes grief when loading multiple files... > */ > public void loadNSave( Session session, File fileName) > { > boolean localSession = (session == null); > Transaction tx = null; > // ensure that an acceptable session configuration exists. > if ( session == null) throw new Error( "session object not established"); > > // Note the retrieval of namespace VIA the factory. The interface > // documentation did not make clear the requirement to use the > // established 'singleton' object (via getDefaultNamespace or equivalent). > // The underlying hibernate code does not attempt to automatically ensure > // the uniqueness (singleton) by attempting a load of any instances. > // Failure to use the factory will result in attempts to create a > // duplicate namespace in the database. > org.biojavax.Namespace ns = RichObjectFactory.getDefaultNamespace(); > > try > { > if ( verbose) System.out.println( "*********** Loading "+fileName+"..."); > BufferedReader br = new BufferedReader( new FileReader( fileName) ); > > // readGenbankDNA loads the objects from the stream and uses the > // established factory(ies) and defaults for object creation. > if ( verbose) System.out.println( "*********** readGenbankDNA..."); > RichSequenceIterator rsi = RichSequence.IOTools.readGenbankDNA( br, ns); > > while ( rsi.hasNext() ) // for each sequence in the file... > { > if ( verbose) System.out.println( "*********** start transaction."); > // Hibernate seems to REQUIRE transactions when objects are modified. > tx = session.beginTransaction(); > > if ( verbose) System.out.println( "*********** Loading next sequence..."); > RichSequence sequence = rsi.nextRichSequence(); > System.out.println( "loaded sequence "+sequence.getAccession()+ > ", identifier: "+ sequence.getIdentifier()); > > // delete any extant sequence from the database. The cascaded > // constraints will result in removal of all associated features > // and what-not. > Query q = session.createQuery( "from BioEntry as s where s.name = :acc"); > q.setString( "acc", sequence.getAccession()); > BioEntry be = (BioEntry)q.uniqueResult(); > if ( be != null) > { > if ( verbose) System.out.println( "*********** DELETING extant sequence..."); > // Interesintly, hibernate does not seem to do transactions in the > // same sense that a database would. Thus, I need to commit the > // delete operation before I attempt to insert the replacement > // information. > session.delete( be); > tx.commit(); > tx = session.beginTransaction(); > } > > try > { > // Loading entire genomes from genbank consumes large amounts > // of memory. Thus, each sequence and its associated > // annotations are wrapped in a transaction, the transaction saved, > // and the in-memory cache is cleared. While being somewhat > // inefficient, this approach does limit memory consumption. > if ( verbose) System.out.println( "*********** saving..."); > > // synchronize in-memory representation w/ the database > session.saveOrUpdate( "Sequence", sequence ); > if ( verbose) System.out.println( "*********** comitting..."); > tx.commit(); // save to database - does an automatic flush > // batch operations overwhelm the hibernate cache - clear it out! > if ( verbose) System.out.println( "*********** flushing..."); > session.flush(); // force in-memory to disk. > if ( verbose) System.out.println( "*********** clearing..."); > session.clear(); // clean out cache. > } > catch (HibernateException ex) > { > tx.rollback(); // discard the sequence and all its annotations > ex.printStackTrace(); > } > } > } > catch (FileNotFoundException ex) > { > ex.printStackTrace(); > } > catch ( BioException bex) > { > bex.printStackTrace(); > } > } > > } > > -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: SequenceLoaderNew.java URL: From rvincent at asti.dost.gov.ph Thu May 29 01:59:50 2008 From: rvincent at asti.dost.gov.ph (Rey Vincent Babilonia) Date: Thu, 29 May 2008 01:59:50 -0000 Subject: [Biojava-l] [Fwd: large genbank data] Message-ID: <483E0CA2.4010906@asti.dost.gov.ph> -------- Original Message -------- Subject: large genbank data Date: Wed, 28 May 2008 18:02:48 +0800 From: Rey Vincent Babilonia To: biojava-l at biojava.org hi, anybody tried uploading a large genbank data (e.g. ftp://bio-mirror.net/biomirror/genbank/gbbct1.seq.gz) to biosql? load_seqdatabase.pl of bioperl can do this. i'm switching to biojava and it can't read the sequence (maybe because it has 30000+ sequences). thanks. -- /** * @author Rey Vincent P. Babilonia * @number +63 2 426 9760 local 1302 * @pgp 0x383454CF pgp.mit.edu * @project Philippine Bioinformatics Solutions * @program Philippine e-Science Grid * @division Research and Development Division * @agency Advanced Science and Technology Institute * @url http://www.psigrid.gov.ph */ -- /** * @author Rey Vincent P. Babilonia * @number +63 2 426 9760 local 1302 * @pgp 0x383454CF pgp.mit.edu * @project Philippine Bioinformatics Solutions * @program Philippine e-Science Grid * @division Research and Development Division * @agency Advanced Science and Technology Institute * @url http://www.psigrid.gov.ph */ -------------- next part -------------- No virus found in this outgoing message. Checked by AVG. Version: 8.0.100 / Virus Database: 269.24.2/1471 - Release Date: 5/28/2008 5:33 PM