Hi Kevin /Jeremy, Thanks for your replies.
In the code that you mention, I would have to follow a pattern like this... MYEjb { EntityManager em = null; InitialContext ctx = new InitialContext(); em = (EntityManager)ctx.lookup("java:comp/env/MyPCJndi"); public void mymethodwhichneedsacachevalue() { Cache.getValue(key, manager); // the manager is passed to the cache. Don't want this } } CachePOJO { public String getValue(String key, EntityManager manager) { //singleton...uses manager to initialize from database for the first time.... } } What I really want is CachePOJO { private void initialize() { InitialContext ctx = new InitialContext(); Entitymanger mgr = ctx.lookup(jndinameofmgr); //use mgr to load values from DB. } } Yes, the cache is accessed from an EJB, but I don't want to be passing the manager around. In fact, I have this pattern problem repeatedly because we have DAO classes that always now need to get initialized with the manager which is passed from the EJB class (session facade). I end up having to pass my entitymanager around. In a previous project with hibernate, I remember being able to get the sessions directly from the container using JNDI and they would be bound to a transaction if there was one existing. I want to be able to work with a similar pattern but stumble since the only place I am able to get a manager from right now is inside an EJB which I then have to pass around to lower layers. Thanks in advance. Devu. Jeremy, I don't have an option to go to WAS 7 right now, I will have to live with the fix packs. Will try out the method in Kevin's link. Kevin Sutter wrote: > > Devu213, > Besides Jeremy's references below, I want to be aware of WebSphere's > support > of OpenJPA. I started to cover this the WebSphere and Java Persistence > blog > [1], but to cover your specific situation... You are correct that the > version shipped with the WebSphere EJB3 Feature Pack was OpenJPA 1.0. > But, > we have created a service stream for this release in OpenJPA (1.0.x). If > any problems are discovered in the 1.0 release, then we can fix them in > OpenJPA 1.0.x. This updated version of OpenJPA will then get picked up > for > WebSphere iFixes and FixPacks. So, you are not "stuck" with OpenJPA 1.0. > It will get updated just like the rest of your WebSphere offering as > additional FixPacks are applied. > > WebSphere v7 shipped a version of 1.2 OpenJPA. This version will get > supported via the 1.2.x branch of OpenJPA. You could follow Jeremy's > references below to use this newer version of OpenJPA with the EJB3 > Feature > Pack, but then you no longer have access to the WebSphere extensions that > sit on top of the OpenJPA binaries. It is an option though. > > Good luck, > Kevin > > [1] > http://webspherepersistence.blogspot.com/2008/09/support-for-openjpa.html > > > On Mon, Jan 12, 2009 at 10:42 AM, Jeremy Bauer <techhu...@gmail.com> > wrote: > >> Hi devu213, >> To use JNDI to lookup an EM or EMF in WebSphere app server you can define >> a >> class level annotation (or via XML in your ejb module deployment >> descriptor) >> on your session bean or servlet and use the "name" attribute to specify >> the >> JNDI name. For example: >> >> @Stateless >> @PersistenceContext(unitName="MyPC", name="MyPCJndi") >> public class JPABean implements JPALocal, JPARemote { >> ... >> @Resource SessionContext sessionCtx; >> >> public void beanMethod() { >> >> // 1) Lookup via comp/env namespace of the initial/current context >> EntityManager em = null; >> InitialContext ctx = new InitialContext(); >> em = (EntityManager)ctx.lookup("java:comp/env/MyPCJndi"); >> >> // or 2) Use direct lookup from the injected session ctx of the session >> bean >> em = (EntityManager)sessionCtx.lookup("MyPCJndi"); >> >> } >> >> Looking up an EntityManagerFactory via @PersistenceUnit works similarly. >> >> Notice though, that lookup is via the ENC of the EJB. I don't know >> how/if >> global JNDI can be used to get a factory. (Anyone?) So, if you initialize >> your POJO cache within the context of the EJB, the lookup will work. If >> you >> need to initialize the cache outside of a container, >> Persistence.createEntityManagerFactory should work for you. I'd verify >> that >> all of your jars specified in your jar-file entry are available on the >> classpath of your application. You may need to add the jars to the class >> path entry in the manifest of your module. >> >> Here's an IBM infocenter document that explains how to configure an >> alternate persistence provider[1]. The key items when using an alternate >> version of OpenJPA is to make sure you've included all the necessary >> OpenJPA >> jars in your application or via shared library and the application >> classloader is configured to load PARENT_LAST. This allows the OpenJPA >> jars >> provided by the application (or shared lib) to be loaded before those >> provided by the app server. >> >> [1] >> >> http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.ejbfep.multiplatform.doc/info/ae/ae/tejb_jpa3rdparty.html >> >> Hope this helps, >> -Jeremy >> >> On Sat, Jan 10, 2009 at 4:25 AM, devu213 <devusm...@gmail.com> wrote: >> >> > >> > Hi Kevin, >> > >> > Thanks for taking interest despite this being a Websphere question. >> Here >> is >> > the information that might help: >> > >> > 1. Yes am using the EJB3 featurepack. My server is at version 6.1.0.17 >> with >> > EJB and Webservices FP installed. >> > 2. The code snippet Persistence.createEntityManager() works on >> stand-alone >> > even with the jar tags(but fails in the container). >> > 3. I am using the openJPA shipped with Websphere. >> > >> > Having given you the above it looks from your answer that I have erred >> by >> > not stating my question properly. The issue is, I don't know what name >> is >> > used to bind the factory and the manager. So the issue is not that I'm >> not >> > able to lookup but that I don't know the JNDI name to look up and so >> > haven't >> > even tried it. Somehow, I did not find any documentation on the >> Websphere >> > sites or google. >> > >> > Also on similar lines, I would like to see some documentation on how to >> > override the default openJPA shipped with WAS because I want to be able >> to >> > use the latest version but the one being picked up by the classloader >> is >> > always the 1.0 version. >> > >> > Thanks in advance. >> > >> > >> > >> > Kevin Sutter wrote: >> > > >> > > Hi devu213, >> > > Just to clarify... Are you using the EJB3 Feature Pack on top of >> > > WebSphere >> > > v6.1. Are you using the version of OpenJPA that ships with the >> Feature >> > > Pack, or something newer? It sounds like you are using >> container-managed >> > > persistence (ie. the injection support), so it sounds like you are >> using >> > > the >> > > EJB3 Feature Pack. But, I just want to make sure. >> > > >> > > With the EJB3 Feature Pack, the JNDI lookup of an EntityManager >> should >> > > work >> > > as well as the injection support. You mention that you are getting a >> SAX >> > > parser error with your persistence.xml file. Do you get any parsing >> > > errors >> > > when running OpenJPA standalone? Or, is all of your testing within a >> > > container? Can you provide more details on the specific parsing >> errors >> > > you >> > > are getting? >> > > >> > > You should also be able to use application-managed persistence within >> the >> > > Container. >> > > >> > > Off the top of my head, I'm not aware of any problems with what you >> are >> > > attempting. Unfortunately, I can't highlight anything you're doing >> > > incorrectly. If you can provide some additional details, maybe we >> can >> > > help >> > > get you running. >> > > >> > > FYI... Just a reminder. This forum is for questions and issues >> specific >> > > to >> > > OpenJPA. Since some of us are intimate with WebSphere, we attempt to >> > help >> > > with related WebSphere questions. In this particular case, it sounds >> > like >> > > you might be hitting a problem with the EJB Container within >> WebSphere. >> > > We >> > > can help with the triage of this case, but we won't be able to >> resolve >> > the >> > > problem with OpenJPA (if it turns out to be a problem with the >> > Container). >> > > >> > > Thanks, >> > > Kevin >> > > >> > > On Wed, Jan 7, 2009 at 2:40 AM, devu213 <devusm...@gmail.com> wrote: >> > > >> > >> >> > >> Hi, >> > >> >> > >> I need to lookup an entitymanager using JNDI on websphere 6.1. My >> > >> persistence.xml is configured to use JPA. Although I use injection >> > (which >> > >> works) in almost all cases, I have a case where I would like the use >> of >> > >> entitymanager in a POJO and therefore would like to get it from JNDI >> > >> directly. >> > >> >> > >> The case is I have a cache which should be initialized with values >> from >> > >> the >> > >> database the first time it is accessed. The cache class is a POJO >> class. >> > >> >> > >> I don't seem to find any documentation regarding this. Is this a >> > >> websphere >> > >> limitation ? Also, currently this class is trying to create a >> factory >> of >> > >> its >> > >> own within the container using >> > >> Persistence.createEntityManagerFactory(unitname) but that fails as >> for >> > >> some >> > >> reason a SAX exception is thrown during parsing Persistence.xml file >> at >> > >> the >> > >> point where it tries to load the jar files containing the various >> entity >> > >> classes. >> > >> >> > >> So my second question is, is there some sort of restriction on the >> use >> > of >> > >> Persistence.createEntityManager() inside the container? >> > >> >> > >> Have uploaded the class as well as the persistence.xml file. >> > >> http://n2.nabble.com/file/n2121433/ParamValuesCache.java >> > >> ParamValuesCache.java >> > http://n2.nabble.com/file/n2121433/persistence.xml >> > >> persistence.xml >> > >> -- >> > >> View this message in context: >> > >> >> > >> http://n2.nabble.com/Entitymanager-lookup-using-JNDI-on-webshpere-tp2121433p2121433.html >> > >> Sent from the OpenJPA Users mailing list archive at Nabble.com. >> > >> >> > >> >> > > >> > > >> > >> > -- >> > View this message in context: >> > >> http://n2.nabble.com/Entitymanager-lookup-using-JNDI-on-webshpere-tp2121433p2137356.html >> > Sent from the OpenJPA Users mailing list archive at Nabble.com. >> > >> > >> > > -- View this message in context: http://n2.nabble.com/Entitymanager-lookup-using-JNDI-on-webshpere-tp2121433p2150209.html Sent from the OpenJPA Users mailing list archive at Nabble.com.