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 suchenGame.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;
}
}
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
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 –