Eclipse 在应用程序客户机中使用@EJB注入,两者都在同一个EAR中

Eclipse 在应用程序客户机中使用@EJB注入,两者都在同一个EAR中,eclipse,dependency-injection,glassfish,ejb,application-client,Eclipse,Dependency Injection,Glassfish,Ejb,Application Client,我已经找了好几天的时间来解决我的问题,在我看来不是很难,但显然是无法解决的问题 我有一个EAR项目,其中包含一些EJB、一个web客户机(工作正常),现在我添加了一个应用程序客户机模块 由于所有内容都在同一个项目中,我认为在应用程序客户机的主类中进行简单的@EJB注入就可以了。我还尝试了JNDI查找。 我使用eclipse和glassfish作为服务器,并尝试运行应用程序1。在eclipse中(这里我的注入bean为null)和2。从glassfish管理下载了客户端存根,并尝试使用sh app

我已经找了好几天的时间来解决我的问题,在我看来不是很难,但显然是无法解决的问题

我有一个EAR项目,其中包含一些EJB、一个web客户机(工作正常),现在我添加了一个应用程序客户机模块

由于所有内容都在同一个项目中,我认为在应用程序客户机的主类中进行简单的@EJB注入就可以了。我还尝试了JNDI查找。 我使用eclipse和glassfish作为服务器,并尝试运行应用程序1。在eclipse中(这里我的注入bean为null)和2。从glassfish管理下载了客户端存根,并尝试使用sh appclient-client(或-jar)OmazanClient.jar(以及隐藏在客户端存根文件夹中的其他两个jar)启动它。在那里,我得到的大多是“ClassNotFoundExeption:Main”之类的

对于注入,我的代码如下所示:

public class Main {
@EJB (mappedName="ejb/customerBean")
public static CustomerInterface customerBean;
@EJB (mappedName="ejb/productBean")
public static ProductInterface productBean;

public static void main(String[] args) {
    try{
        Main m = new Main();
        m.runDialog();
    }
    catch (Exception e){
        e.printStackTrace();
    }

}

/* (non-Java-doc)
 * @see java.lang.Object#Object()
 */
public Main() {
    super();

}
private void runDialog() throws Exception{
    System.out.println("Test");
    List<ProductDTO> productList = productBean.getAllProducts();

...
我已经尝试了很多类似JNDI查找的方法,给出了bean名称(参见示例)等等,但是要么找不到接口(查找),要么bean就是空的

然而,我也不太确定如何运行应用程序客户端。我认为GlassFish的appclient是正确的起点?它应该是一个控制台交互,因此没有摆动组件或任何类似的东西

现在我要感谢任何我可能错过的建议

干杯:)


找到了解决办法。不知何故,JNDI现在可以工作了。另一个问题是,我的db查询返回的是一个对象,而不是原语值或字符串-这导致了缓冲区错误


但是,我仍然对如何正确导出和运行应用程序客户端感到困惑。也许有人有主意

这里有一个很好的例子:。它已经有几年的历史了,但它确实提供了一个非常好的概述。

有关从EAR部署到Glassfish的远程EJB的JNDI查找示例,请参阅。
public class Main {
@EJB (mappedName="ejb/customerBean")
public static CustomerInterface customerBean;
@EJB (mappedName="ejb/productBean")
public static ProductInterface productBean;

public static void main(String[] args) {
    try{
        Main m = new Main();
        m.runDialog();
    }
    catch (Exception e){
        e.printStackTrace();
    }

}

/* (non-Java-doc)
 * @see java.lang.Object#Object()
 */
public Main() {
    super();

}
private void runDialog() throws Exception{
    System.out.println("Test");
    List<ProductDTO> productList = productBean.getAllProducts();

...
@Remote
public interface ProductInterface {

public int addProduct(String productName);
public void deleteProduct(int prodid);
public void updateProduct(int prodid, String newName);
List<ProductDTO> getAllProducts();
/**
 * Session Bean implementation productInterface
 *  */
@Stateless(mappedName="ejb/productBean")
@LocalBean
@WebService
public class ProductBean implements ProductInterface {

@EJB ProductEAO eao;
@EJB Conversion conv;

/**
 * Default constructor. 
 */
public ProductBean() {
    // TODO Auto-generated constructor stub
}

@Override
public int addProduct(String prodName) {
    return eao.addProduct(prodName);
}

@Override
public List<ProductDTO> getAllProducts() {

         List<ProductDTO> result = new ArrayList<ProductDTO>();
         List<Product> allProducts = eao.allProducts();
            for (Product pr : allProducts) {
               ProductDTO ci = conv.fromProduct(pr);
                result.add(ci);
            }
            return result;

}
Manifest-Version: 1.0
Main-Class: Main