Well, actually, that was just a stripped-down version. I was trying to isolate the problem....
The real use case in our application is for scheduled tasks implemented as timers (using the TimerService). I thought I could annotate an EJB with @RunAs and invoke a method which receives a Callable (just like the OpenEJB @RunAs example) and make timers spread through other beans invoke that method. But, according to your example, I tried to start timers through the same EJB annotated with @RunAs, and that did work. So, I'll refactor the original idea, where each bean started their own timers into something like a single bean annotated with @RunAs starts timers and invokes other beans. Thanks for your support. Luis Fernando Planella Gonzalez Em Quinta-feira 24 Setembro 2009, às 18:10:11, Jonathan Gallimore escreveu: > I think you need to do the RunAs on the servlet itself, rather than on the > EJB. I've knocked up a sample: > http://people.apache.org/~jgallimore/runas-sample.tar.gz which works in > OpenEJB/Tomcat for me. > > I needed to add > > <servlet> > <servlet-name>TestServlet</servlet-name> > <servlet-class>org.superbiz.web.TestServlet</servlet-class> > <run-as> > <role-name>admin</role-name> > </run-as> > </servlet> > > to my web.xml to get it to work. I guess the @RunAs annotation would work > on the Servlet, but I haven't tried it. > > Hope that helps. > > Jon > > On Thu, Sep 24, 2009 at 4:51 PM, Jonathan Gallimore < > > [email protected]> wrote: > > Sorry for the delay, I was going to have a look at this tonight and get > > back to you. > > > > Jon > > > > Sent from my iPhone > > > > > > On 24 Sep 2009, at 13:47, Luis Fernando Planella Gonzalez < > > [email protected]> wrote: > > > > Anyone on this, please? > > > >> It is critical for our application, as we need timers created with the > >> TimerService to run as a specific role, and this is a show stopper. > >> > >> Perhaps I should post this in the developers list? > >> > >> Luis Fernando Planella Gonzalez > >> > >> Resending this mail, as It had attachments and was not published (at > >> > >>> least > >>> on nabble). > >>> For the attachment, markmail did store the original post: > >>> > >>> http://openejb.markmail.org/search/?q=type:users#query:type%3Ausers+pag > >>>e:1+ mid:2n47ayknj2uhniku+state:results > >>> > >>> --- The original message --- > >>> I'm trying to use @RunAs, however it does not work in tomcat + openejb. > >>> Attached is a very simple example. > >>> I was expecting the IndexServlet to print "Is admin? true", but it is > >>> false. Either I'm missing something or there is a bug. > >>> The code: > >>> > >>> --- The servlet --- > >>> public class IndexServlet extends HttpServlet { > >>> private static final long serialVersionUID = 1L; > >>> > >>> @EJB > >>> private RunAsService runAsService; > >>> > >>> protected void doGet( > >>> HttpServletRequest request, > >>> HttpServletResponse response) > >>> throws ServletException, IOException { > >>> > >>> response.setContentType("text/plain"); > >>> PrintWriter out = response.getWriter(); > >>> out.println("Is admin? " + runAsService.isAdmin()); > >>> response.flushBuffer(); > >>> } > >>> > >>> } > >>> > >>> --- The EJB interface --- > >>> public interface RunAsService { > >>> > >>> boolean isAdmin(); > >>> > >>> } > >>> > >>> --- The EJB implementation --- > >>> @Stateless > >>> @RunAs("admin") > >>> @DeclareRoles("admin") > >>> public class RunAsServiceBean implements RunAsService { > >>> > >>> @Resource > >>> private SessionContext sessionContext; > >>> > >>> @Override > >>> public boolean isAdmin() { > >>> return sessionContext.isCallerInRole("admin"); > >>> } > >>> > >>> } > >>> > >>> -- > >>> Luis Fernando Planella Gonzalez >
