2017-12-01 3 views
0

Ich möchte Regeln auf Rule Execution Server von einem eigenständigen Java-Client mithilfe einer EJB3-Regelsitzung ausführen.CORBA MARSHAL 0x4942f896, Wert kann nicht von der zugrunde liegenden Bridge gelesen werden: 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(); 
    } 
} 
} 

Und ich bekomme diese Fehlermeldung unter:

Exception in thread "P = 421.238: O = 0: CT" java.rmi.MarshalException: CORBA MARSCHALL 0x4942f896 Nein; Verschachtelte Ausnahme ist: org.omg.CORBA.MARSHAL: SERVER (id = 614476eb, Host = gamlwm000t01.esunbank.com.tw) TRACE START: org.omg.CORBA.MARSHAL: Kann nicht lesen Wert von zugrunde liegenden Brücke: Der Wert der zugrunde liegenden Bridge konnte nicht gelesen werden: ClassNotFoundException com.siork.cdd.Game vmcid: IBM-Nebencode: 896 abgeschlossen: Nein unter com.ibm.rmi.iiop.CDRReader.read_value (CDRReader.java:1649) at com. ibm.rmi.iiop.CDRReader.read_abstract_interface (CDRReader.java:1606) unter com.ibm.rmi.iiop.CDRReader.read_abstract_interface (CDRReader.java:1591) unter ilog.rules.res.session.impl.ejb3. _EJSRemote0SLIlrStatelessSessionEJB3_fdcc75a4_Tie.execute (_EJSRemote0SLIlrStatelessSessionEJB3_fdcc75a4_Tie.java:100) unter ilog.rules.res.session.impl.ejb3._EJSRemote0SLIlrStatel essSessionEJB3_fdcc75a4_Tie._invoke (_EJSRemote0SLIlrStatelessSessionEJB3_fdcc75a4_Tie.java) bei com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler (ServerDelegate.java:669) bei com.ibm.CORBA.iiop.ServerDelegate.dispatch (ServerDelegate.java:523) bei com.ibm.rmi.iiop.ORB.process (ORB.java:523) bei com.ibm.CORBA.iiop.ORB.process (ORB.java:1575) bei com.ibm.rmi.iiop.Connection. doRequestWork (Connection.java:3039) bei com.ibm.rmi.iiop.Connection.doWork (Connection.java:2922) bei com.ibm.rmi.iiop.WorkUnitImpl.doWork (WorkUnitImpl.java:64) um com.ibm.ejs.oa.pool.PooledThread.run (ThreadPool.java:118) bei com.ibm.ws.util.ThreadPool $ Worker.run (ThreadPool.java:1815) SERVER (ID = 6144 76eb, host = gamlwm000t01.esunbank.com.tw) SPURENDE.

habe ich

die soulution über diese Suche auf Internet suchen

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; 
} 
} 

Antwort

0

Ihr Java eigenständigen Client "TestGameExecute" muss com.siork.cdd haben. Spiel auf seinem Klassenpfad, um eine Instanz dieser Klasse über RMI deklarieren zu können.

+0

Meinst du, dass ich Game.java in den richtigen Klassenpfad setzen muss? com.siork.cdd | _ Game.java | _ TestGameExecute.java aber ich bekomme immer noch den gleichen Fehler – AnthonyLu

+0

Nein, Sie haben die kompilierte Klassendatei zu setzen, Game.CLASS, nicht die Java-Quelldatei, Game.JAVA auf dem Klassenpfad Ihres normalen Clients. Welche Befehlszeile verwenden Sie, um den Client aufzurufen? Sie können dieses IBM ODM KnowledgeCenter-Thema hilfreich finden: 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 –

Verwandte Themen