Tomcat architecture

2008-02-25 Thread Stefano Tranquillini
Hi everybody. Someone has the architecture of Tomcat and a brief explanation of this? For architecture t think at some like this: http://www.javaportal.it/images/tesi/bonzagni2/Bonzagnic_html_m14d04b4d.png thanks -- Stefano

Security and Performance Configuration

2008-02-25 Thread Pedro Stavrinides
Hi all, I know this topic, or at least bits and pieces of it, has been covered in various posts, but just for clarification in my mind I would like the opinions of experienced Tomcat and Unix/Linux experts about optimizing performance and security configuration for Tomcat. As a starting point

Why is session unbound called after cluster failover?

2008-02-25 Thread Andrew Hole
Hi! Why is session unbound called after cluster failover? Two more questions: -- In a scenario with two nodes, if I shutdown one, the other is instantly ready to receive and respond to requests, or it is necessary to wait a while? In a procuction scenario we cannot wait, because requests are

Re: OT: java memory question -Xmx2048m

2008-02-25 Thread David Delbecq
En l'instant précis du 25/02/08 13:51, Dave s'exprimait en ces termes: Our Linux(FC) machine has 8G physical memory and 12G swap size. I am using JDK 1.5. I tried to set the Java option -Xmx to set max heap size for best performance, the allowed max heap size is 2048M . Does that mean

multiple webapps on single tomcat?

2008-02-25 Thread Abid Hussain
Hi everybody, I am planning to set up a couple (2-5) of webapps. I've encountered some problems in the past when running multiple webapps on a single tomcat, cause they somehow interfered with each other (frankly, I never unterstood why). My question is: Is there a best practice for running

Re: OT: java memory question -Xmx2048m

2008-02-25 Thread Roland Brassous (SILOGIC)
Hi everyOne From adobe Faq On 32-bit processor machines, the largest contiguous memory address space the operating system can allocate to a process is 1.8GB. Because of this, the maximum heap size can only be set up to 1.8GB. On 64-bit processor machines, the 1.8 GB limit does not apply, as

configuration of deployer in cluster

2008-02-25 Thread Taner Diler
Hi all, I want to deploy war file in vertical cluster. I'm confused a little bit with configuration. I have three clustered tomcats -labeled as (A,B,C)- in same machine. I have put the Deployer className=org.apache.catalina.cluster.deploy.FarmWarDeployer

Re: OT: java memory question -Xmx2048m

2008-02-25 Thread Mikolaj Rydzewski
Dave wrote: Our Linux(FC) machine has 8G physical memory and 12G swap size. Happy swapping ;-) -- Mikolaj Rydzewski [EMAIL PROTECTED] smime.p7s Description: S/MIME Cryptographic Signature

Re: Custom URL handlers in Tomcat web app

2008-02-25 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Matthias, MK wrote: | Christopher Schultz chris at christopherschultz.net writes: | | How did you set the [Java] property? | | I am running my web app inside an Eclipse WTP server container project. So I set | the property as a JVM argument in the

Re: Why is session unbound called after cluster failover?

2008-02-25 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Andrew, Andrew Hole wrote: | Why is session unbound called after cluster failover? What value is being unbound? | Two more questions: -- In a scenario with two nodes, if I shutdown | one, the other is instantly ready to receive and respond to

Re: Custom URL handlers in Tomcat web app

2008-02-25 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Matthias, Christopher Schultz wrote: | From the bug you mentioned in your original post, it looks like | putting it into your webapp just isn't going to work. Instead, you'll | have to install it into a ClassLoader that is higher-up in the chain. |

Re: Custom URL handlers in Tomcat web app

2008-02-25 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Matthias, MK wrote: | Actually I don't even call URL.openConnection, because I don't need it at all. | It's really just that the java.net.URL constructor requires that there exists an | object which implements this behavior just in case someone

Re: Is there a Connection Pool/Data Source Monitor Tool

2008-02-25 Thread Dan Armbrust
To answer my own question, it looks like jfreechart. http://sourceforge.net/projects/jfreechart On Mon, Feb 25, 2008 at 8:50 AM, Dan Armbrust [EMAIL PROTECTED] wrote: Does anyone happen to know what package Lamda Probe uses to create its graphs? They look really nice. I would search

Re: multiple webapps on single tomcat?

2008-02-25 Thread Hassan Schroeder
On Mon, Feb 25, 2008 at 5:46 AM, Abid Hussain [EMAIL PROTECTED] wrote: My question is: Is there a best practice for running several webapps on a single tomcat instance ... Tomcat is made for this. Install your webapps per the documentation (and Servlet Spec) and they won't interfere with

Session expiration and AJAX issues

2008-02-25 Thread Adam Gordon
A couple of issues: We've set our session expiration to 12 hours (I know it's long) and we're seeing behavior where certain browsers (namely IE) apparently can't count that high (we set the meta Refresh header but the page doesn't reload after the allotted time, session expiration time + 20

Re: multiple webapps on single tomcat?

2008-02-25 Thread Roland Brassous (SILOGIC)
Hi, in order to start Bests practises, i think about these rules... Libraries - Be care of [Tomcat directory]\shared\classes or [Tomcat directory]\shared\lib contents - Be care of [Tomcat directory]\common\classes, [Tomcat directory]\common\classes\endorsed and [Tomcat

Re: Why is session unbound called after cluster failover?

2008-02-25 Thread Andrew Hole
Hi! Well, our class USER implements HttpSessionBindingListener, Serializable and when failover happens valueUnbound is executed(public void valueUnbound(HttpSessionBindingEvent event)) - valueUnbound is a method of class USER. Could you help. Thanks On 2/25/08, Christopher Schultz [EMAIL

help decipher log entry

2008-02-25 Thread Paul Simon
Hi, I have a tomcat server running a lone java application on vms. The problem is that it shuts down occasionally for seemingly no reason. Could somebody help shed some light on the following log snippet - it's the entry right before the shutdown happens. I'm really a novice when it comes to

Re: Why is session unbound called after cluster failover?

2008-02-25 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Andrew, Andrew Hole wrote: | Well, our class USER implements HttpSessionBindingListener, | Serializable and when failover happens valueUnbound is executed(public | void valueUnbound(HttpSessionBindingEvent event)) - valueUnbound is a | method of

Re: OT: java memory question -Xmx2048m

2008-02-25 Thread Dave
I installed Linux FC6 64-bit on the machine DELL 2590(I think it is INTEL type CPU). But JVM 64-bit is only available for AMD and SPARC. Is the SUN not support INTEL? Thanks, Dave David Delbecq [EMAIL PROTECTED] wrote: En l'instant précis du 25/02/08 13:51, Dave s'exprimait en ces

how to package common lib and ear file

2008-02-25 Thread Dave
I have an ear application with entity,business and web modules. application ... module ejbfoo.par/ejb /module module ejbbar.ejb3/ejb /module module web web-uribaz.war/web-uri context-root//context-root /web /module

Re: Session expiration and AJAX issues

2008-02-25 Thread Paul Simon
Hi, We've set our session expiration to 12 hours (I know it's long) and we're seeing behavior where certain browsers (namely IE) apparently can't count that high (we set the meta Refresh header but the page doesn't reload after the allotted time, session expiration time + 20 minutes).

Re: configuration of deployer in cluster

2008-02-25 Thread Filip Hanik - Dev Lists
you do need to define the deployer on each instance, however in 5.5 there was an unfortunate change, and I believe that deployDir has to point to your webapps directory Filip Taner Diler wrote: Hi all, I want to deploy war file in vertical cluster. I'm confused a little bit with

RE: Incorrect cookie value in tomcat5.5.26

2008-02-25 Thread Sushil Vegad
Hello, cookie.setVersion(1) remembers the cookie only for the browser session. A new browser does not have access to the cookie We did cookie.setMaxAge(Integer.MAX_VALUE) but that doesn't help. Any thoughts please? Thanks, Sushil Vegad Technical Lead, Scheduling Project Serebrum Corporation -

Re: multiple webapps on single tomcat?

2008-02-25 Thread Abid Hussain
Thanks for help. So am I right saying that no conflicts between webapps can occur when 1. using tomcat 5.x... - all wepapps only use their WEB-INF/lib as directory for libraries and - none of the webapps uses libraries from $CATALINA_HOME/common/lib resp. $CATALINA_HOME/shared/lib 2. using

Re: OT: java memory question -Xmx2048m

2008-02-25 Thread Alan Chaney
For some reason Linux always calls 64 bit OSes 'AMD' - in fact, the sun 64 bit AMD version works fine on modern 64 bit Intel CPUs. The confusion comes because there was an older 64 bit design from Intel called the 'Itanium' which was intended for servers and had a completely different

Re: Why is session unbound called after cluster failover?

2008-02-25 Thread Andrew Hole
It happens on both. Valueunbound is executed on old server when tomcat is stopped, and is executed on new server when I execute logout (or if I shutdown tomcat). We only want that new server executes valueunbound. Could you help? Thanks a lot A On 2/25/08, Christopher Schultz [EMAIL PROTECTED]

Re: Session expiration and AJAX issues

2008-02-25 Thread Adam Gordon
Paul- Are you saying that certain browser will never expire their sessions? Or are you saying that certain browsers kill their sessions before 12 hours (because they can't count that high)? The former, i.e. that browsers will never expire the sessions. The way I understand it - you are

Re: Apache2 adn/or Tomcat6?

2008-02-25 Thread Mark H. Wood
On Fri, Feb 22, 2008 at 12:57:22PM -0800, Alan Chaney wrote: Or as I mentioned in a recent email, you can run something like jsvc and set the user to 'tomcat' which allows you to bind to the port and then changes the user. Okay, either I wasn't paying attention the last time I looked at jsvc,

Re: Why is session unbound called after cluster failover?

2008-02-25 Thread Filip Hanik - Dev Lists
the stack trace idea is a good idea, and you can post it here Filip Christopher Schultz wrote: -BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Andrew, Andrew Hole wrote: | Well, our class USER implements HttpSessionBindingListener, | Serializable and when failover happens valueUnbound is

Realms and Remote Address

2008-02-25 Thread Kerrin Hardy
I'm trying to create a Realm that authenticates a user and logs the IP address they attempted from, but I am having trouble finding how I get the IP address of the request (the Remote IP Address). I know I could get it if I had the Socket object, but I don't see how I get that from the Realm.

Re: cachingAllowed=false kills tomcat-5.5 (works on tomcat-6)

2008-02-25 Thread Mick Semb Wever
My application has in META-INF/context.xml: Context cachingAllowed=false / This works just beautifully in tomcat-6 but in tomcat-5.5 the application warfile fails to unpack. Not a single related log line is written in any of tomcat's logfiles! Any idea what's up with tomcat-5.5? Any

Re: Configuring Tomcat for multiple users

2008-02-25 Thread Mark H. Wood
Note that the user web application mechanism only recognizes one webapp per user. If you need more than that, you might write up a little gadget (to be run setuid) which collects and vets enough information to construct a context descriptor file and then deposits it in

Re: how to package common lib and ear file

2008-02-25 Thread David Delbecq
Classes shared between webapps go in shared/ folder. server/ folder is for server specific (invisible to webapps) classes. PS: that information is for tomcat, since you seem to use jboss, you better ask jboss mailing list, as jboss might use different folders Dave a écrit : I have an ear

Re: Security and Performance Configuration

2008-02-25 Thread Mark H. Wood
Well, IF you are sure you want to use Apache HTTPD to frontend Tomcat, there's no reason for Tomcat to run an HTTP connector at all. Just use the AJP connector, and only allow it to listen to your frontend service(s), or firewall it away from the Big Bad Internet. (Or both.) -- Mark H. Wood,

Re: Why is session unbound called after cluster failover?

2008-02-25 Thread Andrew Hole
Stack trace of old server: java.lang.Exception at mni.core.sessions.User.valueUnbound(User.java:95) at org.apache.catalina.cluster.session.DeltaSession.removeAttributeInternal(DeltaSession.java:1589) at

Re: NIO connector in Tomcat 6.0.14

2008-02-25 Thread Stephen More
On Thu, Oct 25, 2007 at 12:19 PM, Filip Hanik - Dev Lists devm wrote: browser don't work the way you might it expect to, firefox for example, will not display anything until the entire request is complete. so the chat example is no good that way. write a client application for your

RE: Help getting MySQL connected to Tomcat

2008-02-25 Thread Lessie Z. Mitch
Yes, David, you are correct. After some reading, I realized that configuration was recommended by my application's vendor and is indeed erroneous. Thank you for the clarification explanation. ~LZM~ -Original Message- From: David Smith [mailto:[EMAIL PROTECTED] Sent: Sunday, February

Re: Session expiration and AJAX issues

2008-02-25 Thread Adam Gordon
Martin- We are using Struts, however, version 1.2.9. But, after looking at the link, I'm not sure this will help as it doesn't really address the problem. Storing the date/time a user logs in on the session is probably useful, but our problem is that we want to forcefully log the user out

Re: Session expiration and AJAX issues

2008-02-25 Thread Bob Hall
--- 10:10AM Mon 25 Feb 2008, Adam Gordon [EMAIL PROTECTED] wrote: Storing the date/time a user logs in on the session is probably useful, but our problem is that we want to forcefully log the user out if there's no human present at the computer and the AJAX tasks keep a user's session

Re: Realms and Remote Address

2008-02-25 Thread Mark Thomas
Kerrin Hardy wrote: I'm trying to create a Realm that authenticates a user and logs the IP address they attempted from, but I am having trouble finding how I get the IP address of the request (the Remote IP Address). I know I could get it if I had the Socket object, but I don't see how I get

Re: Why is session unbound called after cluster failover?

2008-02-25 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Andrew, Andrew Hole wrote: | It happens on both. Valueunbound is executed on old server when | tomcat is stopped, and is executed on new server when I execute | logout (or if I shutdown tomcat). That behavior seems entirely consistent with what

RE: Session expiration and AJAX issues

2008-02-25 Thread Jason Pyeron
-Original Message- From: Adam Gordon [mailto:[EMAIL PROTECTED] Sent: Monday, February 25, 2008 13:11 To: Tomcat Users List Subject: Re: Session expiration and AJAX issues Martin- We are using Struts, however, version 1.2.9. But, after looking at the link, I'm not sure

Apache/Tomcat - mod_jk issues

2008-02-25 Thread Lessie Z. Mitch
Greetings list. For some reason web browser queries are not passing through apache to tomcat via mod_jk. I understand I may have a misconfiguration somewhere, I just cannot find it. L I am trying to host 4 separate domains, all with different java apps. Each domain has its own IP and own

Class and Object sharing across domain and its sub-domains

2008-02-25 Thread Kristin Coles
I use Apache Tomcat (5.5.9) to host the website (xyz.com) along with a couple of sub-domains (photos.xyz.com and documents.xyz.com). You can find the relevant portion of server.xml file below. Hosting the websites in this way has lead to two main headaches. 1. I cannot share my Java code between

Re: Session expiration and AJAX issues

2008-02-25 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Adam, What you need is to make a request without touching the session. Tomcat cannot do this by itself; you're going to have to either hack Tomcat to add a no-touch-session parameter to the session manager (which wouldn't be a bad TC enhancement

Open Source Process

2008-02-25 Thread Uzma Khawaja
Hi, I am a student and doing a research on open source processes. I would be thankful if some one can answer few simple questions to help me in my research. 1. If someone wants to work on a feature or bug, is he/she required to get permission before working? Is he/she REQUIRED to join the

Re: Why is session unbound called after cluster failover?

2008-02-25 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Andrew, Andrew Hole wrote: | I think you need to manage your events in a way that takes into account | the fact that valueUnbound will can be called by other members in the | cluster. | It is not a easy task, rigth? | Could you be more specific in

Re: Tomcat architecture

2008-02-25 Thread Johnny Kewl
--- HARBOR: http://coolharbor.100free.com/index.htm The most powerful application server on earth. The only real POJO Application Server. Making the Java dream come true.

Re: Realms and Remote Address

2008-02-25 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Kerrin, Kerrin Hardy wrote: | I'm trying to create a Realm that authenticates a user and logs the | IP address they attempted from, but I am having trouble finding how I | get the IP address of the request (the Remote IP Address). This is not

Re: Why is session unbound called after cluster failover?

2008-02-25 Thread Andrew Hole
I think you need to manage your events in a way that takes into account the fact that valueUnbound will can be called by other members in the cluster. It is not a easy task, rigth? Could you be more specific in the way of developing it? Thanks On Mon, Feb 25, 2008 at 7:27 PM, Christopher Schultz

Re: Why is session unbound called after cluster failover?

2008-02-25 Thread Andrew Hole
Well, valueunbound is executed on both TC. we are doing session replication, lets say we have a 5 (for example) node cluster. When a user logs on, his/her session will be replicated on 5 tomcats. When he/she logs out, you only want track that the user has logged out once, not 5 times (our logout

Re: Why is session unbound called after cluster failover?

2008-02-25 Thread Rainer Jung
Not sure if I followed this thread closely enough. It looks like sometimes you are talking about node shutdown (your example stack), and sometimes about user logout (your last message). Concerning user logout (resp. session expiration/invalidation): the attribute notifyListenersOnReplication

Re: Why is session unbound called after cluster failover?

2008-02-25 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Andrew, Andrew Hole wrote: | Well, valueUnbound is executed on both TC. You mentioned that. The valueUnbound is being propagated from the TC instance shutting down across the cluster, right? I can't seem to get a straight answer to that question.

Tomcat plans for per-webapp session replication

2008-02-25 Thread Andrew R Feller
Are there any plans to have Tomcat handle session replication on a per-webapp basis? We currently have several servers configured for session replication because of a single application. Not only do we not want session values from other applications on the machines to be replicated as it is

Re: Open Source Process

2008-02-25 Thread Andrei Tchijov
On Feb 25, 2008, at 15:35 , Uzma Khawaja wrote: Hi, I am a student and doing a research on open source processes. I would be thankful if some one can answer few simple questions to help me in my research. 1. If someone wants to work on a feature or bug, is he/she required to get

Re: Why is session unbound called after cluster failover?

2008-02-25 Thread Rainer Jung
Christopher Schultz schrieb: Of course, bringing down one container in a cluster will have the effect of logging everyone out at once, even if they are on other servers as well. No, unless you set expireSessionsOnShutdown which is false by default, shutdown of a node should not expire the

Re: Tomcat plans for per-webapp session replication

2008-02-25 Thread Rainer Jung
Not sure what you mean by this: session replication is local to webapps. After configuring the cluster element in server.xml, you need to activate replication for each webapp with a distributable element in web.xml and only session changes for those webapps with distributable set get

Re: Session expiration and AJAX issues

2008-02-25 Thread Adam Gordon
Adding a time decay in our timer task is an interesting idea and were it not for IE's JavaScript counting ineptness, that'd probably work. Bob Hall wrote: --- 10:10AM Mon 25 Feb 2008, Adam Gordon [EMAIL PROTECTED] wrote: Storing the date/time a user logs in on the session is probably

Re: Open Source Process

2008-02-25 Thread Mark Thomas
Uzma Khawaja wrote: Hi, 1. If someone wants to work on a feature or bug, is he/she required to get permission before working? Is he/she REQUIRED to join the community? No permission required. By very virtue of downloading the software and working on the bug they have joined the community. It

Re: Class and Object sharing across domain and its sub-domains

2008-02-25 Thread david delbecq
Since your 3 webapps need to share classes code, object instances and session information, i don't see why you want to make 3 webapps instead of just one. So my advise would be to make a single webapp. Kristin Coles a écrit : I use Apache Tomcat (5.5.9) to host the website (xyz.com) along with

Re: Tomcat plans for per-webapp session replication

2008-02-25 Thread Filip Hanik - Dev Lists
this has been done since the beginning of session replication. if your webapp has distributable/ in web.xml sessions will be replicated. if the element is missing, session data will not be replicated even if the server is configured for clustering Filip Andrew R Feller wrote: Are there any

Re: Class and Object sharing across domain and its sub-domains

2008-02-25 Thread Kristin Coles
Thanks for the reply, David. Are you saying that I need to get rid of the sub-domains? i.e. I should use xyz.com/photos rather than photos.xyz.com? Can you please elaborate? Thanks, Kristin On Mon, Feb 25, 2008 at 4:04 PM, david delbecq [EMAIL PROTECTED] wrote: Since your 3 webapps need to

Re: Why is session unbound called after cluster failover?

2008-02-25 Thread Andrew Hole
The valueUnbound is NOT being propagated from the TC instance shutting down across the cluster. The valueunbound is executed when I do the shutdown of an TC instance (session logout tracking was done - database record inserted). After that I still work with this session on the active node ...

Re: Incorrect cookie value in tomcat5.5.26

2008-02-25 Thread Filip Hanik - Dev Lists
what is your scenario, the following code worked for me, even though the browser doesn't send up cookie version % javax.servlet.http.Cookie[] cs = request.getCookies(); String value = null; for (Cookie co : cs) { if (test.equals(co.getName())) value = co.getValue(); }

NIO connector under heavy load drops incoming requests?

2008-02-25 Thread Emile Litvak
Hello everyone, We have a high load environment where we are running tomcat 5.5.15 successfully. We are interesting in reducing the system CPU load and switching to Tomcat 6 with NIO, but so far have run into a few issues. After trying out the patch Filip recommended

Re: NIO connector under heavy load drops incoming requests?

2008-02-25 Thread Alan Chaney
Actually I've seen something like this. I'm under a lot of pressure to get something out so I haven't investigated it further, but what seemed to be happening is that if the client slowed down the NIO connector was throwing a SocketTimeout. I tried messing about with the timeout settings but

Re: NIO connector under heavy load drops incoming requests?

2008-02-25 Thread Filip Hanik - Dev Lists
you don't need four (4) acceptor threads, turn that to one (1) also, you omited the most interesting stack trace :) Filip Emile Litvak wrote: Hello everyone, We have a high load environment where we are running tomcat 5.5.15 successfully. We are interesting in reducing the system CPU load

Re: NIO connector under heavy load drops incoming requests?

2008-02-25 Thread Filip Hanik - Dev Lists
Alan Chaney wrote: Actually I've seen something like this. I'm under a lot of pressure to get something out so I haven't investigated it further, but what seemed to be happening is that if the client slowed down the NIO connector was throwing a SocketTimeout. I tried messing about with the

Re: Custom URL handlers in Tomcat web app

2008-02-25 Thread MK
Christopher, thanks a lot for your replies. Christopher Schultz chris at christopherschultz.net writes: MK wrote: | Actually I don't even call URL.openConnection, because I don't need it at all. | It's really just that the java.net.URL constructor requires that there exists an | object

Re: Custom URL handlers in Tomcat web app

2008-02-25 Thread MK
MK kaeppler.matthias at nts.ricoh.co.jp writes: [...] I am using Tomcat 5.5 by the way. I will try rolling a jar from my protocol handler and put it in the places you suggested. Maybe that'll work, I'll report back. actually I just realized that this is not gonna help if Tomcat does not

Re: Session expiration and AJAX issues

2008-02-25 Thread mgainty
Jason- the url patterns depends on the servlet mapping you've defined.. You're going to need some algorithm which defines infinity Your current mechanism binds the current Servlet to the ajax control (div?) Acquire the initial date/time ..store it somewhere..hopeully in session when the servlet

Re: Session expiration and AJAX issues

2008-02-25 Thread Bob Hall
--- 2:09PM Mon 25 Feb 2008 Adam Gordon [EMAIL PROTECTED] wrote: Adding a time decay in our timer task is an interesting idea and were it not for IE's JavaScript counting ineptness, that'd probably work. The server could track the requests and provide an updated delay time for the timer

Re: sessionID moves to other PC

2008-02-25 Thread Yuval Perlov
Make sure cookies are enabled. If they are: There are two options (1) that it is indeed the same session and that there is a huge Tomcat bug (2) that these are two separate sessions but that you are somehow mixing the data - local bug. To determine which is it, you could do a toString() on