I'm not really sure if this is actually a real problem or a stupid beginner question. Maybe I have missed some point and this question is rather trivial, so please bear with me.
If I got it right, then the difference between layers and tiers is that layers relate to logical separation whereas tiers imply physical separation of portions of an application.
One can implement layers as separate tiers to shield the application from users making direct calls e.g. to data access objecs. But my intention is to conceal lower layers of an application practically from user clients in a logical fashion, meaning without actually using separate jvms or application servers. How can I do this, does this somehow relate to the way how the packaging takes place? (different archives like jar, war, ears to isolate logic...).
I'm actually interested in providing security for a layered server application, for which might exist various clients that are out of my control. If I'm providing client application programmers an interface for high level services, I have to protect the lower layers with EJB security annotations, too. What I'm hoping for is to do this in a more elegant manner through marking the lower layers as not accessible to application clients.