Skip to main content

FW: injections

Please note these java.net forums are being decommissioned and use the new and improved forums at https://community.oracle.com/community/java.
1 reply [Last post]
eve2
Offline
Joined: 2007-01-05

Hello Tim, everyone,

I am wondering if the below problem has been address. If so is there any documentation
written that you can point me out or any example or tutorial covering it?

Thanks

eve

From: gorgeous65@msn.com
To: ejb@glassfish.dev.java.net
CC: persistence@glassfish.dev.java.net
Date: Tue, 14 Oct 2008 21:26:57 +0100
Subject: RE: injections

Tim

everyone,

Your suggestion really works. If only I knew this straight from the start.

Thank you so much Tim.

eve

Date: Mon, 13 Oct 2008 16:26:56 -0500
From: Timothy.Quinn@Sun.COM
To: ejb@glassfish.dev.java.net
CC: persistence@glassfish.dev.java.net
Subject: Re: injections

Eve,

It's important to note that the Java EE 5 spec specifies that injection take place only in "managed" classes. In the app client, there are only two managed classes: the main class (as specified either in the manifest or on the appclient command line) and the optional log-in callback class.

Also, the spec also mandates that in the app client main class only static elements can be injected.

Here is one general approach that some people find works for them:

1. Define the injected static fields on the app client's main class:

@EJB
private static UsersRemote usersRemote;

2. Write a static accessor method on the app client's main class:
static UserRemote getUserRemote() {
return usersRemote;
}

3. From anywhere in any of the classes in your app client use Main.getUserRemote() when you need to use the EJB.

- Tim

Eve Pokua wrote:

Hello Ian/Everyone,

Yes,

I have carried out a lot more testing and found that this seems to work
on the first main class or any class that is run with appclient. Any other class
that I call from the main class, results as NullPointer when I try to insert. E.g:

If I try insert data of the same bean from the main class, I get the following:

C:\jee\STOCKINFOR2>appclient -client STOCKINFOR2-app-client.jar
successfully recorded new Department details

However, if I call the class from the main class, then I get the following:

C:\jee\STOCKINFOR2>appclient -client STOCKINFOR2-app-client.jar
Caught an Exception: can not insert new Department details
java.lang.NullPointerException
at stockinfor2.NewDepartclient.saveNewDeptdetails(NewDepartclient.java:1
22)
at stockinfor2.NewDepartclient.newdepatbutActionPerformed(NewDepartclien
t.java:113)

So I guess, I have to use just one JFrame client and use containers such as panels and so forth, to separate this.
Or I have to use lookups - Context.

This' now the limitation with server side JEE combined with Client side programming.

Thanks for your help.

eve

> Date: Thu, 2 Oct 2008 14:06:29 -0700
> From: Ian.Evans@Sun.COM
> To: ejb@glassfish.dev.java.net
> CC: persistence@glassfish.dev.java.net
> Subject: Re: injections
>
> Eve Pokua wrote:
> > I followed your advice and created a whole new application. Took a copy
> > of the tutorial client:
> >
> > package newapplication;
> > import javax.ejb.EJB;
> > import machinedetails2.*;
> > /**
> > *
> > * @author Administrator
> > */
> > public class Main {
> >
> > @EJB
> > private static UsersRemote usersRemote;
> > public Main(String[] args) {
> > }
> > /**
> > * @param args the command line arguments
> > */
> > public static void main(String[] args) {
> > Main client = new Main(args);
> > client.doTest();
> > }
> >
> > public void doTest() {
> > try {
> > usersRemote.createUser("t7","testing7","null","null");
> > System.out.println("successfull");
> >
> > } catch (Exception ex) {
> > System.err.println("Caught a Exception: not working ");
> >
> > ex.printStackTrace();
> > //System.exit(0);
> > }
> > }
> > }
> >
> >
> >
> > amended it, tested it on my application and for the first time in
> > a hundred years it works.
> >
> > So, sorry everyone, it was all my mistake trying to mix swing user interface
> > with JEE 5 injection. I also took a look at the dukesbank application
> > and got
> > confuse with the BankAdmin.java swing application. Thought I could do it.
>
> You can use injection in Swing apps provided the application is run via
> the application client container (appclient in GlassFish). It's possible
> that problem you had with your original Swing app was your use of an
> injected resource in your nested class. Or you may not have instantiated
> the inner class before calling actionPerformed().
>
> In general, it's easier to test your server application with a simple
> console test client, as you did above, before coding the GUI application.
>
> > Thanking you all for your patience and excuse me if I offended anyone.
>
> No offense at all. Glad you got through one tough patch to getting your
> app running.
>
> -ian

Reply viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
tjquinn
Offline
Joined: 2005-03-30

Hello, Eve.

There has been no change in the Java EE 6 spec, as compared to Java EE
5, about which app client objects are managed and which are not.
GlassFish continues to inject app client classes only if they are the
main class or the custom login callback class (which is optional).

We do not view this as a "problem" requiring a fix because the spec
tells exactly which classes are managed and, therefore, are subject to
injection, and GlassFish continues to implement the spec.

Or did I misunderstand and you are asking about something else?

- Tim

On Jan 22, 2011, at 10:22 AM, Eve Pokua wrote:

> Hello Tim, everyone,
>
> I am wondering if the below problem has been address. If so is there
> any documentation
> written that you can point me out or any example or tutorial
> covering it?
>
> Thanks
>
> eve
>
> From: gorgeous65@msn.com
> To: ejb@glassfish.dev.java.net
> CC: persistence@glassfish.dev.java.net
> Date: Tue, 14 Oct 2008 21:26:57 +0100
> Subject: RE: injections
>
> Tim
>
> everyone,
>
> Your suggestion really works. If only I knew this straight from the
> start.
>
>
> Thank you so much Tim.
>
> eve
>
>
>
>
>
> Date: Mon, 13 Oct 2008 16:26:56 -0500
> From: Timothy.Quinn@Sun.COM
> To: ejb@glassfish.dev.java.net
> CC: persistence@glassfish.dev.java.net
> Subject: Re: injections
>
> Eve,
>
> It's important to note that the Java EE 5 spec specifies that
> injection take place only in "managed" classes. In the app client,
> there are only two managed classes: the main class (as specified
> either in the manifest or on the appclient command line) and the
> optional log-in callback class.
>
> Also, the spec also mandates that in the app client main class only
> static elements can be injected.
>
> Here is one general approach that some people find works for them:
>
> 1. Define the injected static fields on the app client's main class:
>
> @EJB
> private static UsersRemote usersRemote;
>
> 2. Write a static accessor method on the app client's main class:
> static UserRemote getUserRemote() {
> return usersRemote;
> }
>
> 3. From anywhere in any of the classes in your app client use
> Main.getUserRemote() when you need to use the EJB.
>
> - Tim
>
> Eve Pokua wrote:
>
> Hello Ian/Everyone,
>
> Yes,
>
> I have carried out a lot more testing and found that this seems to
> work
> on the first main class or any class that is run with appclient.
> Any other class
> that I call from the main class, results as NullPointer when I try
> to insert. E.g:
>
> If I try insert data of the same bean from the main class, I get the
> following:
>
> C:\jee\STOCKINFOR2>appclient -client STOCKINFOR2-app-client.jar
> successfully recorded new Department details
>
> However, if I call the class from the main class, then I get the
> following:
>
> C:\jee\STOCKINFOR2>appclient -client STOCKINFOR2-app-client.jar
> Caught an Exception: can not insert new Department details
> java.lang.NullPointerException
> at
> stockinfor2.NewDepartclient.saveNewDeptdetails(NewDepartclient.java:1
> 22)
> at
> stockinfor2.NewDepartclient.newdepatbutActionPerformed(NewDepartclien
> t.java:113)
>
> So I guess, I have to use just one JFrame client and use containers
> such as panels and so forth, to separate this.
> Or I have to use lookups - Context.
>
> This' now the limitation with server side JEE combined with Client
> side programming.
>
> Thanks for your help.
>
> eve
>
>
>
> > Date: Thu, 2 Oct 2008 14:06:29 -0700
> > From: Ian.Evans@Sun.COM
> > To: ejb@glassfish.dev.java.net
> > CC: persistence@glassfish.dev.java.net
> > Subject: Re: injections
> >
> > Eve Pokua wrote:
> > > I followed your advice and created a whole new application. Took
> a copy
> > > of the tutorial client:
> > >
> > > package newapplication;
> > > import javax.ejb.EJB;
> > > import machinedetails2.*;
> > > /**
> > > *
> > > * @author Administrator
> > > */
> > > public class Main {
> > >
> > > @EJB
> > > private static UsersRemote usersRemote;
> > > public Main(String[] args) {
> > > }
> > > /**
> > > * @param args the command line arguments
> > > */
> > > public static void main(String[] args) {
> > > Main client = new Main(args);
> > > client.doTest();
> > > }
> > >
> > > public void doTest() {
> > > try {
> > > usersRemote.createUser("t7","testing7","null","null");
> > > System.out.println("successfull");
> > >
> > > } catch (Exception ex) {
> > > System.err.println("Caught a Exception: not working ");
> > >
> > > ex.printStackTrace();
> > > //System.exit(0);
> > > }
> > > }
> > > }
> > >
> > >
> > >
> > > amended it, tested it on my application and for the first time in
> > > a hundred years it works.
> > >
> > > So, sorry everyone, it was all my mistake trying to mix swing
> user interface
> > > with JEE 5 injection. I also took a look at the dukesbank
> application
> > > and got
> > > confuse with the BankAdmin.java swing application. Thought I
> could do it.
> >
> > You can use injection in Swing apps provided the application is
> run via
> > the application client container (appclient in GlassFish). It's
> possible
> > that problem you had with your original Swing app was your use of an
> > injected resource in your nested class. Or you may not have
> instantiated
> > the inner class before calling actionPerformed().
> >
> > In general, it's easier to test your server application with a
> simple
> > console test client, as you did above, before coding the GUI
> application.
> >
> > > Thanking you all for your patience and excuse me if I offended
> anyone.
> >
> > No offense at all. Glad you got through one tough patch to getting
> your
> > app running.
> >
> > -ian
> > --
> > Ian Evans
> > ian dot evans at sun dot com
> > Java EE technical documentation
> >
> >