Jeśli wszystko dobrze rozumiem to:
Gdy we własnej aplikacji w web.xml zdefiniuje <security-constraint>, <login-config>, itd, to żeby wyświetlić w przeglądarce określony servlet będę musiał się zalogować, korzystając z Realm Tomcata.
W Tomcacie Realm można definiować w conf/server.xml, conf/context.xml i we własnej aplikacji w META-INF/context.xml. Z punktu widzenia własnej aplikacji każdy kolejny zastępuje poprzedni.
TomEE dodatkowo obsługuje EJB, które po drobnej konfiguracji można też udostępnić zdalnie. Jeśli Bean ma @RolesAllowed("SomeRole") to muszę się wcześniej zalogować aby go użyć.
Chce w zwykłej konsolowej aplikacji wykonać zdalnie ten Bean czy robię coś takiego:
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
p.put(Context.PROVIDER_URL, "http://localhost:8080/tomee/ejb");
p.put(Context.SECURITY_PRINCIPAL, "someUsername");
p.put(Context.SECURITY_CREDENTIALS, "somePassword");
InitialContext ic = new InitialContext(p);
BeanRemote bean = (BeanRemote) ic.lookup("BeanRemote");
bean.callSomeMethod();
To wszystko działa ale zawsze użyje Realm z conf/server.xml, niby logiczne bo to (/tomee/ejb) uruchamia TomEE. Ale można też we własnej aplikacji uruchomić ten servlet (org.apache.openejb.server.httpd.ServerServlet) i zamiast /tomee/ejb bedzie /my_context_path/ejb_endpoint (czy co tam ustawię). Jednak w dalszym ciągu użyje to Ream z conf/server.xml mimo że w META-INF/context.xml jest inny.
Nie uwierzę że nie ma jakiegoś prostego sposobu na określenie Realm dla tego mechanizmu. Jakieś sugestie?