От чтения документации по Apache Ignite у меня создалось впечатление, что классы, которые я использовал (например) в Eclipse, автоматически (осмелюсь сказать, магически?) Отправляются в распределенные экземпляры сервера Ignite ,Apache Ignite: Classloader
У меня есть 3 ванильных сервера, без загрузки пользовательских классов (./bin/ignite.sh), все на локальном хосте. Они прекрасно смотрят друг на друга.
Я запускаю программу Eclipse с одним специальным классом, который я использую для загрузки в кеши. Простые POJO, Serializable и т. Д.
Когда я пытаюсь запустить кусок вычислительного кода, удаленные серверы жалуются на то, что класс не находится в загрузчике классов.
Caused by: java.lang.ClassNotFoundException: com.company.dms.ignite.batch.model.MessageCustAccount
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8213)
at org.apache.ignite.internal.MarshallerContextAdapter.getClass(MarshallerContextAdapter.java:185)
at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:607)
... 29 more
Есть ли еще магия?
ExecutorService exec = ignite.executorService(ignite.cluster().forRemotes());
// Iterate through all words in the sentence and create jobs.
quickCounter = 10;
while(it.hasNext() && quickCounter-- > 0){// "Print words using runnable".split(" ")) {
final String word = it.next();
// Execute runnable on some node.
String interna_cache_name = DMSIgniteHelpers.getInstance().getCurrentCacheLocation(ignite, MSG_CUST_ACCT_CACHE);
exec.submit(new IgniteRunnable() {
@Override public void run() {
String delimeter = "\u0001";
String[] lineTokens = word.split("\\"+delimeter);
String three_pk = null;
if(lineTokens[2].toString() != null && lineTokens[4].toString() != null && lineTokens[3] != null) {
String sor_id = new Integer(lineTokens[2]).toString();
String cust_id = new Long(lineTokens[4]).toString();
String acct_id = lineTokens[3];
three_pk = sor_id + cust_id + acct_id;
System.out.println("Looking for ("+sor_id+") ("+cust_id+") ("+acct_id+") : " + three_pk + " ----- ");
System.out.println("Going to query cache: " + interna_cache_name);
IgniteCache<Integer, MessageCustAccount> msgCustAccountCache = ignite.cache(interna_cache_name);
MessageCustAccount a = sqlQuery(msgCustAccountCache,three_pk);
System.out.println("*************=================\n\n" + a.toString() + "\[email protected]#[email protected]#[email protected]#[email protected]#[email protected]#[email protected]#[email protected]#[email protected]#[email protected]#[email protected]#[email protected]#$");
}
System.out.println(">>> Printing '" + word + "' on this node from grid job.");
}
});
}
следить, как и ожидалось, я создал файл JAR из моего источника. Поместите его в папку libs Ignite/gridgain и запустите мой код. Все отлично работало ... не удивляло ... но я действительно ожидал, что смогу сделать это без этого шага развертывания – chrisfauerbach