• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Tim Cooke
  • paul wheaton
  • Jeanne Boyarsky
  • Ron McLeod
Sheriffs:
  • Paul Clapham
  • Liutauras Vilda
  • Devaka Cooray
Saloon Keepers:
  • Tim Holloway
  • Roland Mueller
Bartenders:

Problems with EJB Local and using servlets - null pointers

 
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi, all.

I'm not new to Java but I am new to EJBs. I am starting with EJB3 spec, running on weblogic 10 (it's what we've decided to go with at my job). I am attempting to create a simple bean, based on this interface:



I have the following set up in my web.xml:



With the expected result, if I type in:

http://127.0.0.1/HelloUserWeb/HelloUser?name=Dave
The output should be:
"Welcome to the world of Enterprise JavaBeans, Dave!"

I figure once I get the basic concept down, the rest will come to me very quickly

Alas, it is not working. Whenever I try to run the servlet, I'm getting a null pointer exception:



The EJB is annotated like so in my servlet:


I hope I have given everyone enough information. Other than the web.xml, I am not using any deployment descriptors. My package is laid like this:

EAR:
- EJB-JAR
- WAR
-- Servlet packed in JAR + web.xml in correct location.

Thanks,

- John
 
Ranch Hand
Posts: 257
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Could you please paste the code of



I guess the NullPointerException is in the servlet. Please check it.
 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
This is the source to the entire servlet.



As you can see, i'm ensuring there's a value in the input.... the null pointer seems to be because the bean itself is null. but my understanding is that the @EJB annotation should populate the bean automatically...

Thank you so much for your response.
 
Amit M Tank
Ranch Hand
Posts: 257
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Please read this
 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
So I tried a different approach, based on what I read on that page (since POJO based apps are really what we're after, not directly in the servlets).

I get a new error (yay, well not really).


Exception preparing module: EJBModule(HelloWorldAppEJB.jar) [EJB:011023]An error occurred while reading the deployment descriptor. The error was: : java.lang.ClassNotFoundException: Class bytes found but defineClass()failed for: 'ejb.learning.HelloWorldBean'.



This is a different app now (I decided to leave the old code intact to be updated later).

This is my EJB POJO


This is my locator



And my servlet's processRequest:



As you can see, it's trying to find the class, but can't, but it can find the bytes. I don't see how it's possible.

This is my application.xml

 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Ok, so that issue was a pure mismatch of java versions. I am able to get it to build and deploy.

But now I'm back to square one.
 
Amit M Tank
Ranch Hand
Posts: 257
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
So when you call Locator.getBean() are you getting some exception? You are getting NPE at what line now?
 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I'm getting NameNotFoundException from the locator.

 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
BTW.

This is the information about the bean from the context.


Application Name: HelloWorldApp
EJB Module Name: HelloWorldAppEJB.jar
Bean Name: HelloWorldBean



So I would assume the JNDI name would be "HelloWorldApp/HelloWorldBean/local" no?
 
Amit M Tank
Ranch Hand
Posts: 257
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
On the weblogic console, do a right click and view the JNDI tree and check the JNDI name of the bean. This is the JNDI name which needs to be used in the call.
 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I'm not sure what you mean. I'm using web console, can't really right click on anything.

Edit: Nevermind, I found it.

But I don't see the EJB in the tree.
[ July 10, 2007: Message edited by: John Ament ]
 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
don't know if it's of any help, but when I look at the deployment configuration, I see the following:

HelloWorldApp Enterprise Application
EJBs
-None to display
Modules
-HelloWorld Web Application
-HelloWorldAppEJB.jar EJB Module
Web Services
-None to display


Should my EJB be under EJBs?
 
Amit M Tank
Ranch Hand
Posts: 257
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
There would be something called as MyDomain-->Servers --> myserver

Right click on it. Click on View JNDI Tree. This will give you the JNDI names of all the deployed objects.
 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Yes yes I got to that point. But I don't see my deployment in there.
 
Amit M Tank
Ranch Hand
Posts: 257
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
That coud mean that your EJB is not deployed in the server. Could you check the weblogic console and see if the status of your EJB is deployed? Weblogic also provides you a mechanism to test your deployed EJBs through the console UI.
 
Amit M Tank
Ranch Hand
Posts: 257
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
You might want to look at this post


He mentions that you could use the same name as that provided in the ref-name in web.xml.
 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
EJB is definitely deployed, I am able to see it.

Can you please look at my earlier post, where I show the contents of the deployment configuration. To me it looks odd, but maybe it's wrong?
 
Amit M Tank
Ranch Hand
Posts: 257
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
these are showing inside the Deployments-->Application -->

You should see your web and EJB modules here. And should be able to test your EJB from this UI.
 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi. This is local only, so web service based testing isn't available. I do see it listed, as I mentioned before.

Name Test Point Comments
HelloWorldBean There are no test points for this EJB module.

So it sees it, but I still don't see it in the JNDI tree.
 
Amit M Tank
Ranch Hand
Posts: 257
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Did you try the stuff mentioned in the post



You might want to look at this post

He mentions that you could use the same name as that provided in the ref-name in web.xml.

 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
The items mentioned in that post don't make much sense, as I'm using JNDI look up, not web reference.
 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I'm making more progress.

Looks like the reason that it didn't show up in the JNDI tree was that it didn't implement a remote interface.

I got this about it now though:

Binding Name: HelloWorldAppHelloWorldAppEJB_jarHelloWorldBean_HelloWorldRemote

Class: ejb.learning.HelloWorldBean_kap09s_HelloWorldRemoteImpl_1000_WLStub

Hash Code: 337

toString Results: weblogic.rmi.internal.CollocatedRemoteRef - hostID: '7836518163334780112S::wl_server:examplesServer', oid: '337', channel: 'null'



Though I am a bit confused as to why it's only remote in the tree.

Edit: Ok, so I'm able to get the remote out of the tree, but the object it's giving me back is of type:

ejb.learning.HelloWorldBean_kap09s_HelloWorldRemoteImpl

When I'm expecting 1 of:
HelloBean
IHelloBean
HelloBeanLocal
HelloBeanRemote

Any idea?

[ July 10, 2007: Message edited by: John Ament ]

Edit #2: (haha edit superior, reply inferior)

I finally made a lot of progress.

I added the following annotation to the bean: @Stateless(name="HelloWorldBean",mappedName="HelloWorldBean") (instead of just @Stateless)
I now can pull it out of the context with the following JNDI name: HelloWorldBean#ejb.learning.HelloWorldRemote

I am still very confused as to why it's remote only.
[ July 10, 2007: Message edited by: John Ament ]
 
Amit M Tank
Ranch Hand
Posts: 257
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Now your bean has become a Remote Bean. The Object which it gives you is a Stub, which you can cst to your RemoteHome after you do a PortableRemoteObject.narrow().
 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I understand that...and that's what I'm trying to avoid.

I want to be able to use the Local interface to the bean.

But I read somewhere that you can only access Local from Servlet/JSP directly, and need to use JNDI from helper classes. Is this correct?
 
Ranch Hand
Posts: 1683
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Any client - JSP, servlet or EJB - can use the local interface. What is important is that the client and the EJB are part of the same application. In other words, you must build an EAR file containing the whole application code and then deploy that EAR file.

The client still has to go through JNDI and do lookup (as is the case with remote interfaces), but will now get a reference to a real Java object on the heap, instead of a stub to a remote object.
 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Roger,

That's what I thought too. That's how my app's setup as well. But it got the remote interface. I was hoping, and expecting, it to get the Local interface. Is there a different way I'm supposed to write my code? Can I use the EJB annotation somehow? That's what I wanted originally.
 
John Ament
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I"m going to start a new topic - I have a new problem now, not really relevant.

Thanks for all of your help.
 
Once upon a time there were three bears. And they were visted by a golden haired tiny ad:
Smokeless wood heat with a rocket mass heater
https://woodheat.net
reply
    Bookmark Topic Watch Topic
  • New Topic