2017-12-01 5 views
0

EJB3ルールセッションを使用してJavaスタンドアロンクライアントからルール実行サーバーでルールを実行します。CORBA MARSHAL 0x4942f896、下位ブリッジから値を読み取ることができません:ClassNotFoundException

public class TestGameExecute { 
public static void main(String[] args) { 
    Map<String,Object> inputParameters = new HashMap<String, Object>(); 
    Map<String,Object> resMap = null; 
    IlrEJB3SessionFactory ejbSF; 
    IlrStatelessSession rs; 

    Game game = new Game(10,3); 
    inputParameters.put("GAME", game); 
    Hashtable<String, String> jndiProperties = new Hashtable<String, String>(); 
    jndiProperties.put("java.naming.provider.url", "corbaloc:iiop:********"); 
    jndiProperties.put("java.naming.factory.initial", "com.ibm.websphere.naming.WsnInitialContextFactory"); 
    jndiProperties.put("java.naming.security.principal", "username"); 
    jndiProperties.put("java.naming.security.credentials", "password"); 



    try { 
     ejbSF = new IlrEJB3SessionFactory(jndiProperties); 
     ejbSF.setRemote(true); 
     ejbSF.setStatelessRemoteJndiName("ilog.rules.res.session.impl.ejb3.IlrStatelessSessionRemote"); 
     rs = ejbSF.createStatelessSession(); 
     IlrSessionRequest request = ejbSF.createRequest(); 
     request.setRulesetPath(new IlrPath("/GAMLCDDRuleAppPhaseII/SiorkCDDRuleProject_PhaseII")); 
     request.setInputParameters(inputParameters); 
     request.setForceUptodate(true); 
     request.setTraceEnabled(true); 
     request.getTraceFilter().setInfoAllFilters(true); 
     IlrSessionResponse response = rs.execute(request); 
     resMap = response.getOutputParameters(); 
     Game retGame =(Game)resMap.get("GAME"); 
     System.out.println(retGame.getWinner()); 

    } catch (IlrSessionCreationException e) { 
     e.printStackTrace(); 
    } catch (IlrSessionException e) { 
     e.printStackTrace(); 
    } 
} 
} 

そして、私は下に、このエラーを取得する:スレッド内

例外 "P = 421238:O = 0:CT" java.rmi.MarshalException:CORBA MARSHALはありませんが0x4942f896。入れ子になった例外は次のとおりです。 org.omg.CORBA.MARSHAL: SERVER(id = 614476eb、host = gamlwm000t01.esunbank.com.tw)トレース開始: org.omg.CORBA.MARSHAL:基底ブリッジから値を読み取れません:基底のブリッジから値を読み取ることができません:ClassNotFoundException com.siork.cdd.Game vmcid:IBMマイナーコード:896完了:いいえ at com.ibm.rmi.iiop.CDRReader.read_value(CDRReader.java:1649) at com。 ibm.rmi.iiop.CDRReader.read_abstract_interface(CDRReader.java:1606) 、com.ibm.rmi.iiop.CDRReader.read_abstract_interface(CDRReader.java:1591) at ilog.rules.res.session.impl.ejb3。 _EJSRemote0SLIlrStatelessSessionEJB3_fdcc75a4_Tie.execute(_EJSRemote0SLIlrStatelessSessionEJB3_fdcc75a4_Tie.java:100) at ilog.rules.res.session.impl.ejb3._EJSRemote0SLIlrStatel com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:523) でcom.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:669) でessSessionEJB3_fdcc75a4_Tie._invoke(_EJSRemote0SLIlrStatelessSessionEJB3_fdcc75a4_Tie.java) でcom.ibm.rmi.iiop.ORB.process(ORB.java:523) at com.ibm.CORBA.iiop.ORB.process(ORB.java:1575) at com.ibm.rmi.iiop.Connection。 doRequestWork(Connection.java:3039) at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2922) at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:64) at (ThreadPool.java:1815) com.ibm.ejs.oa.pool.PooledThread.run 76eb、host = gamlwm000t01.esunbank.com.tw)TRACE END。私は、インターネット上で

をこのクエストについてsoulutionを検索している

Game.java

package com.siork.cdd; 

import java.io.Serializable; 

import ilog.rules.bom.annotations.BusinessName; 

public class Game implements Serializable { 
private static final long serialVersionUID = 1L; 
public static String GAME = "GAME"; 
private int banker_point; 
private int player_point; 
private String winner; 

public Game() {} 

public Game(@BusinessName("BANKER") int banker_point, 
      @BusinessName("PLAYER") int player_point) { 
    this.banker_point = banker_point; 
    this.player_point = player_point; 
} 
public int getBanker_point() { 
    return banker_point; 
} 
public void setBanker_point(int banker_point) { 
    this.banker_point = banker_point; 
} 
public int getPlayer_point() { 
    return player_point; 
} 
public void setPlayer_point(int player_point) { 
    this.player_point = player_point; 
} 
public String getWinner() { 
    return winner; 
} 
public void setWinner(String winner) { 
    this.winner = winner; 
} 
} 

答えて

0

あなたのJavaは、スタンドアロンクライアント "TestGameExecuteは" com.siork.cddしている必要があります。 RMIでこのクラスのインスタンスを整列解除できるようにするには、クラスパス上のゲームです。

+0

Game.javaを適切なクラスパスに入れなければならないということですか? _ Game.java | | _ TestGameExecute.java が、私はまだ同じエラーを取得し – AnthonyLu

+0

いいえ、あなたは、コンパイル済みのクラスファイルを配置する必要があり、Game.CLASSではなく、Javaソースファイル、 は com.siork.cddあなたのスタンドアローンクライアントのクラスパス上のGame.JAVA。クライアントを呼び出すために使用するコマンドラインは何ですか?このIBM ODM KnowledgeCenterのトピックは参考になります。https://www.ibm.com/support/knowledgecenter/SSQP76_8.9.1/com.ibm.odm.dserver.rules.res.developing/topics/tsk_res_dev_ejb_packag_j2ee.html –

関連する問題