0

jBoss 4.2.3 サーバーにデプロイされた EJB3 サービスを、スタンドアロン Java プログラムから (jnp ルックアップを使用して) 呼び出しています。すべてのデータ オブジェクトをシリアル化しました。EJB のメソッドを正常に呼び出しましたが、クライアント側のオブジェクトからデータが失われています。Application Server 内で EJB 側をデバッグしたところ、オブジェクトにデータがあることがわかりました。

次のコードを使用して EJB を呼び出しています。

public void doStuff () {

    // Component and its JNDI
    ResourceProviderServiceBeanRemote componentEJB;
    String JNDI_NAME_REMOTE = "ResourceProviderService/ResourceProviderServiceBean/remote";

    // Setup Environment
    Hashtable environment = new Hashtable();
    environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
    environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
    environment.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099"); // remote machine IP
    Context context = null;
    try {
        context = new InitialContext(environment);
        Object factoryObj = context.lookup(JNDI_NAME_REMOTE); //ejb-name
        componentEJB = (ResourceProviderServiceBeanRemote) factoryObj;

        UserContextCallBack userContext = new UserContextCallBackImpl(new UserDetails("username", "password", ""));
        componentEJB.setUserContextCallBack(userContext);

        QueryDetails query = new QueryDetails();
        query.setName("anything");
        List<String> cols = new ArrayList<String>();
        List<Row> rows = new ArrayList<Row>();
        ResponseDetails responseDetails = new ResponseDetails();
        componentEJB.doQuery(query, cols, rows, responseDetails);
        System.out.println(responseDetails);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }

}

注: サーバー側では「cols」、「rows」、および「responseDetails」にデータが取り込まれているのを確認できますが、クライアント側は同じ空の初期化オブジェクトのままです。

何か不足していますか?

--

シュネホ

4

1 に答える 1

0

これはばかげた間違いでした。RMI インターフェイスでメソッドを呼び出すと、すべてのオブジェクトが値渡しされることがわかりました。Return Type が必要ですが、それが欠けています。したがって、次のようにコードをアップしています。

// Created a new Response Object by combing all the OUT parameters as one object
// and updated the method on EJB to accept only IN paramters
DoQueryResponse response = componentEJB.doQuery(query);

これが私のような(愚かな)人の助けになることを願っています:)

于 2012-12-20T13:12:15.187 に答える