You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by Sandeep Sharma <sa...@yahoo.com> on 2002/03/28 18:03:05 UTC

About CharTerminatedInputStream

Hi!

I have some doubts regarding the effeciency of the
CharTerminatedInputStream :

Processing every byte of the message will shoot up CPU
usage like any thing for example if JAMES receive  a
message of 8K then there will be 

8 * 1024 = 8192 read() function calls

further the overhead of calling read() function 8192
times + the processing time will consume lots of CPU
cycles consequently reducing the overall capacity of
the JAMES to handle mails

I would advice JAMES developers to use Transaction
Cost Analysis (TRC) method to performance test JAMES
Mail Server

Sandiep
CTO Infosoft TechNet Private Limited
http://www.infosoftin.com

__________________________________________________
Do You Yahoo!?
Yahoo! Movies - coverage of the 74th Academy Awards�
http://movies.yahoo.com/

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: About CharTerminatedInputStream

Posted by Sandeep Sharma <sa...@yahoo.com>.
Hi!

no matter how well JVM optimizes the read method in
this case read method will be called for each byte

Regards
Sandiep U. Sharma
CTO Infosoft


__________________________________________________
Do You Yahoo!?
Yahoo! Movies - coverage of the 74th Academy Awards�
http://movies.yahoo.com/

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


RE: About CharTerminatedInputStream

Posted by Danny Angus <da...@thought.co.uk>.
Oh definitely,
I know theres a huge performace boost when reading files using byte[], I
don't know what parts of James we're talking about without looking, and I
suspect some things will benefit much more from block reads than others.

I just flung out the question in a fit of idle curiosity (I seem to be good
at that today, and its not even friday).. ;-)
d.

> -----Original Message-----
> From: Stephan Schiessling [mailto:s@rapi.com]
> Sent: 28 March 2002 19:18
> To: James Developers List
> Subject: Re: About CharTerminatedInputStream
>
>
>
> Most likely read(byte[]...) is used by other classes.
> These methods class read() internally, but don't you
> think that the JVM optimizes these method calls ?
> I bet that they are optimized.
>
> Bye,
>
> Stephan Schiessling
>
>
>
>
>
> Sandeep Sharma wrote:
> > Hi!
> >
> > I have some doubts regarding the effeciency of the
> > CharTerminatedInputStream :
> >
> > Processing every byte of the message will shoot up CPU
> > usage like any thing for example if JAMES receive  a
> > message of 8K then there will be
> >
> > 8 * 1024 = 8192 read() function calls
> >
> > further the overhead of calling read() function 8192
> > times + the processing time will consume lots of CPU
> > cycles consequently reducing the overall capacity of
> > the JAMES to handle mails
> >
> > I would advice JAMES developers to use Transaction
> > Cost Analysis (TRC) method to performance test JAMES
> > Mail Server
> >
> > Sandiep
> > CTO Infosoft TechNet Private Limited
> > http://www.infosoftin.com
> >
> > __________________________________________________
> > Do You Yahoo!?
> > Yahoo! Movies - coverage of the 74th Academy Awards®
> > http://movies.yahoo.com/
> >
> > --
> > To unsubscribe, e-mail:
<ma...@jakarta.apache.org>
> For additional commands, e-mail:
<ma...@jakarta.apache.org>
>
>




--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: About CharTerminatedInputStream

Posted by Stephan Schiessling <s...@rapi.com>.

Sandeep Sharma wrote:
> Dear Stephan Schiessling
> 
> I don't think read(byte[] ...) methods calls read
> internally

Look at java.io.InputStream, but of course in a sub class these can
be implemented by an own implementation.

> 
> what i believe is that when u call getInputStream on
> socket it would return Ref to instance of
> SocketInputStream Class that contains a native method
> called socketRead(byte b[], int off, int len) 
> 
> i would like u to go through the source code of the
> SocketInputStream class

You have a little problem, if you use CharTerminatedInputStream
with read(byte[], ...) (without subcalls to read()):
This InputStream may read too much bytes and these bytes may have to 
feed these extra bytes back into the "super"-InputStream. The mark/reset 
features of InputStream may not be supported, so that you may end up 
useing some extra BufferedInputStream.

CharTerminatedInputStream does not directly use an InputStream of a 
Socket, so I think the only way to check if you can get performance
improvements is to write an alternative class and test it.


Bye,

Stephan Schiessling





--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: About CharTerminatedInputStream

Posted by Sandeep Sharma <sa...@yahoo.com>.
Dear Stephan Schiessling

I don't think read(byte[] ...) methods calls read
internally

what i believe is that when u call getInputStream on
socket it would return Ref to instance of
SocketInputStream Class that contains a native method
called socketRead(byte b[], int off, int len) 

i would like u to go through the source code of the
SocketInputStream class

Thanks & regards
Sandiep U. Sharma
CTO Infosoft

__________________________________________________
Do You Yahoo!?
Yahoo! Movies - coverage of the 74th Academy Awards�
http://movies.yahoo.com/

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: About CharTerminatedInputStream

Posted by Stephan Schiessling <s...@rapi.com>.
Most likely read(byte[]...) is used by other classes.
These methods class read() internally, but don't you
think that the JVM optimizes these method calls ?
I bet that they are optimized.

Bye,

Stephan Schiessling





Sandeep Sharma wrote:
> Hi!
> 
> I have some doubts regarding the effeciency of the
> CharTerminatedInputStream :
> 
> Processing every byte of the message will shoot up CPU
> usage like any thing for example if JAMES receive  a
> message of 8K then there will be 
> 
> 8 * 1024 = 8192 read() function calls
> 
> further the overhead of calling read() function 8192
> times + the processing time will consume lots of CPU
> cycles consequently reducing the overall capacity of
> the JAMES to handle mails
> 
> I would advice JAMES developers to use Transaction
> Cost Analysis (TRC) method to performance test JAMES
> Mail Server
> 
> Sandiep
> CTO Infosoft TechNet Private Limited
> http://www.infosoftin.com
> 
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Movies - coverage of the 74th Academy Awards®
> http://movies.yahoo.com/
> 
> --
> To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>
> 
> 




--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: Send email from an application

Posted by tarun <ta...@datainfosys.net>.
i think u can go for rfc's fpr smtp
anyway basic commands are
like
connecting to SMTP ports and using
HELO etc
u can check the list of commands by using HELP
regards
tarun
*************************************************
Tarundeep Singh Kalra
Project Leader(Server Side Solutions)
Data Infosys Ltd.
Development Center
D-47 Hanuman Nagar
Vaishali Nagar
Jaipur
Raj(INDIA)
Ph:(091)-0141-245039,245040.
Fax:- (091)-0141-703712
visit us at www.datainfosys.com
*************************************************
----- Original Message -----
From: "Thomas Singer" <th...@regnis.de>
To: "James Developers List" <ja...@jakarta.apache.org>
Sent: Sunday, April 14, 2002 10:13 PM
Subject: Re: Send email from an application


> Thank you very much. Any idea, where I can find the basic SMTP commands in
> James?
>
> Best regards,
> Tom
>
>
> At 23:00 08.04.2002 -0700, you wrote:
> >Hi! Thomas
> >
> >I believe that u want to send mail directly (without
> >any dependancy on any kind of middleware servers like
> >SMTP or DNS)
> >
> >To avoid SMTP server & JAVA MAIL
> >to avoid use of SMTP server u can write very small
> >program (may be in Java) that implements basic SMTP
> >commands and connects connects directly to the
> >recipients MX host
> >
> >To avoid DNS
> >i believe that ur support team members e-mail accounts
> >are on ur own server and u know  the IP of ur SMTP
> >server. if this is the case u don't need DNS server to
> >resolve MX host
> >
> >Regards
> >Sandiep U. Sharma
> >http://www.infosoftin.com
>
>
> --
> To unsubscribe, e-mail:
<ma...@jakarta.apache.org>
> For additional commands, e-mail:
<ma...@jakarta.apache.org>
>
>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: Send email from an application

Posted by Sandeep Sharma <sa...@yahoo.com>.
Hi, Tom

for ur Convenience u can use the code below

import java.util.*;
import java.net.*;
import java.io.*;

public class SMTPSender
{
	/**
	 * Hashtable will hold the rejected recipients
addresses
	 */
	Hashtable htRejectedRelay = new Hashtable();
	
	/**
	 * Send message to destination smtphost
	 * @author Sandiep U. Sharma
(http://www.infosoftin.com)
	 * @smtphost: SMTP Host address
	 * @From: Sender email address
	 * @vt: Vector containing recipients e-mail addresses
	 * @mmess: Byte array containing message (include
<CRLF>.<CRLF> characters)
	 */											  
	public void sendMessage(String smtphost,String From,
Vector vt, byte[] mmess)
	{
		//System.out.println("smtphost:"+smtphost+"
From:"+From+" Rcpt:"+vt.toString());
		//System.out.println("Connecting to :"+smtphost);
		Socket sk=null;
		DataInputStream din=null;
		DataOutputStream dout=null;
		try { 
			// connect to smtp host and initialize I/O streams
			sk = new Socket(smtphost,25);
			System.out.println("Connected");
			String strresp;
			din = new DataInputStream(sk.getInputStream());
			dout = new DataOutputStream(sk.getOutputStream());
			strresp = din.readLine();
			System.out.println("S:"+strresp);
			if (strresp.startsWith("220"))
				dout.writeBytes("helo <server>\r\n");	//Replace
server with hostname
			else {
				System.out.println("Error :"+strresp);
				recipientRejected(vt.toString(),strresp);			
				return;
			}		
			strresp = din.readLine();
			System.out.println("S:"+strresp);	
			if (strresp.startsWith("250"))
			{
				dout.writeBytes("mail from:<"+From+">\r\n");
			}
			else {
				System.out.println("Error :"+strresp);
				recipientRejected(vt.toString(),strresp);
				return;
			}
		
			strresp = din.readLine();
			System.out.println("S:"+strresp);
		
			if (strresp.startsWith("250"))
			{
				for (int i = 0;i<vt.size();i++)
				{
					String strrcpt = (String) vt.elementAt(i);
					dout.writeBytes("rcpt to:<"+strrcpt+">\r\n");
					strresp = din.readLine();
					//System.out.println("S:"+strresp);
					if (!strresp.startsWith("250")) {
						recipientRejected(strrcpt,strresp);
					}				
				}			
			}
			else 
			{
				System.out.println("Error :"+strresp);
				recipientRejected(vt.toString(),strresp);			
				return;
			}
			dout.writeBytes("data\r\n");
			strresp = din.readLine();
			System.out.println("S:"+strresp);

			if (strresp.startsWith("354"))
			{
				dout.write(mmess);
			}
			else {
				System.out.println("Error :"+strresp);
				recipientRejected(vt.toString(),strresp);			
				return;
			}		
			strresp = din.readLine();
			System.out.println("S:"+strresp);		
			dout.writeBytes("quit\r\n");
		} catch (Exception ioe) {
			System.out.println("I/O error while relaying
mail:"+ioe.toString());
			recipientRejected(vt.toString(),ioe.getMessage());
			return;
		}
		try {
			din.close();
			dout.close();
			sk.close();
		} catch (Exception ioe) {/* log this exception */}
	}

	private void recipientRejected(String
strrecipient,String strReason)
	{
		// do somethis here for the rejected relayed
recipients
		System.out.println("\t recipient rejected
"+strrecipient);
		htRejectedRelay.put(strrecipient,strReason);
	}
}

best Regards
Sandiep U. Sharma, CTO Infosoft
www.infosoftin.com

__________________________________________________
Do You Yahoo!?
Yahoo! Tax Center - online filing with TurboTax
http://taxes.yahoo.com/

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: Send email from an application

Posted by Thomas Singer <th...@regnis.de>.
Thank you very much. Any idea, where I can find the basic SMTP commands in 
James?

Best regards,
Tom


At 23:00 08.04.2002 -0700, you wrote:
>Hi! Thomas
>
>I believe that u want to send mail directly (without
>any dependancy on any kind of middleware servers like
>SMTP or DNS)
>
>To avoid SMTP server & JAVA MAIL
>to avoid use of SMTP server u can write very small
>program (may be in Java) that implements basic SMTP
>commands and connects connects directly to the
>recipients MX host
>
>To avoid DNS
>i believe that ur support team members e-mail accounts
>are on ur own server and u know  the IP of ur SMTP
>server. if this is the case u don't need DNS server to
>resolve MX host
>
>Regards
>Sandiep U. Sharma
>http://www.infosoftin.com


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: About CharTerminatedInputStream

Posted by Sandeep Sharma <sa...@yahoo.com>.
Hi Stephan Schiessling,

Below is the second version of the code in which i
have taken care of some of the issues raised by u

Bye


import java.io.*;

/**
 * @author: Sandiep. U. Sharma
 */
public class NewOptTerminatedStream extends
InputStream 
{
    private InputStream in;
	static final byte term[] = {(byte) '\n', (byte)
'.',(byte) '\r',(byte) '\n'};
	byte buf[] = new byte[2048]; //allocate buffer
	int bcount = -1;
	int pos = -1;
	boolean cont = true;
	int len;
	int j=0;
	
    public NewOptTerminatedStream(InputStream in,
char[] terminator) throws Exception
	{		
		//Initialize buffers		
        this.in = in;
		readByteStream();
	}
	
	/**
	 * Readahed a block of data
	 */
	public void readByteStream() throws IOException 
	{
		len=0;
		if (!cont) 
		{
			bcount = -1; pos = -1;
			return;
		}
		
		bcount = in.read(buf);
		
		int c=0;
		
		if (j>0){c=j;}	//If term char is pending for next
block
		
		for (int i = 0;i<bcount;i++)
		{
			if (term[c] == buf[i])
			{
				for (j = c;(j<4) && (i < bcount);j++)
				{
					if (term[j] != buf[i++])
					{
						j = -1;
						break;
					}
				}
				if (j == 4) //End of file found
				{
					len = i-4;
					pos = 0;
					if((bcount > len) && (in instanceof
PushbackInputStream))
					{
						//If in is a PushBackInputStream the unread
extra bytes readed
					
((PushbackInputStream)in).unread(buf,len,(bcount-len));
					}
					bcount=len;
					cont = false;
					System.out.println("End of file reached");
					break;
				}
			} //End of If block
		} // End of for loop
		
		if (cont)
		{
			len = bcount;
			pos = 0;
		}
	}
	
    public int read() throws IOException 
	{
		if ((bcount >0) && (pos < bcount)) 
		{
			return buf[pos++];
		} else if (!cont || (bcount == -1)) {
			return -1;
		} else {
			this.readByteStream();
			return buf[pos++];
		}
    }
	
	public int read(byte[] b,int off,int len) throws
IOException
	{
		if (b.length == 0)
			return 0;
	
		if ((bcount >0) && (pos < bcount)) 
		{
			int curlen = bcount-pos;
			if (curlen <= len)
			{
				System.arraycopy(buf,pos,b,off,curlen);
				this.readByteStream();
				return curlen;
			} else if (curlen > len)
			{
				curlen = len;
				System.arraycopy(buf,pos,b,off,curlen);
				pos = pos + curlen-1;
				return curlen;
			}
		} else if (!cont || (bcount == -1)) {
			return -1;
		}		
		return -1;
	}
}


__________________________________________________
Do You Yahoo!?
Yahoo! Tax Center - online filing with TurboTax
http://taxes.yahoo.com/

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: About CharTerminatedInputStream

Posted by Stephan Schiessling <s...@rapi.com>.
Hi Sandeep Sharma,

Your code has some problems:
1) In the readBlockStream method, you read a whole
    block (2048) bytes, but you forgot a loop to test
    all occurences of the terminating characters (actually
    it is only tested once).
2) No sign of code to test the terminating characters ("\n.\r\n")
    between two blocks.
3) OptTerminatedInputStream reads too much bytes from the underlaying InputStream (given
    in the constructor). You cannot expect, that the underlaying InputStream
    ends with the terminating characters, so that OptTerminatedInputStream may steal
    bytes from underlaying InputStream, which are not accessible by other code.
    I think this will be a problem, if more than 1 emails are sent in the same stream.
    And this is may main concern about your solution here. I mentioned this in an earlier email in this Thread,
    in which I sketched a solution to this problem, but at the same time, I think it will
    eat um any performance improvements.


Bye,

Stephan



Sandeep Sharma wrote:
> Hi Stephan,
> 
> go through the code below
> 
> This the first version of the patch for
> CharTerminatedInputStream, this code is just for the
> testing
> 
> Also note that i have hardcoded certain things, 
> following code also contains a bug (if u try to send
> mails from telnet, however that can be removed easily)
> 
> -----------Start of Patch
> public class OptTerminatedStream extends InputStream 
> {
>     private InputStream in;
> 	static final byte term[] = {(byte) '\n', (byte)
> '.',(byte) '\r',(byte) '\n'};
> 	byte buf[] = new byte[2048]; //allocate buffer
> 	int bcount = -1;
> 	int pos = -1;
> 	boolean cont = true;
> 	//int totalb = 0;
> 	
>     public OptTerminatedStream(InputStream in, char[]
> terminator) throws Exception 
> 	{		
> 		//Initialize buffers		
>         this.in = in;
> 		readByteStream();
> 	}
> 	
> 	/**
> 	 * Readahed a block of data
> 	 */
> 	public void readByteStream() throws IOException 
> 	{
> 		String line = "";
> 		int len;
> 		len=0;
> 		
> 			if (!cont) 
> 			{
> 				bcount = -1;
> 				pos = -1;
> 				return;
> 			}
> 			
> 			bcount = in.read(buf);
> 			
> 			if (bcount == -1) //if end-of-file reached
> 				return;		
> 			
> 			len = bcount;
> 			pos = 0;
> 			try 
> 			{				
> 				if (
> 					buf[len - 4] == term[0] && 
> 					buf[len - 3] == term[1] && 
> 					buf[len - 2] == term[2] && 
> 					buf[len - 1] == term[3]
> 					)
> 				{
> 					cont = false;
> 					bcount-=4;
> 				}
> 			} catch (ArrayIndexOutOfBoundsException aiob){}
> 	}
> 	
>     public int read() throws IOException 
> 	{
> 		if ((bcount >0) && (pos < bcount)) 
> 		{
> 			return buf[pos++];
> 		} else if (!cont || (bcount == -1)) {
> 			return -1;
> 		} else {
> 			this.readByteStream();
> 			return buf[pos++];
> 		}
>     }
> 	
> 	public int read(byte[] b,int off,int len) throws
> IOException
> 	{
> 		if (b.length == 0)
> 			return 0;
> 
> 		if ((bcount >0) && (pos < bcount)) 
> 		{
> 			int curlen = bcount-pos;
> 			if (curlen <= len)
> 			{
> 				System.arraycopy(buf,pos,b,off,curlen);
> 				this.readByteStream();
> 				return curlen;
> 			} else if (curlen > len)
> 			{
> 				curlen = len;
> 				System.arraycopy(buf,pos,b,off,curlen);
> 				pos = pos + curlen-1;
> 				return curlen;
> 			}
> 		} else if (!cont || (bcount == -1)) {
> 			return -1;
> 		}		
> 		return -1;
> 	}
> }
> ---------------End of Patch
> 
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Tax Center - online filing with TurboTax
> http://taxes.yahoo.com/
> 
> --
> To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>
> 
> 




--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: About CharTerminatedInputStream

Posted by Sandeep Sharma <sa...@yahoo.com>.
Hi Stephan,

go through the code below

This the first version of the patch for
CharTerminatedInputStream, this code is just for the
testing

Also note that i have hardcoded certain things, 
following code also contains a bug (if u try to send
mails from telnet, however that can be removed easily)

-----------Start of Patch
public class OptTerminatedStream extends InputStream 
{
    private InputStream in;
	static final byte term[] = {(byte) '\n', (byte)
'.',(byte) '\r',(byte) '\n'};
	byte buf[] = new byte[2048]; //allocate buffer
	int bcount = -1;
	int pos = -1;
	boolean cont = true;
	//int totalb = 0;
	
    public OptTerminatedStream(InputStream in, char[]
terminator) throws Exception 
	{		
		//Initialize buffers		
        this.in = in;
		readByteStream();
	}
	
	/**
	 * Readahed a block of data
	 */
	public void readByteStream() throws IOException 
	{
		String line = "";
		int len;
		len=0;
		
			if (!cont) 
			{
				bcount = -1;
				pos = -1;
				return;
			}
			
			bcount = in.read(buf);
			
			if (bcount == -1) //if end-of-file reached
				return;		
			
			len = bcount;
			pos = 0;
			try 
			{				
				if (
					buf[len - 4] == term[0] && 
					buf[len - 3] == term[1] && 
					buf[len - 2] == term[2] && 
					buf[len - 1] == term[3]
					)
				{
					cont = false;
					bcount-=4;
				}
			} catch (ArrayIndexOutOfBoundsException aiob){}
	}
	
    public int read() throws IOException 
	{
		if ((bcount >0) && (pos < bcount)) 
		{
			return buf[pos++];
		} else if (!cont || (bcount == -1)) {
			return -1;
		} else {
			this.readByteStream();
			return buf[pos++];
		}
    }
	
	public int read(byte[] b,int off,int len) throws
IOException
	{
		if (b.length == 0)
			return 0;

		if ((bcount >0) && (pos < bcount)) 
		{
			int curlen = bcount-pos;
			if (curlen <= len)
			{
				System.arraycopy(buf,pos,b,off,curlen);
				this.readByteStream();
				return curlen;
			} else if (curlen > len)
			{
				curlen = len;
				System.arraycopy(buf,pos,b,off,curlen);
				pos = pos + curlen-1;
				return curlen;
			}
		} else if (!cont || (bcount == -1)) {
			return -1;
		}		
		return -1;
	}
}
---------------End of Patch

__________________________________________________
Do You Yahoo!?
Yahoo! Tax Center - online filing with TurboTax
http://taxes.yahoo.com/

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: About CharTerminatedInputStream

Posted by Stephan Schiessling <s...@rapi.com>.
Sandeep Sharma wrote:
> Hi Serge,
> 
> 
>>Have you used any profiling tools to determine this,
>>or is this just a 
>>back-of-the-envelop calculation?
> 
> ya initially when i saw the code first time
> 
> i have just used a simple application written using
> java mail to test it
> 
> the reason for my concerned with the code is that,
> this the code responsible for receiving mail and hence
> ats as a gateway to JAMES
> 
> 
>>While implementing only read() and not read(byte[])
>>obviously could 
>>stand to be improved, when I have done stress
>>testing in conjuction with 
>>a profiling tool, I have not found this to consume a
>>noticeable 
>>percentage of CPU.
> 
> 
> i wrote a version of the same code with block read and
> found significant performance boost

Then just send a patch for james, so that we can test this code.


Bye,

Stephan Schiessling


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: Send email from an application

Posted by Sandeep Sharma <sa...@yahoo.com>.
Hi! Thomas

I believe that u want to send mail directly (without
any dependancy on any kind of middleware servers like
SMTP or DNS)

To avoid SMTP server & JAVA MAIL
to avoid use of SMTP server u can write very small
program (may be in Java) that implements basic SMTP
commands and connects connects directly to the
recipients MX host

To avoid DNS
i believe that ur support team members e-mail accounts
are on ur own server and u know  the IP of ur SMTP
server. if this is the case u don't need DNS server to
resolve MX host

Regards
Sandiep U. Sharma
http://www.infosoftin.com 

__________________________________________________
Do You Yahoo!?
Yahoo! Tax Center - online filing with TurboTax
http://taxes.yahoo.com/

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: About CharTerminatedInputStream

Posted by Sandeep Sharma <sa...@yahoo.com>.
Hi Serge,

> Have you used any profiling tools to determine this,
> or is this just a 
> back-of-the-envelop calculation?
ya initially when i saw the code first time

i have just used a simple application written using
java mail to test it

the reason for my concerned with the code is that,
this the code responsible for receiving mail and hence
ats as a gateway to JAMES

> While implementing only read() and not read(byte[])
> obviously could 
> stand to be improved, when I have done stress
> testing in conjuction with 
> a profiling tool, I have not found this to consume a
> noticeable 
> percentage of CPU.

i wrote a version of the same code with block read and
found significant performance boost

> 
> -- 
> Serge Knystautas
> Loki Technologies - Unstoppable Websites
> http://www.lokitech.com/
> 
> Sandeep Sharma wrote:
> > Hi!
> > 
> > I have some doubts regarding the effeciency of the
> > CharTerminatedInputStream :
> > 
> > Processing every byte of the message will shoot up
> CPU
> > usage like any thing for example if JAMES receive 
> a
> > message of 8K then there will be 
> > 
> > 8 * 1024 = 8192 read() function calls
> > 
> > further the overhead of calling read() function
> 8192
> > times + the processing time will consume lots of
> CPU
> > cycles consequently reducing the overall capacity
> of
> > the JAMES to handle mails
> > 
> > I would advice JAMES developers to use Transaction
> > Cost Analysis (TRC) method to performance test
> JAMES
> > Mail Server
> > 
> > Sandiep
> > CTO Infosoft TechNet Private Limited
> > http://www.infosoftin.com
> 
> 
> --
> To unsubscribe, e-mail:  
> <ma...@jakarta.apache.org>
> For additional commands, e-mail:
> <ma...@jakarta.apache.org>
> 


__________________________________________________
Do You Yahoo!?
Yahoo! Tax Center - online filing with TurboTax
http://taxes.yahoo.com/

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: About CharTerminatedInputStream

Posted by Serge Knystautas <se...@lokitech.com>.
Have you used any profiling tools to determine this, or is this just a 
back-of-the-envelop calculation?

While implementing only read() and not read(byte[]) obviously could 
stand to be improved, when I have done stress testing in conjuction with 
a profiling tool, I have not found this to consume a noticeable 
percentage of CPU.

-- 
Serge Knystautas
Loki Technologies - Unstoppable Websites
http://www.lokitech.com/

Sandeep Sharma wrote:
> Hi!
> 
> I have some doubts regarding the effeciency of the
> CharTerminatedInputStream :
> 
> Processing every byte of the message will shoot up CPU
> usage like any thing for example if JAMES receive  a
> message of 8K then there will be 
> 
> 8 * 1024 = 8192 read() function calls
> 
> further the overhead of calling read() function 8192
> times + the processing time will consume lots of CPU
> cycles consequently reducing the overall capacity of
> the JAMES to handle mails
> 
> I would advice JAMES developers to use Transaction
> Cost Analysis (TRC) method to performance test JAMES
> Mail Server
> 
> Sandiep
> CTO Infosoft TechNet Private Limited
> http://www.infosoftin.com


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


RE: About CharTerminatedInputStream

Posted by Danny Angus <da...@thought.co.uk>.
What would you suggest in place of CharTerminatedInputStream ?

> -----Original Message-----
> From: Sandeep Sharma [mailto:sandiindia@yahoo.com]
> Sent: 28 March 2002 17:03
> To: james-dev@jakarta.apache.org
> Subject: About CharTerminatedInputStream
> 
> 
> Hi!
> 
> I have some doubts regarding the effeciency of the
> CharTerminatedInputStream :
> 
> Processing every byte of the message will shoot up CPU
> usage like any thing for example if JAMES receive  a
> message of 8K then there will be 
> 
> 8 * 1024 = 8192 read() function calls
> 
> further the overhead of calling read() function 8192
> times + the processing time will consume lots of CPU
> cycles consequently reducing the overall capacity of
> the JAMES to handle mails
> 
> I would advice JAMES developers to use Transaction
> Cost Analysis (TRC) method to performance test JAMES
> Mail Server
> 
> Sandiep
> CTO Infosoft TechNet Private Limited
> http://www.infosoftin.com
> 
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Movies - coverage of the 74th Academy Awards.
> http://movies.yahoo.com/
> 
> --
> To unsubscribe, e-mail:   
> <ma...@jakarta.apache.org>
> For additional commands, e-mail: 
> <ma...@jakarta.apache.org>
> 

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>