On 9/15/06, stephan opitz <[EMAIL PROTECTED]> wrote:
does indeed work - i tried under jboss so many different versions of implementation... craig i know your mailreader jpa based on glassfish...
That is true, but I had to follow the advice I gave you ... I had to make the backing beans that receive injection into standard JSF managed beans, not using the Shale Tiger @Bean annotation. maybe it is because of jboss ejb implementation?
my managed bean "datafactory" is in the ejb-jar and defined in faces-config.xml i have access from any shale model class
Be sure to take @Bean off as well ... if you leave it there, the Tiger extensions will be creating the bean, instead of JSF itself, so the injections will not occur. Craig if i debug i see
@Resource SessionContext sc; is null maybe i have a generall problem with the jboss does exist any tiger annotation for the postback value? 5, Craig McClanahan <[EMAIL PROTECTED]>: > On 9/15/06, stephan opitz <[EMAIL PROTECTED]> wrote: > > > > craig... > > > > the possibility with indirect works only if i do a jndi lookup... > > > > @Bean(name = "dataFactory", scope = Scope.SESSION) > > public class DataFactory { > > > > @EJB > > private CategoriesLangFacade categoriesLangFacade; > > > > public CategoriesLangFacade getCategoriesLangFacade() { > > > > return categoriesLangFacade; > > } > > > > } > > > > solves categoriesLangFacade as null; > > > > without @EJB and jndi-lookup in the getCategoriesLangFacade it works > > under jbos s4.04ga - but why resource injection does not work ? > > > Container resource injection only works on what the *container* thinks is a > JSF managed bean that *it* created. The Tiger Extensions stuff (@Bean) > intercepts the normal process and creates the bean itself, and can't do any > injections. If you made this a normal managed bean (configured in > faces-config.xml), you'll find that the resource injection does indeed work. > > It would be an interesting challenge to examine whether it's even *possible* > to fake the container's normal resource injection for stuff like this. > > Craig > > ######################################## > > > > public interface CategoriesLangFacade { > > > > public CategoriesLang findById(long categoriesLangId, long > > languageId); > > > > } > > > > ####################################### > > > > @Local({CategoriesLangFacade.class}) > > @Stateless > > public class CategoriesLangImp implements CategoriesLangFacade { > > > > @PersistenceContext(unitName = "ShaleTestPU") > > private EntityManager em; > > > > public static final String Remote = CategoriesLangImp.class > > .getSimpleName() > > + "/remote"; > > > > public static final String Local = CategoriesLangImp.class > > .getSimpleName() > > + "/local"; > > > > public CategoriesLang findById(long categoriesLangId, long > > languageId) { > > ... > > > > > > any solution or idea? > > > > > > > > 2006/9/13, stephan opitz <[EMAIL PROTECTED]>: > > > i tried comparable, but without success. > > > > > > anyone who can helps? > > > > > > 2006/9/12, numpsy beelzebub <[EMAIL PROTECTED]>: > > > > thx craig, > > > > > > > > > > > > > It is possible to access the stateful session bean *indirectly*, if > > you > > > > > declare it in a managed bean and then provide a public getter. The > > > > simplest > > > > > way to do this is to leverage the resource injection capabilities of > > a > > > > Java > > > > > EE 5 container, so you might have something like this: > > > > > > > > > @EJB > > > > > private MySessionBean mySessionBean; > > > > > > > > > public MySessionBean getMySessionBean() { return > > this.mySessionBean; } > > > > > > > > > and you can then use a binding expression like "#{ > > foo.mySessionBean.bar}" > > > > > where "foo" is the name of the managed bean containing the above > > > > > declaration, and "bar" is a property on the session bean itself. > > > > > > > > > If you are not running inside an EE 5 app server, you'll have to do > > the > > > > > usual sort of JNDI lookup to get a reference to the stateful session > > bean > > > > > instead. If you're using Shale's ViewController capabilities, the > > init() > > > > > method would be a good place to do that so the bean will be > > available to > > > > > other event handlers (and rendering) associated with this bean. > > > > > > > > can't follow exactly > > > > now i use jboss and ask for my entity beans from shale model objects > > > > try { > > > > Context context = new InitialContext(); > > > > contactNotesFassade = (ContactNotesFassade) context > > > > .lookup(Constants.ProjectNameSeparator > > > > + ContactNotesFassadeImp.Local); > > > > } catch (NamingException e) { > > > > messageLang.setFacesMessage("error.ejb"); > > > > } > > > > can image how this @EJB works with shale and how i can have easy > > access in > > > > clay etc... > > > > 1. i declare a stateful session bean mySessionBean mySessionBean > > > > ejb-web-project part > > > > 2. an interface with local - here the part with your @EJB code > > > > 3. access to interface in modelbeans of shale - as you told in > > init()-method > > > > > > > > how i can have access in clay to this away stateful ejb > > > > > > > > > > > > :-/ > > > > > > > > 2006/9/11, Craig McClanahan <[EMAIL PROTECTED]>: > > > > > > > > > On 9/11/06, numpsy beelzebub <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > > hello, > > > > > > > > > > > > i want to developed an application using shale and ejb 3.0(within > > > > > > container > > > > > > jboss). > > > > > > primary i used stateless session beans for access to the entity > > beans - > > > > > > persistenz-layer is ok and how to work with it > > > > > > > > > > > > as session i will declare a managed bean with an application scope > > > > > > "session" > > > > > > and save my data in it. > > > > > > i thought it is the fastest and easiest way, but in comparing to > > > > > stateful > > > > > > session beans it is not the only possible solution. > > > > > > > > > > > > in addition to this a few questions: > > > > > > > > > > > > 1. i'm fit in clay and know how to access normally ejb 3.0from > > shale's > > > > > > application-logic (building context etc) > > > > > > but how is it possible to access stateful session bean from view > > etc. > > > > > > (normally i have direct access, if it is declared as managed bean) > > > > > > > > > > > > > > > It is possible to access the stateful session bean *indirectly*, if > > you > > > > > declare it in a managed bean and then provide a public getter. The > > > > > simplest > > > > > way to do this is to leverage the resource injection capabilities of > > a > > > > > Java > > > > > EE 5 container, so you might have something like this: > > > > > > > > > > @EJB > > > > > private MySessionBean mySessionBean; > > > > > > > > > > public MySessionBean getMySessionBean() { return > > this.mySessionBean; } > > > > > > > > > > and you can then use a binding expression like "#{ > > foo.mySessionBean.bar}" > > > > > where "foo" is the name of the managed bean containing the above > > > > > declaration, and "bar" is a property on the session bean itself. > > > > > > > > > > If you are not running inside an EE 5 app server, you'll have to do > > the > > > > > usual sort of JNDI lookup to get a reference to the stateful session > > bean > > > > > instead. If you're using Shale's ViewController capabilities, the > > init() > > > > > method would be a good place to do that so the bean will be > > available to > > > > > other event handlers (and rendering) associated with this bean. > > > > > > > > > > > > > > > 2. i have to initalize context for access ejb, so i thought maybe > > declare > > > > > a > > > > > > interface as managed bean which gives access to stateful session > > bean > > > > > > does exist a method in shale except init(), that would be > > called for > > > > > > every request, so that i can initialize my access-context > > > > > > > > > > > > > > > > > > > > Why do you need a method other than init()? That is exactly what it > > is > > > > > for. > > > > > > > > > > > > > > > 3. if i want to use stateful-session ejb 3.0 - how is it possible > > out from > > > > > > session to define when access of specific user ends. > > > > > > maybe saving access to stateful-session ejb 3.0 into some kind > > of > > > > > state > > > > > > bean in shale declared as managed bean with session scope -> but > > if i do > > > > > > it > > > > > > so it seems strange > > > > > > > > > > > > > > > My understanding of the typical scenario for Stateful session beans > > is > > > > > that, > > > > > when you want the user's access to end (i.e. they log out or > > something), > > > > > then you'll call the remove method o the stateful session bean to > > make it > > > > > go > > > > > away. > > > > > > > > > > > > > > > i save access to a ejb, but i could save the data also direct > > > > > > 4. generally problem - session in shale is only a javabean with > > the > > > > > > session > > > > > > scope > > > > > > <-> stateful session bean is server side component > > (differences are > > > > > > clear, but what is best to use - where lies advantages) > > > > > > > > > > > > it is also a problem because jboss seam gives possibilities for my > > > > > > problems > > > > > > http://www.javaworld.com/javaworld/jw-05-2006/jw-0515-jsf-p3.html > > > > > > > > > > > > maybe i need some impressions of developer with some kind of more > > > > > > experience, including th developers of shale > > > > > > > > > > > > > > > Seam encourages you (but does not require you) to use a stateful > > session > > > > > bean (SFSB) in a manner fairly similar to using a session scoped > > backing > > > > > bean in a regular JSF application. If you're using an SFSB for your > > > > > business logic anyway, this can save you writing one class (the > > typical > > > > > sort > > > > > of backing bean) that primarily serves as an adapter role. The > > tradeoff > > > > > is > > > > > that you'll typically end up tying the SFSB class to web tier APIs > > instead > > > > > of being able to make it independent. > > > > > > > > > > A couple of other considerations: > > > > > > > > > > * If you're using Shale view controllers, that only works for > > request > > > > > scope > > > > > beans, > > > > > so you won't be able to make your SFSB class "implements > > ViewController" > > > > > and get those sorts of event callbacks. > > > > > > > > > > * A SFSB is automatically a transactional resource (depending on > > what > > > > > annotations > > > > > or XML metadata settings you use to configure it), so you don't have > > to > > > > > worry > > > > > about explicitly committing transactions (although you might still > > need to > > > > > roll back > > > > > if you're partway through an update and you need to abort it). You > > can > > > > > access > > > > > things like JPA entity classes directly from a JSF backing bean, but > > you > > > > > need to > > > > > manage transactions yourself. > > > > > > > > > > * A SFSB can only be accessed by one thread at a time, so you might > > find > > > > > yourself > > > > > in a situation where the locking that enforces this can cause you > > > > > performance issues. > > > > > A classic case is where you've got lots of AJAX-ish calls coming in > > from > > > > > the client, > > > > > such that there will be multiple requests (on different threads) to > > the > > > > > same session bean > > > > > at the same time. With session scoped backing beans, the calls > > happen > > > > > simultaneously > > > > > (but, of course, that means you also need to code your methods in a > > > > > threadsafe manner). > > > > > With an SFSB you don't have to worry about coding for simultaneous > > access, > > > > > but you do > > > > > need to worry about the performance impact of the locking. > > > > > > > > > > Craig > > > > > > > > > > > > > > > > > > > > thx so much > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >