[Biojava-dev] Potential Enhancements, Defect

mark.schreiber at novartis.com mark.schreiber at novartis.com
Thu Nov 3 22:34:54 EST 2005


Hello -

Good to know that someone is giving biojava a good work out in J2EE! There 
are several possibilities to commit the code.

1) I could arrange for a cvs account for you.
2) Send me the files and I will commit them.
3) For the classes that only require "implements Serializable" I can do 
this.
4) Send me CVS patch files.

It would also be really great if you could provide simple JUnit tests that 
proove the serialization regenerates objects that are .equals() and == 
where appropriate. eg Singletons and Fly weight objects must be == on 
deserialization.

Also if you are going to use the new biojavax I don't think we have marked 
anything as serializable yet.

- Mark

Mark Schreiber
Research Investigator (Bioinformatics)

Novartis Institute for Tropical Diseases (NITD)
10 Biopolis Road
#05-01 Chromos
Singapore 138670
www.nitd.novartis.com

phone +65 6722 2973
fax  +65 6722 2910





Michael McCormick <mmccormi at fhcrc.org>
Sent by: biojava-dev-bounces at portal.open-bio.org
10/29/2005 12:48 AM

 
        To:     biojava-dev at biojava.org
        cc:     (bcc: Mark Schreiber/GP/Novartis)
        Subject:        [Biojava-dev] Potential Enhancements, Defect


Greetings,

Ruihan Wang and I are developing an application that uses biojava in 
a J2EE environment. We have made a few changes and would like to add 
them to the biojava code. All of the changes except for one class 
involve serialization issues. Here is a brief summary.

Please let me know if you are interested in adding these changes and 
how they should be submitted.

Thanks.
Mike

Michael McCormick
Systems Analyst
Fred Hutchinson Cancer Research Center


/org/biojava/bio/search/SeqSimilaritySearchHit should be Serializable
/org/biojava/bio/search/SeqSimilaritySearchResult should be Serializable
/org/biojava/bio/search/SeqSimilaritySearchSubHit should be Serializable
/org/biojava/bio/seq/FeatureHolder should be Serializable
/org/biojava/bio/seq/db/SequenceDB should be Serializable
/org/biojava/bio/symbol/Symbol should be Serializable
/org/biojava/bio/symbol/SymbolList should be Serializable

/org/biojava/bio/symbol/SimpleAtomicSymbol and
/org/biojava/bio/symbol/SimpleBasisSymbol do not serialize correctly, 
however the mailing list provided a work around by commenting out the 
defective code.

org/biojava/bio/program/abi/ABIFChromatogram.java has a few issues.
1. Should be Serializable.
2. We experienced file handle count resource exceptions since File 
access was not being closed! This still needs future refactoring 
since the new close does not occur within a finally block.
3. Modify class to use readFully(). In our environment, this change 
allowed us to parse chromats at least 10 times faster.

diff for org/biojava/bio/program/abi/ABIFChromatogram.java
27,28d26
< import java.io.RandomAccessFile;
< import java.io.Serializable;
57c55
< public class ABIFChromatogram extends AbstractChromatogram 
implements Serializable {
---
 > public class ABIFChromatogram extends AbstractChromatogram {
141d138
<
151a149
 >
153d150
<             ((RandomAccessFile)getDataAccess()).close();
164a162
 >
166,171c164,166
<                 byte[] shortArray = new byte[2 * count];
<                 getDataAccess().readFully(shortArray);
<                 int i = 0;
<                 for (int s = 0; s < shortArray.length; s += 2) {
<                     trace[i] =  ((short)((shortArray[s] << 8) | 
(shortArray[s + 1] & 0xff))) & 0xffff;
<                     max = Math.max(trace[i++], max);
---
 >                 for (int i = 0 ; i < count ; i++) {
 >                     trace[i] = getDataAccess().readShort() & 0xffff;
 >                     max = Math.max(trace[i], max);
175,178c170,171
<                 byte[] byteArray = new byte[count];
<                 getDataAccess().readFully(byteArray);
<                 for (int i = 0; i < byteArray.length; i++) {
<                     trace[i] = byteArray[i] & 0xff;
---
 >                 for (int i = 0 ; i < count ; i++) {
 >                     trace[i] = getDataAccess().readByte() & 0xff;
185c178
<
---
 >
212,216c205,206
<                 byte[] shortArray = new byte[2 * count];
<                 getDataAccess().readFully(shortArray);
<                 IntegerAlphabet integerAlphabet = 
IntegerAlphabet.getInstance();
<                 for (int s = 0; s < shortArray.length; s += 2) {
<                     offsets.add(integerAlphabet.getSymbol(((short) 
((shortArray[s] << 8) | (shortArray[s + 1] & 0xff))) & 0xffff));
---
 >                 for (int i = 0 ; i < offsetsPtr.numberOfElements ; 
i++) {
 >                     offsets.add(IntegerAlphabet.getInstance 
().getSymbol(getDataAccess().readShort() & 0xffff));
220,224c210,211
<                 byte[] byteArray = new byte[count];
<                 getDataAccess().readFully(byteArray);
<                 IntegerAlphabet integerAlphabet = 
IntegerAlphabet.getInstance();
<                 for (int i = 0 ; i < byteArray.length; i++) {
<                     offsets.add(integerAlphabet.getSymbol(byteArray 
[i] & 0xff));
---
 >                 for (int i = 0 ; i < offsetsPtr.numberOfElements ; 
i++) {
 >                     offsets.add(IntegerAlphabet.getInstance 
().getSymbol(getDataAccess().readByte() & 0xff));
234,237c221,224
<                 byte[] byteArray = new byte[(int) 
basesPtr.numberOfElements];
<                 getDataAccess().readFully(byteArray);
<                 for (int i = 0; i < byteArray.length; i++) {
<                     dna.add(ABIFParser.decodeDNAToken((char) 
byteArray[i]));
---
 >                 char token;
 >                 for (int i = 0 ; i < basesPtr.numberOfElements ; i+ 
+) {
 >                     token = (char) getDataAccess().readByte();
 >                     dna.add(ABIFParser.decodeDNAToken(token));




_______________________________________________
biojava-dev mailing list
biojava-dev at biojava.org
http://biojava.org/mailman/listinfo/biojava-dev





More information about the biojava-dev mailing list