Пользовательская функция в Cassandra с выбрасыванием пользовательского класса Java не может быть решена ошибка - PullRequest
0 голосов
/ 23 мая 2018

При попытке запустить функцию в версии cassandra 3.11 появляется сообщение «Ошибка компиляции Java: невозможно преобразовать в тип данных».Я скомпилировал свой класс и развернул jar в каталоге cassandra lib.Может кто-нибудь, пожалуйста, помогите? Также, пожалуйста, дайте мне знать, совместима ли cassandra 3.11 для выполнения внешнего кода на основе JAR для UDF.

##    package getMap;

import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;

public class RollAgent {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Map<String, Integer> data = new HashMap<String, Integer>();
    data.put("abcd", 2);
    Map<String, Integer> returndata = RollAgent.grpagents(data);
     System.out.println(returndata);
}

private static Logger LOGGER = Logger.getLogger("string");
public static Map<String, Integer> grpagents(Map<String, Integer> data) {
    LOGGER.info("Steppin into agent rollups");
      Map<String, Integer> map = new HashMap<>();
      map.put("1", 10);
      map.put("2", 20);
      map.put("3", 30);
      return map;
  }
  }

   cassandra UDF:-

  CREATE OR REPLACE FUNCTION 
  glowroot1.grpagentNtracetallydur(state map<text, int>)  
  CALLED ON NULL INPUT 
  RETURNS map<text, int> 
  LANGUAGE java 
  as 'return getMap.RollAgent.grpagents(state);';
  ##

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Для 3.10 работ:

  1. Вы можете добавить свой класс в пакет com.datastax.driver.core
  2. Но вы не можете использоватьgetClassLoader for Logger.getLogger или вам необходимо установить патч ThreadAwareSecurityManager.java (комментарий super.checkPermission (perm))

    public void checkPermission(Permission perm)
    {
            if (!isSecuredThread())
                    return;
            // required by JavaDriver 2.2.0-rc3 and 3.0.0-a2 or newer
            // code in com.datastax.driver.core.CodecUtils uses Guava stuff, which in turns requires this permission
            if (CHECK_MEMBER_ACCESS_PERMISSION.equals(perm))
                    return;
            return; //super.checkPermission(perm);
    }
    
0 голосов
/ 24 мая 2018

Вы должны иметь возможность создать свой собственный метод, если вы используете Cassandra 2.2 или более поздние версии, хотя я обнаружил некоторые открытые проблемы, касающиеся 3: здесь является примером того, что UDF работает с 2.2, но не работаетс 3.10

Что я бы дважды проверил:

  • cassandra.yaml, по умолчанию пользовательские функции отключены в конфиге - установите enable_user_defined_functions = true, чтобы включить его.

  • после копирования файла jar в каталог $ CASSANDRA_HOME / lib перезапустите узел cassandra.

Также на основе документация Я бы изменил UDF:

CREATE OR REPLACE FUNCTION 
glowroot1.grpagentNtracetallydur(state map<text, int>)  
CALLED ON NULL INPUT 
RETURNS map<text, int> 
LANGUAGE java 
as $$return getMap.RollAgent.grpagents(state);$$;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...