当前位置: 首页 > 知识库问答 >
问题:

使用Hazelcast客户端部署选项部署Cassandra驱动程序时会出现以下错误

莘欣怿
2023-03-14

我正在尝试使用由Cassandra支持的MapStore。为此,使用ClientUserCodeDeploymentConfig将这些MapStore和MapLoader实现推送到Hazelcast成员,如下所示

public class CassandraMapStoreFactory implements MapStoreFactory<String, Long> {

    @Override
    public MapLoader<String, Long> newMapStore(String mapName, Properties properties) {
        return new CassandraPersistence(buildSession());
    }

    private Session buildSession() {
        try {
            ConsistencyLevel consistencyLevel = ConsistencyLevel.LOCAL_QUORUM;

            PoolingOptions poolingOptions = new PoolingOptions()
                    .setMaxRequestsPerConnection(HostDistance.LOCAL, 1024)
                    .setMaxRequestsPerConnection(HostDistance.REMOTE, 256);

            Cluster cluster = Cluster.builder()
                    .addContactPoints("15.207.180.45")
                    .withQueryOptions(new QueryOptions().setConsistencyLevel(consistencyLevel))
                    .withSocketOptions(new SocketOptions().setReadTimeoutMillis(12000))
                    .withPoolingOptions(poolingOptions)
                    .withSpeculativeExecutionPolicy(new ConstantSpeculativeExecutionPolicy(10000, 2))
                    .build();
            return cluster.connect("sample");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}
public static void main(String[] args) {
        ClientConfig config = new ClientConfig();
        ClientUserCodeDeploymentConfig codeDeploymentConfig = new ClientUserCodeDeploymentConfig().setEnabled(true)
                .addClass(CounterEntryProcessor.class).addClass(CassandraMapStoreFactory.class).addClass(CassandraPersistence.class).addJar("cassandra-driver-core-3.1.2.jar");
        config.setUserCodeDeploymentConfig(codeDeploymentConfig);
        config.setClassLoader(MapIdGeneratorWithClient.class.getClassLoader());

        HazelcastInstance hazelcastInstance = HazelcastClient.newHazelcastClient(config);

        // map processing logic
        
        hazelcastInstance.shutdown();
    }

我在初始化CassandRamapStoreFactory时看到以下问题。这似乎是Java9模块特性的问题,而我使用的是Java11。请指导我如何在客户机/服务器部署方法中使用Hazelcast map store中的Cassandra驱动程序

Caused by: java.lang.IllegalAccessError: class com.datastax.driver.core.AbstractAddressableByIndexData cannot access its abstract superclass com.datastax.driver.core.AbstractGettableByIndexData (com.datastax.driver.core.AbstractAddressableByIndexData is in unnamed module of loader com.hazelcast.internal.usercodedeployment.impl.ClassSource @3614246c; com.datastax.driver.core.AbstractGettableByIndexData is in unnamed module of loader com.hazelcast.internal.usercodedeployment.impl.ClassSource @4890c0d0)

共有1个答案

祁飞翰
2023-03-14

除非您绝对需要是动态的,否则我建议您不要使用用户代码部署。标称路径是用其类路径上的必要类来实际启动成员。

添加JAR就像设置classpath环境变量一样简单。它将与ZIP发行版和Docker映像一起工作。

下面是一个docker-compose.yaml文件的摘录,该文件展示了它:

version: '3'
services:
  server:
    container_name: hz
    image: hazelcast/hazelcast:4.0
    ports:
      - 5701:5701
    volumes:
      - /Users/nico/.m2/repository:/opt/hazelcast/classpath
    environment:
      - CLASSPATH=/opt/hazelcast/classpath/org/json/json/20200518/json-20200518.jar:/opt/hazelcast/classpath/org/jetbrains/kotlin/kotlin-stdlib/1.3.72/kotlin-stdlib-1.3.72.jar:/opt/hazelcast/classpath/com/github/kittinunf/fuel/fuel/2.2.3/fuel-2.2.3.jar:/opt/hazelcast/classpath/com/github/kittinunf/result/result/3.0.1/result-3.0.1.jar
 类似资料:
  • 部署过程中出错:部署应用程序[EnterpriseApplication1]时出现异常:UnsupportedClassVersionError:类mn.interactive.module.meta.dao.MetadataDao的主要或次要版本号不受支持,这些版本号大于Java Runtime Environment版本1.7.0_02中的版本号。有关详细信息,请参阅server.log。 将

  • 我有一个WildFly集群,它应该将所有主题消息共享给不同的节点,并在一个节点离线时保存它们。< br >在这种情况下,我需要耐用的订阅服务器。 我注意到如果我使用相同的clientID,系统会进行负载平衡。如果我将clientID或认购名称更改为唯一值,它就可以工作。 那么什么时候使用唯一的clientID,什么时候使用subscriptionName 我的答案是,每个节点的唯一clientID

  • 我有一个从另一个开发人员那里继承的应用程序,我对Java不太了解。这款应用程序几分钟前还能正常工作,但现在我得到了以下错误: 无法将JDBC驱动程序部署到C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.41\lib\jtds-1.2.jar。检查您是否具有对C:\Program Files\Apache Software

  • 每次都会出现以下错误!有相同的修复方法吗? 2021-10-07T10:47:31.133956 00:00heroku[路由器]: at=错误代码=H10 desc="应用程序崩溃"方法=GET路径="/"主机=zturlshortener.herokuapp.comrequest_id=c2f90e55-52f5-4955-a1d6-4028456cfddb fwd="103.199.173.

  • 我有一个Grails(2.5.3版)应用程序,当我通过选项:要部署的WAR文件在Tomcat中部署时,选择WAR文件,会出现以下错误。如果我尝试一个更简单的应用程序(大小、复杂度等),它运行得很好。 但是,如果在从manager运行应用程序时手动将war文件的内容复制到Tomcat路径:pathTomcat/webapps/myApplication,则效果良好。出现任何错误。 错误: Grail

  • 当我试图从netbean部署我的web应用程序时,我得到以下错误: 那是什么?为什么我会犯这个错误? 以下是来自的代码片段: 以下是netbeans服务器设置中的快照: