Mycol
Mycol

Reputation: 245

Application Client EJB Eclipse Glassfish

I'm using GlassFish Tools Bundle for Eclipse.

I need to create a bean and a client that tests it. The bean (and its interface) are the following.

package mykPK;

import java.math.BigDecimal;
import javax.ejb.*;

@Stateless
public class ConverterBean implements Converter {
    private BigDecimal yenRate = new BigDecimal("115.3100");

    private BigDecimal euroRate = new BigDecimal("0.0071");

    public BigDecimal dollarToYen(BigDecimal dollars) {
        BigDecimal result = dollars.multiply(yenRate);
        return result.setScale(2, BigDecimal.ROUND_UP);
    }
    public BigDecimal yenToEuro(BigDecimal yen) {
        BigDecimal result = yen.multiply(euroRate);
        return result.setScale(2, BigDecimal.ROUND_UP);
    }
}

The interface:

package mykPK;

import java.math.BigDecimal;
import javax.ejb.Remote;

@Remote
public interface Converter {
    public BigDecimal dollarToYen(BigDecimal dollars);
    public BigDecimal yenToEuro(BigDecimal yen);
}

I create them correctly in an EJB project and run them "as a server". All seems to start correctly.

Now I want to create a client. I tried to put the client inside the same project, creating a different project ("Application Client Project") or even creating a more general "E application project" with two subproject. The result is the same.

Now, the client code is the following

import java.math.BigDecimal;
import javax.ejb.EJB;
import mykPK.Converter; /*of course to to that, i reference in the client project the 
EJB project*/

public class ConverterClient {
    @EJB private static Converter converter;

    public ConverterClient(String[] args) {
    }
    public static void main(String[] args) {
        ConverterClient client = new ConverterClient(args);
        client.doConversion();
    }
    public void doConversion() {
        try {
            BigDecimal param = new BigDecimal("100.00");
            BigDecimal yenAmount = converter.dollarToYen(param);
            System.out.println("$" + param + " is " + yenAmount
                    + " Yen.");
            BigDecimal euroAmount = converter.yenToEuro(yenAmount);
            System.out.println(yenAmount + " Yen is " + euroAmount
                    + " Euro.");
            System.exit(0);
        } catch (Exception ex) {
            System.err.println("Caught an unexpected exception!");
            ex.printStackTrace();
        }
    }
}

When I run this file, i always get the same:

Caught an unexpected exception!
java.lang.NullPointerException
    at ConverterClient.doConversion(ConverterClient.java:17)
    at ConverterClient.main(ConverterClient.java:12)

I suppose this is beacause my client is not in the same container of the bean, and it is not "deployed" (I simply run the file). But when I tried the more general "Enterprise Application Project" the results were the same)

So, where to put the client and give him the access (with @EJB) to the Bean??

Upvotes: 1

Views: 3261

Answers (3)

mike
mike

Reputation: 1

A good example of this working can be found here Packaging your client for use with glassfish's application client container (via the "appclient" command) is shown, as is packaging it as a standalone Java app.

Upvotes: 0

Brett Kail
Brett Kail

Reputation: 33936

The stack trace suggests that you've directly launched the main method. In order to use injection in the main class, you must use the application client container.

Upvotes: 0

Preston
Preston

Reputation: 3271

You're trying to inject into a non-managed object. You need to grab the initial context and look it up.

Pretty much the same thing as here: cannot find my bean using the InitialContext.lookup() method

Upvotes: 0

Related Questions