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
> 

Reply via email to