JNDI Lookup code for EntityMananger inside SessionBean
Hi ,
I am using JNDI look up inside my stateless session Bean for Thread Safety issues .
That is
@PersistenceContext(Unitname="someunit" name= "somename")
Context ctx = new InitialContext();
EntityManager em = (EntityManager)ctx.lookup("somename")Now i am having 4 methods for (CRUD) inside my sessionBean
Do i need to use this lookup code inside my every method that is in all my 4 methods
Please tell me this if i am having four methods inside my Session Bean do i need to do lookup inside each of my method.
Thread safety issues? So you are saying that you actually had them, or you are assuming they will happen?
Because I have written multiple applications that simply inject an instance of the entity manager into the EJB and I have never had any problems. The whole idea of dependency injection is to minimize the need for manual JNDI lookups; why are you trying to swim against the current?
Similar Messages
-
JNDI lookup fails for client applications
I am currently porting our j2ee application to weblogic 7.0. The application already
runs successfully on Orion and Jboss. I have got everything working now except
for our client applications, which all fail with a JNDI lookup error. The exception
is:
javax.naming.NameNotFoundException: Unable to resolve 'java:comp.env/ejb/QualiferInstance'
Resolved: '' Unresolved:'java:comp' ; remaining name 'java:comp.env
/ejb/QualifierInstance'
at weblogic.rmi.internal.BasicOutboundRequest.sendReceive(BasicOutbound
equest.java:109)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemote
ef.java:262)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemote
ef.java:229)
at weblogic.jndi.internal.ServerNamingNode_WLStub.lookup(Unknown Source
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:338)
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:333)
at javax.naming.InitialContext.lookup(InitialContext.java:347)
at BatchIndexer.main(BatchIndexer.java:89)
I have looked up numerous postings on various mailing lists describing similar
problems, but none of them give an explanation which helps me.
I am convinced that I have the ejb deployment descriptors correct because all
our JSPs, servlets and session beans successfully lookup and use the EJBs.
I am also convinced that I have the correct code for the JNDI lookup in our client
applications, because they work perfectly well on Orion and Jboss and use syntax
which is described as correct in the jsee specification, i.e. "java:comp/env/..."
Here is the descriptor from weblogic-ejb-jar.xml for the EJB mentioned in the
example exception above:
<weblogic-enterprise-bean>
<ejb-name>QualifierInstance</ejb-name>
<jndi-name>comp/env/ejb/QualifierInstance</jndi-name>
</weblogic-enterprise-bean>
And here is the descriptor in the application-client.xml file:
<ejb-ref>
<ejb-ref-name>ejb/QualifierInstance</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type> <home>com.espritsoutron.xengine.ejb.metamodel.QualifierInstanceHome</home>
<remote>com.espritsoutron.xengine.ejb.metamodel.QualifierInstance</remote>
<ejb-link>QualifierInstance</ejb-link>
</ejb-ref>
And here is the code in the client application that attempts to perform the lookup:
qiHome = (QualifierInstanceHome)PortableRemoteObject.narrow(context.lookup("java:comp/env/ejb/QualifierInstance"),
QualifierInstanceHome.class);
The annoying thing is that I know I can make this work if I change the code to
omit the "java:" prefix, but I don't want to do this because then it would no
longer work on either Orion and Jboss.
P.S. I have also tried changing the jndi-name in the weblogic-ejb-jar descriptor
to "ejb/QualifierInstance" and just "QualifierInstance", but neither of these
make any difference. I even tried chaning it to "java:comp/env/ejb/QualifierInstance"
but that totally breaks the server.
Can anyone can please help with this?you can find the JNDI name in the JNDI tree from the admin console
right click on your server and choose "view jndi tree".
if you bind your ejb to ejb/QualifierInstance
you look it up with that exact same name ejb/QualifierInstance
Julian Fawcett wrote:
I am currently porting our j2ee application to weblogic 7.0. The application already
runs successfully on Orion and Jboss. I have got everything working now except
for our client applications, which all fail with a JNDI lookup error. The exception
is:
javax.naming.NameNotFoundException: Unable to resolve 'java:comp.env/ejb/QualiferInstance'
Resolved: '' Unresolved:'java:comp' ; remaining name 'java:comp.env
/ejb/QualifierInstance'
at weblogic.rmi.internal.BasicOutboundRequest.sendReceive(BasicOutbound
equest.java:109)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemote
ef.java:262)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemote
ef.java:229)
at weblogic.jndi.internal.ServerNamingNode_WLStub.lookup(Unknown Source
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:338)
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:333)
at javax.naming.InitialContext.lookup(InitialContext.java:347)
at BatchIndexer.main(BatchIndexer.java:89)
I have looked up numerous postings on various mailing lists describing similar
problems, but none of them give an explanation which helps me.
I am convinced that I have the ejb deployment descriptors correct because all
our JSPs, servlets and session beans successfully lookup and use the EJBs.
I am also convinced that I have the correct code for the JNDI lookup in our client
applications, because they work perfectly well on Orion and Jboss and use syntax
which is described as correct in the jsee specification, i.e. "java:comp/env/..."
Here is the descriptor from weblogic-ejb-jar.xml for the EJB mentioned in the
example exception above:
<weblogic-enterprise-bean>
<ejb-name>QualifierInstance</ejb-name>
<jndi-name>comp/env/ejb/QualifierInstance</jndi-name>
</weblogic-enterprise-bean>
And here is the descriptor in the application-client.xml file:
<ejb-ref>
<ejb-ref-name>ejb/QualifierInstance</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type> <home>com.espritsoutron.xengine.ejb.metamodel.QualifierInstanceHome</home>
<remote>com.espritsoutron.xengine.ejb.metamodel.QualifierInstance</remote>
<ejb-link>QualifierInstance</ejb-link>
</ejb-ref>
And here is the code in the client application that attempts to perform the lookup:
qiHome = (QualifierInstanceHome)PortableRemoteObject.narrow(context.lookup("java:comp/env/ejb/QualifierInstance"),
QualifierInstanceHome.class);
The annoying thing is that I know I can make this work if I change the code to
omit the "java:" prefix, but I don't want to do this because then it would no
longer work on either Orion and Jboss.
P.S. I have also tried changing the jndi-name in the weblogic-ejb-jar descriptor
to "ejb/QualifierInstance" and just "QualifierInstance", but neither of these
make any difference. I even tried chaning it to "java:comp/env/ejb/QualifierInstance"
but that totally breaks the server.
Can anyone can please help with this? -
How to compile the DB lookup code for XI:
Dear All,
i am very new to java and XI. Please let me know how to compile a Java Code for DB lookup and put in the imported Archive in IR. is there a seperate way to do it? Please guide me step by step. for performing Communication channel DB lookup.
I have gone through the Communication channel lookup of siva,
/people/siva.maranani/blog/2005/08/23/lookup146s-in-xi-made-simpler
but i am not understanding how to compile the given code in Advanced user functions area without any mandetory .jar files and header files. and put it into XI .
please guide me.
I mean i use a jdk1.4.2 Compiler as my XI server has 1.4.2 compiler.
Regards,
prakash
Edited by: senthilprakash selvaraj on Jun 17, 2008 4:03 AM
Edited by: senthilprakash selvaraj on Jun 17, 2008 4:04 AMHi,
You don't have to worry about compliation. XI will automatically comple it when you create the udf, activate it and test your mapping. In case of any error it will give compliation error there itself.
Regarding all the mandatory jar files which are required for compilation is already available in XI server.
If you are using any third party libraries(jar files) you just need to add the jar file in your external definition and need to import the necessary packages in User Define Function. I hope it answers all your questions.
Thanks
Amit
Reward point if answer is helpful -
Problem in JNDI Lookup of Deployable Proxy inside logon.par
Hi,
I have customized the Logon par file and have a functionality to call a webservice when the Password Reset happens.
<b>from the ResetPassword.jsp , SAPMLogonLogic.java is getting called ,and there is a method called performResetPassword().</b>
I am calling a Deployable Proxy in that method by using the below code,
<b>Gateway objGateway=(SMSGateway)ctx.lookup("java:comp/env/MailProxy");
MailGatewayViDocument objSMSGatewayViDocument=(MailGatewayViDocument )objGateway.getLogicalPort("wsPort_Document",MailGatewayViDocument.class);</b>
objMailGatewayViDocument.sendMail(...);
I am getting the Exception,
<b>com.sap.engine.services.jndi.persistent.exceptions.NameNotFoundException: Path to object does not exist at java:comp, the whole lookup name is java:comp/env/MailProxy.</b>
I have deployed the Deployable Proxy in the J2EE Engine and add this API Jar as the External Library (Project >Properties>Java Build Path ---> Add External jars...Added the .jar file generated in the Proxy Project).
Please let me know the possible solutions where i can call a deployable proxy inside the logon par file.
Thanks and Regards,
SekarHi Sekar!
Try this:
MailGateway objMailGateway=(MailGateway)ctx.lookup
("wsclients/proxies/sap.com/MailProxy/com.ms.sap.sms.MailProxy/wsPort_Document");
I have understood you're deploying a par file... if you are doing this way, don't forget to put a reference to the webservice in portalApp.xml:
<property name="PrivateSharingReference" value="SAPJ2EE::sap.com/com.ms.sap.sms.MailProxy"/>
Hope this can work.
Are you sure this destination is the one you are looking for?
sap.com/CHEPSMSProxy/com.ms.sap.sms.SMSProxy/wsPort_Document
It seems to be anther app. If this is the correct app then the JNDI should be:
MailGateway objMailGateway=(MailGateway)ctx.lookup
("wsclients/proxies/sap.com/CHEPSMSProxy/com.ms.sap.sms.SMSProxy/wsPort_Document");
If this fails and if you have have source code of the proxy app, check out the application.xml file, and look for Display name. Also look for the application-j2ee-engine.xml file, and look for the 'Vendor name', and post them please.
Eneko
Message was edited by:
Eneko Rodriguez -
NameNotFoundException in JNDI lookup in for stand alone App client in EJB3
I created an ejb module in netbeans 5.5 added a session facade (SavingsaccountFacade) and downloaded it to SunAppServer 9 (java EE 5). When I try and access the JNDI name in a stand alone java application client using the following code
Context initial = new InitialContext();
Object objref = initial.lookup("ejb/SavingsaccountFacade");
I get the following errors:
javax.naming.NameNotFoundException: SavingsaccountFacade not found
at com.sun.enterprise.naming.TransientContext.doLookup(TransientContext.java:203)
I have added j2ee.jar, appserv-rt.jar, and the dist/SavingsAccount.jar to the library. When I do a similar thing in J2EE1.4 it worked fine.
Can somebody help please.
ThanksHi Dave,
Here's our EJB FAQ entry that explains how EJB Global JNDI names are set in the
Java EE 5 SDK and Glassfish. The most likely explanation is that the name used
in the client does not match the one assigned to your EJB in sun-ejb-jar.xml.
https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#SessionBeanGlobalJNDINameAssignment
--ken -
Manual JNDI lookup for EJB3 between different Application Server Instances
Hi all,
i have spent quite some time looking into this problem and searching the net but i just can't figure out for the life of me what i am doing wrong so i hope someone here can give me a clue or a good resource where i can look it up myself.
I am currently doing some interoperability tests concerning EJB calls between Glassfish and Weblogic 10. In my test setup i have an EJB deployed in a jar file on one server and a servlet in a war file deployed on the other. The objective is to try to look up and call the EJB from the servlet. As there seem to be some issues with injection in Weblogic 10 i set that one aside for now (i have opened a case at BEA support for this) but i would like to do a plain old JNDI lookup to obtain the EJB.
The online tutorials and FAQs i have read so far all state that this can be done the same way as it works for EJB2.x, at least if i understood them correctly. The interessting thing is, when i deploy an EJB2.x bean i can look it up without problems, but when i try to do the same with the EJB3 bean the name cannot be found. On the other hand when listing all contents of the JNDI tree in Glassfish from a stand alone application i can see entries for both EJBs of the type java.naming.Reference (in Weblogic i can also see entries for both, but the ones for EJB3 are of some weird internal weblogic types, which i put down as a weblogic problem for now).
The lookup code for the servlet running in weblogic looks like this:
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "corbaname:iiop:1.2@localhost:3700");
Object myEjb = new InitialContext(env).lookup("JNDINameDisplayedByContextListing");
I know that the preferred way would be to have the corbaname put into weblogic.xml/sun-web.xml and just use an InitialContext without an environment to perform the lookup but i wanted to get rid of any additional indirections to pinpoint the source my problem and it should work this way, too. As i said, it works when i target an EJB2.x bean but not with the EJB3 one, so i guess i am doing something wrong there. The jar file contains the interface of the bean annotated with @Remote and the implementation of the interface annotated with @Stateless, i also tried setting the mappedName attribute for the bean and use that name as JNDI name, but that also fails. In addition i added an ejb-jar.xml to the jars META-INF containing the following:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
version="3.0">
<enterprise-beans>
<session>
<ejb-name>SecurityTest3EJB</ejb-name>
<ejb-class>
testcase.ejb.SecurityTestBean
</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
But the ejb-name specified there does not show up in a context listing, so i would guess that means the file is ignored or only accessible from within the same application server (note, there is no indication of any problems in the Glassfish log when deploying the jar file).
This might be just a stupid mistake by me, but i just can't figure it out at the moment, so any advice will be greatly appriciated.
Thanks, ChrisI think i stumbled across something now. From some posts it seems to me that the EJB3 spec does not require EJBs to be accessible from a remote location, since this can be achieved by using the @RemoteHome annotation and performing a EJB2.x compliant look up. Is that correct?
-
Using external LDAP server for WL JNDI lookups
I'm trying to find out if it is possible to re-direct JNDI calls to the WL
server to an external LDAP server. I know you can install an external LDAP
server for security purposes, but I would like to use an external LDAP
server to handle all JNDI lookups (like for JNDI EJB name location, etc.).
Is this possible?You typically need to use our JNDI store. We strongly recommend this for
performance reasons..
You can use the JNDI To LDAP bridge which is available from the sun web
site.
Michael Girdley
BEA Systems Inc
"Jack Archer" <[email protected]> wrote in message
news:[email protected]..
I'm trying to find out if it is possible to re-direct JNDI calls to the WL
server to an external LDAP server. I know you can install an external LDAP
server for security purposes, but I would like to use an external LDAP
server to handle all JNDI lookups (like for JNDI EJB name location, etc.).
Is this possible? -
JNDI lookup name in a standalone oc4j instance
Hi,
Could you please let me know how to create a JNDI lookup name for a database in a stanalone OC4j Instance?
Both OC4J and oracle 9i database are in the same server.
Thanks in advance,
SukonyaHi,
I have the oracle 9i database as well as the oc4j instance in my local machine.I am trying to deploy a J2ee Application on the OC4j instance,using eclipse IDE.I have not created any connection pool or datasource in the oc4j instance but after i build the application I see that the connection pool and datasource instance have been created in the OC4j instance.
following are the contents of the build.xml file(for the ant build tool)
<?xml version="1.0" encoding="UTF-8" ?>
- <project name="TicketLoggingSystem" default="bind-web-app" basedir="../">
<property name="app.server" value="D:/oc4j/j2ee/home" />
<property name="dest.dir" value="${basedir}/dest" />
<property name="war.file" value="${dest.dir}/TicketLoggingSystem.war" />
<property name="ear.file" value="${dest.dir}/TicketLoggingSystem.ear" />
<property name="web.inf" value="${basedir}/WEB-INF" />
<property name="web.classes" value="${dest.dir}/classes" />
<property name="app.xml" value="${basedir}/application.xml" />
<property name="src.dir" value="${basedir}/src" />
<property name="oc4j.host" value="localhost" />
<property name="oc4j.admin.port" value="23791" />
<property name="oracle.home" value="D:/oc4j" />
<property name="j2ee.home" value="${oracle.home}/j2ee/home" />
<property name="oc4j.admin.username" value="oc4jadmin" />
<property name="oc4j.admin.password" value="welcome" />
<property name="oc4j.ormi" value="ormi://${oc4j.host}:${oc4j.admin.port}" />
<property name="app.name" value="TicketLoggingSystem" />
<property name="jdbc.url" value="jdbc:oracle:thin:@localhost:1521:80" />
<property name="jdbc.username" value="scott" />
<property name="jdbc.password" value="tiger" />
<property name="connection.driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="connection.datasource" value="oracle.jdbc.pool.OracleDataSource" />
<property name="xa.location" value="jdbc/xa/MpsiDS" />
- <!-- Delete dest folder
-->
- <target name="init">
<delete dir="${dest.dir}" includeemptydirs="true" />
<mkdir dir="${dest.dir}" />
<mkdir dir="${web.classes}" />
</target>
- <!-- Compile all Java files
-->
- <target name="wscompile">
- <javac srcdir="${src.dir}" destdir="${web.classes}" deprecation="on" debug="on">
<exclude name="**/*.properties,**/*.xml" />
- <classpath>
<fileset dir="${web.inf}/lib" includes="*.jar" />
<fileset dir="${app.server}/lib" includes="servlet.jar" />
</classpath>
</javac>
</target>
- <!-- Build Web archive file
-->
- <target name="buildWar" depends="init,wscompile">
- <war destfile="${war.file}" webxml="${web.inf}/web.xml">
- <fileset dir="${basedir}">
<include name="content*/**" />
</fileset>
<webinf dir="${web.inf}" includes="*.xml,*.tld" excludes="web.xml" />
<classes dir="${web.inf}/classes" />
<lib dir="${web.inf}/lib" includes="*.jar" />
</war>
</target>
- <!-- Build Enterprsie Archive
-->
- <target name="buildEar" depends="buildWar">
- <ear destfile="${ear.file}" appxml="${app.xml}">
<fileset dir="${dest.dir}" includes="*.war" />
</ear>
</target>
- <!-- Checking availability of oc4j
-->
- <target name="check-oc4j-available">
<echo message="------> Checking to see if OC4J is started ." />
<echo message="[checking oc4j on machine =${oc4j.host}]" />
<echo message="[port=${oc4j.admin.port}]" />
- <condition property="oc4j.started">
<socket server="${oc4j.host}" port="${oc4j.admin.port}" />
</condition>
</target>
- <!-- Remove data source
-->
- <target name="remove-data-source" depends="check-oc4j-available" if="oc4j.started">
<echo message="Removing DataSource" />
- <java jar="${j2ee.home}/admin.jar" fork="true">
<arg value="${oc4j.ormi}" />
<arg value="${oc4j.admin.username}" />
<arg value="${oc4j.admin.password}" />
<arg value="-application" />
<arg value="${app.name}" />
<arg value="-removeDataSource" />
<arg value="-location" />
<arg value="jdbc/TicketLoggingSystem" />
</java>
<echo message="Removed DataSource Successfully" />
</target>
- <!-- Undeploy
-->
- <target name="undeploy" depends="remove-data-source" description="Undeploying the application" if="oc4j.started">
<echo message="Undeploying the Application ${app.name}" />
- <java jar="${j2ee.home}/admin.jar" fork="true">
<arg value="${oc4j.ormi}" />
<arg value="${oc4j.admin.username}" />
<arg value="${oc4j.admin.password}" />
<arg value="-undeploy" />
<arg value="${app.name}" />
</java>
<echo message="Undeploying the Application ${app.name} is Successful" />
</target>
- <!-- Deploy
-->
- <target name="deploy" depends="undeploy,buildEar" if="oc4j.started">
<echo message="Deploying the Application ${app.name}" />
- <java jar="${j2ee.home}/admin.jar" fork="true">
<arg value="${oc4j.ormi}" />
<arg value="${oc4j.admin.username}" />
<arg value="${oc4j.admin.password}" />
<arg value="-deploy" />
<arg value="-file" />
<arg value="${ear.file}" />
<arg value="-deploymentName" />
<arg value="${app.name}" />
</java>
<echo message="Deploying the Application ${app.name} is Successful" />
</target>
- <!-- Create data source
-->
- <target name="create-data-source" depends="check-oc4j-available" if="oc4j.started">
<echo message="Creating DataSource for Application ${app.name}" />
- <java jar="${j2ee.home}/admin.jar" fork="true">
<arg value="${oc4j.ormi}" />
<arg value="${oc4j.admin.username}" />
<arg value="${oc4j.admin.password}" />
<arg value="-application" />
<arg value="${app.name}" />
<arg value="-installDataSource" />
<arg value="-jar" />
<arg value="${oracle.home}/jdbc/lib/ojdbc14dms.jar" />
<arg value="-url" />
<arg value="${jdbc.url}" />
<arg value="-connectionDriver" />
<arg value="${connection.driver}" />
<arg value="-location" />
<arg value="jdbc/TicketLoggingSystem" />
<arg value="-username" />
<arg value="${jdbc.username}" />
<arg value="-password" />
<arg value="${jdbc.password}" />
<arg value="-className" />
<arg value="${connection.datasource}" />
</java>
<echo message="Created DataSource Successfully for Application ${app.name}" />
</target>
- <!-- Binding web-app
-->
- <target name="bind-web-app" depends="deploy,create-data-source" if="oc4j.started">
<echo message="executing bind web app" />
- <java jar="${j2ee.home}/admin.jar" fork="true">
<arg value="${oc4j.ormi}" />
<arg value="${oc4j.admin.username}" />
<arg value="${oc4j.admin.password}" />
<arg value="-bindWebApp" />
<arg value="${app.name}" />
- <!-- app deployname
-->
<arg value="${app.name}" />
- <!-- web module name
-->
<arg value="default-web-site" />
- <!-- web site name
-->
<arg value="/${app.name}" />
- <!-- context root
-->
</java>
<echo message="Access the application using: http://${oc4j.host}:8888/${app.name}" />
</target>
</project>
Following are the contents of Oc4J home->services->jdbc resources:
Datasource:
Name jdbc/TicketLoggingSystem
Application TicketLoggingSystem
JNDI Location jdbc/TicketLoggingSystem
Connection Pool
Managed by OC4j
Test
when i click the datasource name,I see that its type is Native datasource with no related connection pool.
Whereas for the default datasource oracleDS,
Type Managed Data Source
Connection Pool Example Connection Pool
However on deployment a connection pool is also created along with the datasource
Name jdbc/TicketLoggingSystem_connectionPool
Application TicketLoggingSystem
ConnectionFactory class : oracle.jdbc.pool.OracleDataSource
Do we need to bind this connection pool to our datasource?If yes how is it done.And if that is not required,why is this connection pool created?Are the datasource and connection pool already bound to each other?
Also when I test either the datasource or connection pool,it says
Confirmation
Connection to "jdbc/TicketLoggingSystem_connectionPool" established successfully
or
Connection to "jdbc/TicketLoggingSystem" established successfully.
and displays both the connection pool and datasource details together for both the tests.
In my java code,while trying to establish connection to the database what should I mention in lookup i.e,
InitialContext context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup(" jdbc/TicketLoggingSystem or jdbc/TicketLoggingSystem_connectionPool");
con = dataSource.getConnection();
Sorry if I am sounding novice.Thanks a lot in advance,
Sukanya -
Calling non ejb from ejb using jndi lookup
Is it possible to call a non ejb java object from an ejb using a jndi lookup?
For example, we have a java class where main registers itself with our application server (JBoss 3.0.1). We have a test client that can use jndi to look up the object, but we can't get an ejb inside the application server to use the object.
Are we trying to do the impossible? If my question is not clear, please let me know so I can try to clarify.
ThanksJNDI uses factories to create objects.
It's possible that JBoss has a Bean Factory which you can use to create your instance.
Tomcat has a Bean factory in its JNDI implementation. I use it just as you have indicated.
The JBoss documenation may help?
Dave -
Problem in JNDI lookup.
Hi,
I have a JSP running on tomcat. And it accesses an EJB running on weblogic thru a local bean. When the following JNDI lookup code is executed, I get errors. Errors follow the code. Please Help.
Thanks!
public InitialContext getInitialContext() throws NamingException
// Utils.Trace("****** in getInitialContext ******");
// web logic server and jsp engine NOT weblogic
if (url != null && url.length() > 0)
//Hashtable env = new Hashtable();
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
// assumes that JSP and EJB container are on the same box,
// otherwise EJB hostname should be specified
//env.put(Context.PROVIDER_URL, "t3://localhost:7001");
env.put(Context.PROVIDER_URL, url);
System.out.println("Using t3 services");
return new InitialContext(env);
// weblogic server and weblogic jsp, or inprise server (JBuilder's default JSP)
else
System.out.println("Not Using t3 services");
return new InitialContext();
The ERRORS are
=====================================================================
org.apache.jasper.JasperException: weblogic/common/T3Services
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:248)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:289)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:240)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2396)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:405)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:380)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:508)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:533)
at java.lang.Thread.run(Thread.java:479)
root cause
javax.servlet.ServletException: weblogic/common/T3Services
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:497)
at org.apache.jsp.login_jsp._jspService(login_jsp.java:276)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:136)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:204)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:289)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:240)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2396)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:405)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:380)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:508)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:533)
at java.lang.Thread.run(Thread.java:479)Your JSP trying to load the weblogic context factory to perform the lookup, but can't find it. Your servlet engine must have access to the weblogic.jndi.WLInitialContextFactory class (in weblogic.jar).
-
I want to use JNDi lookup for DB. Where should i specify them. Rigtnow i have given the hibernate connections in persistance xml file with user name pwd etc. But i dont want to do this. I want to use JNDI lookup and configure my weblogic for the JNDI. What are the changes I need to make in the application context and persistance xml files. Pls help?
my persistance .xml file looks like this,
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="1.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="jpaPersistance" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.ggg.jp.model.bo.individual</class>
<exclude-unlisted-classes/>
<properties>
<property name="hibernate.archive.autodetection" value="class, hbm"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
<property name="hibernate.connection.password" value="test"/>
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="hibernate.connection.username" value="test"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
</properties>
</persistence-unit>
</persistence>
Application context looks like this,
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- <bean/> definitions here -->
<context:annotation-config/>
<bean id="demoDataServiceImpl" class="com.gg.jp.model.services.impl.DemoDataServiceImpl" />
<bean id="recordGeneratorWebServiceHandler" class="com.gg.jp.webservice.RecordGeneratorWebServiceHandler">
<property name="service" ref="demoDataServiceImpl"/>
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="jpaPersistance"/>
</bean>
<tx:annotation-driven/>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager" >
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
</beans>Me again!
So I found that I can't do jndi lookup (NamingException) for the datasource as mentioned, in the init method.
However, the very same jndi lookup was successful in the overridden authenticate method, called by oc4j when trying to authenticate the user.
Go figure!
TIA,
- nik. -
Hi
I have an issue with Lookup values of leave reason in terminate employment form.
It is displaying only 3 leave reasons(Deceased, Gross Misconduct, Retirement). I have switched to Application developer and checked for the "LEAV_REAS" lookup values. there are 48 lookup codes and meanings and all are active.
Why these are not being displayed in the terminate employment form?
And I've added a new lookup code for the existing code. This is appearing in the terminate employment form.
My doubt is why the seeded codes are not being displayed and why the custom added is appearing.
Regards
BalaKrishnaBalaKrishna Reddy Avuthu wrote:
Hi Vinayak
Thanks for your reply.
I have checked whether the codes are enabled or not and dates too. There is no problem with them.
How can I change the legislation you were talking about? You cannot change the legislation for existing seeded values. If you need to use some reasons that are defined for other legislations, i suggest creating them and using the same.
>
Is there any problem if I define own codes without any tags? What could be the affect in legislation perspective? There is no problem with creating lookup codes which are not having tags, you can and will be able to use the new codes. However, they will be available in all business groups within your installation.
To check the legislation code for business groups, use the following query.
select name, legislation_code from per_business_groups
Edited by: Vinayaka Prabhu on Apr 24, 2009 2:08 PM -
JNDI lookup for external SessionBean fails
Hello, i have a problem i've been trying to solve all day and would appreciate it if you could help me.
I have an Ear file with an EJB Session Bean(EAR: EigenlijstenEar/EJB: EigenlijstenEJB) which i am attempting to use in a servlet in another web/ear (Web: HagaPortalWeb/EAR: HagaPortalEar). I have read and followed the guidance of http://help.sap.com/saphelp_nw04/helpdata/en/55/29ed5eff965448941c0b42f01b9804/frameset.htm, but to no avail.
The error i get is: com.sap.engine.services.jndi.persistent.exceptions.NamingException: Exception during lookup operation of object with name webContainer/applications/hagaziekenhuis.nl/HagaPortalEar/HagaPortalWeb/java:comp/env/ejb/EigenlijstenSessionBean, cannot resolve object reference. [Root exception is com.sap.engine.services.jndi.persistent.exceptions.NameNotFoundException: Path to object does not exist at EigenlijstenEar, the whole lookup name is localejbs/hagaziekenhuis.nl/EigenlijstenEar/EigenlijstenSessionBean.]
my lookup code in a servlet in HagaPortalWeb:
Context ctx = new InitialContext();
EigenlijstenSessionLocalHome eigenlijstenHome =
(EigenlijstenSessionLocalHome) ctx.lookup(
"java:comp/env/ejb/EigenlijstenSessionBean");
content of my web.xml in HagaPortalWeb:
<ejb-local-ref>
<ejb-ref-name>ejb/EigenlijstenSessionBean</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local-home>nl.hagaziekenhuis.medisurf.ejbs.eigenlijsten.EigenlijstenSessionLocalHome</local-home>
<local>nl.hagaziekenhuis.medisurf.ejbs.eigenlijsten.EigenlijstenSessionLocal</local>
<ejb-link/>
</ejb-local-ref>
content of my application-j2ee-engine.xml in Ear project HagaPortalEar:
<reference
reference-type="hard">
<reference-target
provider-name="hagaziekenhuis.nl"
target-type="application">EigenlijstenEAR</reference-target>
</reference>HI Arie,
If you are accessing enterprise beans with J2EE clients (servlets, JSP, other enterprise beans, J2EE application clients), do not specify and use this arbitrary JNDI name. Instead, define EJB references in the clientsu2019 deployment descriptors and access the beans using these references. For more information, check the following link
http://help.sap.com/saphelp_nw04/helpdata/en/a0/019b3e25f95f14e10000000a114084/content.htm
if the above does not work try the following:--
Try to lookup the Ejb by its JNDI name given in the EJB-J2ee-engine.xml file if it does not exist there give any valid name and try to lookUp.
or try to lookup the ejb by its default jndi name.
"localejbs/bean name>"
http://help.sap.com/saphelp_nw04/helpdata/en/38/3e5a4201301453e10000000a155106/frameset.htm
in the Above link refer the second option "Lookup from a Non-J2EE Java Application"
Siddharth
Edited by: Siddharth Jain on Aug 22, 2008 7:13 AM -
JNDI Lookup in JSP fails for EJB 3.0
I am new to Java technology. I read the EJB FAQ, NetBeans docs and may forum discussions and I am still confused with the error I am having.
Background:
I have developed a persistance bean and related sessions beans (similar to the customer-cmp-ear application in the Java App Server samples). Now I am trying to access this bean using a JSP. After deploying the war file in the App Server and try to access the page, I get the following error.
javax.naming.NameNotFoundException: No object bound to name java:comp/env/ConsumerSessionLocal
After reading many articles, I understood that I dont have to prepare any descriptors, or JAR files for EJB 3.0.
Environment Details:
Java App Server Ver 9.0
NetBeans 5.5
I normally build the war files using NetBeans.
I use App Server Admin console to deploy the web applications using the above war file.
EJB details:
Persistance EJB : person.java
Session Objects
Consumer.java (this implements ConsumerSessionLocal, ConsumerSessionRemote). This Stateless bean accesses the methods in person.java.
ConsumerSessionLocal.java - local interface
ConsumerSessionRemote.java - remote interface
SearchConsumer.jsp
This JSP page is calling the ConsumerSessionLocal using the JNDI lookup through InitialContext.
Here is the Code snippet:
try {
InitialContext ic = new InitialContext();
Object o = ic.lookup("java:comp/env/ConsumerSessionLocal");
ConsumerSessionLocal consSession = (ConsumerSessionLocal) o;
I am able to see the jsp page in the browser, however, after a submit action, I get the Java Naming Exception error.
javax.naming.NameNotFoundException: No object bound for java:comp/env/ConsumerSessionLocal
I would appreciate your help/any of your thoughts.
Thanks in advance.
-RamI did not really solve it. Instead I used some of the tutorials that used JNDI lookup and modified those as my way forward. I did not really find out exactly what I was doing wrong.
/Anders -
I am in the process of cleaning up a rather large codebase and am looking for the best way (or good methodologies I can choose from) for specifying the jndi lookup name. Our current code base has the following methods for specifying the lookup name:
1) hard-coded strings
2) constant defined in the file making lookup
3) constant defined in external interface
4) constant defined in EJB Home interface
My initial thought was to create a single interface and put all the constants within it and have any class that wants to perform a lookup implement that interface. But before I went and did that I wanted to see if there were any other methods out there.
I searched the forums (EJB/JNDI) but could not find anything that specified any method that was preferred.
TIAI am in the process of cleaning up a rather large
codebase and am looking for the best way (or good
methodologies I can choose from) for specifying the
jndi lookup name. Our current code base has the
following methods for specifying the lookup name:
1) hard-coded strings
2) constant defined in the file making lookup
3) constant defined in external interface
4) constant defined in EJB Home interface
constant defined in external interface
My initial thought was to create a single interface
and put all the constants within it and have any
class that wants to perform a lookup implement that
interface.
sounds great !
Maybe you are looking for
-
plugin-container crashes and hangs many times daily all my time eaten up by upgrading too frequently to new Ffox versions, only to find that I must then spend a whole day jumping thru hoops upgrading almost all of my add-ons too. I now find, to my ho
-
How do i put in password for outgoing server on email account
From yesterday afternoon I cannot get emails, or send them, on ipad, ipod or PC using Mozilla. On Ipad and ipod it tells me my password is wrong. I have tried re-entering password but cannot remember how to put password in for the outgoing server
-
Excise Entries in case of sales return
Dear sap mites Can any one guide me during sales return how excise gets reversed as we would have already paid to the govt during sales how do we take input credit back please do explain with GL account entries and an example if possible will be ver
-
I am looking to convert a dvd to flash for the web. my dvd involves a lot of scripts and I am looking for somthing that will convert the entire dvd with scripts and menus to a .swf. I'm not looking for a flash ideo converter...I need everything as is
-
this Started a Few weeks ago, since my creative console launcher stopped working. i try to uninstall the sound card in the add/ remove programs, but it simply crashes when i click remove on it. it says it has encountered a problem and cannot recover