Tomcat 5.5.28 with simple valve causes startup errors

2009-12-16 Thread Martin B. Smith

Hi folks,

I'm getting some exceptions with a vanilla Tomcat 5.5.28 and a simple 
logging valve. I'm using the following version of Java:


java version 1.5.0_22
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_22-b03, mixed mode)

The valve I've configured inside a Host element:
  Valve 
classname=org.apache.catalina.valves.FastCommonAccessLogValve 
resolveHosts=false rotatable=false pattern=combined /


Below I'm including the stack trace I receive, and below that, the full 
server.xml including the fragment above.


Am I way off the path on configuring a logging valve?

Thanks!

Martin B. Smith
smit...@ufl.edu - (352) 273-1374
CNS/Open Systems Group
University of Florida


--

2009-12-16 11:25:23,071  WARN main org.apache.catalina.startup.Catalina 
- Catalina.start using conf/server.xml:

java.lang.NullPointerException
at 
org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2726)
at 
org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2752)
at 
org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1279)
at 
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:533)
at 
com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:220)
at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:872)
at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1693)
at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
at 
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
at 
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at 
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at 
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at 
org.apache.tomcat.util.digester.Digester.parse(Digester.java:1562)

at org.apache.catalina.startup.Catalina.load(Catalina.java:490)
at org.apache.catalina.startup.Catalina.start(Catalina.java:544)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:592)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Caused by: java.lang.NullPointerException
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:261)
at java.lang.ClassLoader.loadClass(ClassLoader.java:300)
at java.lang.ClassLoader.loadClass(ClassLoader.java:300)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at 
org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:205)

at org.apache.tomcat.util.digester.Rule.begin(Rule.java:153)
at 
org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1276)

... 18 more
2009-12-16 11:25:23,192  INFO main org.apache.catalina.startup.Catalina 
- Server startup in 0 ms

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:592)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Caused by: java.lang.NullPointerException
at org.apache.catalina.startup.Catalina.await(Catalina.java:616)
at org.apache.catalina.startup.Catalina.start(Catalina.java:576)
... 6 more


and my config:


Server port=8005 shutdown=SHUTDOWN
 Listener className=org.apache.catalina.core.AprLifecycleListener /
  Listener 
className=org.apache.catalina.mbeans.ServerLifecycleListener /
  Listener 
className=org.apache.catalina.mbeans.GlobalResourcesLifecycleListener /
  Listener 
className=org.apache.catalina.storeconfig.StoreConfigLifecycleListener/


 Service name=Catalina
Connector protocol=AJP/1.3 debug=0 redirectPort=443
   enableLookups=false port=8000 maxProcessors=1024
   minProcessors=20 acceptCount=10 
connectionTimeout=2

   URIEncoding=UTF-8

Re: Tomcat 5.5.28 with simple valve causes startup errors

2009-12-16 Thread Martin B. Smith

On 12/16/2009 11:33 AM, Mark Thomas wrote:

On 16/12/2009 17:28, Martin B. Smith wrote:

Hi folks,

I'm getting some exceptions with a vanilla Tomcat 5.5.28 and a simple
logging valve. I'm using the following version of Java:

java version 1.5.0_22
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_22-b03, mixed mode)

The valve I've configured inside a Host element:
   Valve
classname=org.apache.catalina.valves.FastCommonAccessLogValve
resolveHosts=false rotatable=false pattern=combined /

Below I'm including the stack trace I receive, and below that, the full
server.xml including the fragment above.

Am I way off the path on configuring a logging valve?


Not way off but every so slightly off but in a way the *really* upsets
things. Try using className rather than classname.

Mark



-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org




Thanks!

I took this from documentation and didn't catch that *facepalm* :)

--
Martin B. Smith
smit...@ufl.edu - (352) 273-1374
CNS/Open Systems Group
University of Florida

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Using RemoteAddressValve with an Apache mod_proxy_balancer

2009-12-16 Thread Martin B. Smith

Howdy!

I'm trying to ensure that only specific instances of Apache are allowed 
to proxy requests into my Tomcat 5.5.28 instances. Unfortunately, it 
looks like Tomcat is seeing the actual client IP making the original 
request to Apache. Does anyone have a configuration that only allows 
specific Apache (mod_)proxies to be serviced by Tomcat?


I will be using other ways to protect Tomcat, but I'd like something 
inside Tomcat filtering these AJP requests too, and RemoteAddressValve 
sounds like it should work :)


Here's what I'm using now --

Apache:

ProxyPass / balancer://foo/ stickysession=JSESSIONID nofailover=On

Proxy balancer://foo
BalancerMember ajp://host1:1234 route=foo
BalancerMember ajp://host2:1235 route=foo
/Proxy

Tomcat:
Valve className=org.apache.catalina.valves.RemoteAddrValve 
allow=127.0.0.1,apache-front-end-ip/



Additionally, I'm noticing 403s returned from Tomcat via AJP are showing 
up as empty pages in Apache, instead of showing a default 403 page like 
Apache usually does.



Thanks for any insight!
--
Martin B. Smith
smit...@ufl.edu - (352) 273-1374
CNS/Open Systems Group
University of Florida

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Using RemoteAddressValve with an Apache mod_proxy_balancer

2009-12-16 Thread Martin B. Smith
On 12/16/2009 11:01 PM, Bill Barker wrote:
 André Warnier a...@ice-sa.com wrote in message 
 news:4b294eb6.4090...@ice-sa.com...
 Martin B. Smith wrote:
 Howdy!

 I'm trying to ensure that only specific instances of Apache are allowed 
 to proxy requests into my Tomcat 5.5.28 instances. Unfortunately, it 
 looks like Tomcat is seeing the actual client IP making the original 
 request to Apache. Does anyone have a configuration that only allows 
 specific Apache (mod_)proxies to be serviced by Tomcat?

 Of course if your are under Linux, you could use iptables to block 
 requests to port 8009, from hosts you don't like.
 And if you are under Windows, you could use the Windows firewall or 
 filtering rules.
 Probably even more efficient than doing this at the Tomcat level.
 
 Yes, but if the OP wants to block all access to Tomcat, it is even easier to 
 just not have the worker configured on those Apaches that shouldn't contact 
 it.  As a result, I'm guessing that the OP wants to restrict access to 
 certain webapps.
 
 The good news is that with the AJP connector, request.getLocalName() returns 
 the name of the Apache server (as specified by the ServerName directive), 
 not the Tomcat server.  And request.getLocalAddr() returns the IP address of 
 request.getLocalName() as it resolves on the Tomcat machine.  With that 
 information it isn't hard to write a Filter that does what you want.  For 
 the truely lazy, it would also be trivial to copy RemoteAddrValve to 
 LocalAddrValve and have it check localAddr instead of remoteAddr. 
 
 
 
 
 -
 To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
 For additional commands, e-mail: users-h...@tomcat.apache.org
 
 

André, thank you for the suggestions. I had considered them, but wanted
some additional, more specific protections without going to mod_jk.

Bill, your post is a gem. Indeed, I can always use network ACLs and
iptables and mod_jk, but I was really hoping to do mod_proxy_balancer.
While there's some administrative separations between the programmers
and the system administrators that prevent me from writing servlets on
top of Tomcat, this is a nice tip.

Thanks.
-- 
Martin B. Smith
smit...@ufl.edu - (352) 273-1374
CNS/Open Systems Group
University of Florida

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



HttpServletRequest#getSession(false) says the session is good, but session is still invalid!

2008-12-12 Thread Martin B. Smith
Hi there,

With Tomcat 5.5 , I'm using the (what I assume to be typical) pattern:

--
if(!request.isRequestedSessionIdValid() || request.getSession(false) ==
null)
{
  // some code to bail out and return an error
}

HttpSession session = request.getSession();
--

and yet, later on in my code, a call to session.setAttribute() throws
the following exception (see bottom of email)... what am I doing wrong?
I've guarded against an invalid session by checking for one, yet there
it is on the first attempt to use it!

Help! Thanks!

Exception from above:
Throwable/Exception cause: java.lang.IllegalStateException:
setAttribute: Session already invalidated
Stack trace:
java.lang.IllegalStateException: setAttribute: Session already invalidated
at
org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1251)
at
org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1233)
at
org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:129)
at
edu.ufl.bebr.scheduler.web.action.EmployeeScheduleAction.execute(EmployeeScheduleAction.java:176)



-- 
Martin Smith, Systems Developer
mart...@bebr.ufl.edu
Bureau of Economic and Business Research
University of Florida
(352) 392-0171 Ext. 221

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: HttpServletRequest#getSession(false) says the session is good, but session is still invalid!

2008-12-12 Thread Martin B. Smith
Hi Chris,

Thanks for your response. I actually don't invalidate the current
session there. That's what is so frustrating -- the code snippet I
provided is at the very top of the method, and there's no more reference
to the session or request until using setAttribute.

I don't mind providing the code -- it's at http://java.pastebin.ca/1283742.

Actually, looking at it in the pastebin -- could it be that I'm setting
an attribute FOR the error about a missing session?

Hmm did I just solve my own problem?

Martin




Christopher Schultz wrote:
 Martin,
 
 Martin B. Smith wrote:
 With Tomcat 5.5 , I'm using the (what I assume to be typical) pattern:
 
 --
 if(!request.isRequestedSessionIdValid() || request.getSession(false) ==
 null)
 {
   // some code to bail out and return an error
 }
 
 HttpSession session = request.getSession();
 
 
 I've never done this. I typically just do:
 
 HttpSession nonRequiredSession = request.getSession(false);
 
 if(null === nonRequiredSession)
   // I gots no session
 else
   // I have a session
 
 and yet, later on in my code, a call to session.setAttribute() throws
 the following exception (see bottom of email)... what am I doing wrong?
 
 Throwable/Exception cause: java.lang.IllegalStateException:
 setAttribute: Session already invalidated
 
 Presumably, your code has called session.invalidate() during the
 processing of the current request. I'm not sure what happens if you do this:
 
 session = request.getSession();
 session.invalidate();
 session = request.getSession();
 session.setAttribute(foo, bar);
 
 Will this fail on the setAttribute, or will the second getSession give
 you a new session?
 
 My guess is that your code does the above, but without the second
 request.getSession(), so you end up with an invalidated session into
 which you are trying to shove attributes.
 
 Maybe you could post the code?
 
 -chris

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org


-- 
Martin Smith, Systems Developer
mart...@bebr.ufl.edu
Bureau of Economic and Business Research
University of Florida
(352) 392-0171 Ext. 221

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org