Ignite javax.cache.CacheException:未能分析查询。找不到表

Ignite javax.cache.CacheException:未能分析查询。找不到表,ignite,Ignite,我的代码启动节点并执行loadCache()方法,但当对其应用SQL查询时,它会给出标题中提到的错误。以下是我的配置、缓存存储和加载缓存代码: Configuration.java: public class Configuration { /** Helper class for datasource creation. **/ public static class DataSources { public static final JdbcDataSource dataSourc

我的代码启动节点并执行loadCache()方法,但当对其应用SQL查询时,它会给出标题中提到的错误。以下是我的配置、缓存存储和加载缓存代码:

Configuration.java:

public class Configuration {

/** Helper class for datasource creation. **/
public static class DataSources {
    public static final JdbcDataSource dataSource = createdataSource();

    private static JdbcDataSource createdataSource() {
        JdbcDataSource dataSource = new JdbcDataSource();

        dataSource.setURL("");
        dataSource.setUser("");
        dataSource.setPassword("");

        return dataSource;
    }
}

/**
 * Configure grid.
 * 
 * @return Ignite configuration.
 * @throws Exception If failed to construct Ignite configuration instance.
 **/
public static IgniteConfiguration createConfiguration() throws Exception {
    //int cpus = Runtime.getRuntime().availableProcessors();
    IgniteConfiguration cfg = new IgniteConfiguration();

    cfg.setClientMode(true);
    cfg.setIgniteInstanceName("Reports");

    TcpDiscoverySpi discovery = new TcpDiscoverySpi();

    TcpDiscoveryMulticastIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder();

    ipFinder.setAddresses(Collections.singletonList(""));

    discovery.setIpFinder(ipFinder);

    cfg.setDiscoverySpi(discovery);


    //cfg.setPeerClassLoadingEnabled(true);

    cfg.setCacheConfiguration(cacheOutputReportCache());

    return cfg;
}



 //Configuration for cache "OutputReportCache".
public static CacheConfiguration<Long, OutputReport> cacheOutputReportCache() throws Exception {
    CacheConfiguration<Long, OutputReport> ccfg = new CacheConfiguration<>();

    ccfg.setName("OutputReportCache");
    ccfg.setCacheMode(CacheMode.PARTITIONED);
    ccfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);

    CacheJdbcPojoStoreFactory<Long, OutputReport> cacheStoreFactory = new CacheJdbcPojoStoreFactory<>();

    cacheStoreFactory.setDataSourceFactory(new Factory<DataSource>() {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        @Override 
        public DataSource create() {
            return DataSources.dataSource;
        };
    });

    cacheStoreFactory.setDialect(new OracleDialect());

    ccfg.setCacheStoreFactory(cacheStoreFactory);

    ccfg.setReadThrough(true);
    ccfg.setWriteThrough(true);

    ArrayList<QueryEntity> qryEntities = new ArrayList<>();

    QueryEntity qryEntity = new QueryEntity();

    qryEntity.setKeyType(String.class.getName());
    qryEntity.setValueType(OutputReport.class.getName());

    LinkedHashMap<String, String> fields = new LinkedHashMap<>();

    fields.put("sid", "java.lang.String");
    fields.put("sName", "java.lang.String");
    fields.put("cname", "java.lang.String");
    fields.put("cnumber", "java.lang.String");
    fields.put("cname", "java.lang.String");
    fields.put("cid", "java.lang.String");
    fields.put("r", "java.lang.String");
    fields.put("b", "java.lang.String");
    fields.put("Date", "java.lang.String");
    fields.put("Side", "java.lang.String");
    fields.put("Quant", "java.lang.Float");
    fields.put("price", "java.lang.Float");
    fields.put("local", "java.lang.Float");
    fields.put("usd", "java.lang.Float");
    fields.put("trcy", "java.lang.String");
    fields.put("Count", "java.lang.Integer");
    fields.put("Type", "java.lang.String");
    fields.put("Category", "java.lang.String");
    fields.put("Subcategory", "java.lang.String");
    fields.put("Country", "java.lang.String");
    fields.put("eCountry", "java.lang.String");
    fields.put("Desc", "java.lang.String");
    fields.put("Sector", "java.lang.String");
    fields.put("isector", "java.lang.String");
    fields.put("Flag", "java.lang.String");
    fields.put("Region", "java.lang.String");
    fields.put("rowNum", "java.lang.Long");

    qryEntity.setFields(fields);

 // Listing indexes.
    Collection<QueryIndex> indexes = new ArrayList<>(3);

    indexes.add(new QueryIndex("sid"));
    indexes.add(new QueryIndex("Region"));
    indexes.add(new QueryIndex("cnumber"));
    indexes.add(new QueryIndex("eCountry"));

    qryEntity.setIndexes(indexes);

    qryEntities.add(qryEntity);

    ccfg.setQueryEntities(qryEntities);

    return ccfg;
}
}
公共类配置{
/**用于创建数据源的帮助器类**/
公共静态类数据源{
公共静态最终JdbcDataSource dataSource=createdataSource();
私有静态JdbcDataSource createdataSource(){
JdbcDataSource dataSource=新的JdbcDataSource();
dataSource.setURL(“”);
dataSource.setUser(“”);
dataSource.setPassword(“”);
返回数据源;
}
}
/**
*配置网格。
* 
*@返回点火配置。
*@如果构造Ignite配置实例失败,则引发异常。
**/
公共静态IgniteConfiguration createConfiguration()引发异常{
//int CPU=Runtime.getRuntime().availableProcessors();
IgniteConfiguration cfg=新IgniteConfiguration();
setClientMode(true);
cfg.setIgniteInstanceName(“报告”);
TcpDiscoverySpi discovery=新的TcpDiscoverySpi();
TcpDiscoveryMulticastIpFinder ipFinder=新的TcpDiscoveryMulticastIpFinder();
ipFinder.setAddresses(Collections.singletonList(“”);
discovery.setIpFinder(ipFinder);
cfg.setDiscoverySpi(发现);
//cfg.setPeerClassLoadingEnabled(真);
setCacheConfiguration(cacheOutputReportCache());
返回cfg;
}
//缓存“OutputReportCache”的配置。
公共静态缓存配置cacheOutputReportCache()引发异常{
CacheConfiguration ccfg=新的CacheConfiguration();
ccfg.setName(“OutputReportCache”);
setCacheMode(CacheMode.PARTITIONED);
ccfg.setatomictymode(cacheatomictymode.ATOMIC);
CacheJdbcPojoStoreFactory cacheStoreFactory=new CacheJdbcPojoStoreFactory();
setDataSourceFactory(新工厂(){
/**
* 
*/
私有静态最终长serialVersionUID=1L;
@凌驾
公共数据源创建(){
返回DataSources.dataSource;
};
});
setquantial(新的Oraclequantial());
ccfg.setCacheStoreFactory(cacheStoreFactory);
ccfg.setReadThrough(真);
ccfg.setWriteThrough(真);
ArrayList qryEntities=新的ArrayList();
QueryEntity qryEntity=新QueryEntity();
qryEntity.setKeyType(String.class.getName());
qryEntity.setValueType(OutputReport.class.getName());
LinkedHashMap字段=新建LinkedHashMap();
fields.put(“sid”、“java.lang.String”);
fields.put(“sName”、“java.lang.String”);
fields.put(“cname”、“java.lang.String”);
fields.put(“cnumber”、“java.lang.String”);
fields.put(“cname”、“java.lang.String”);
fields.put(“cid”、“java.lang.String”);
fields.put(“r”、“java.lang.String”);
fields.put(“b”、“java.lang.String”);
fields.put(“Date”、“java.lang.String”);
fields.put(“Side”、“java.lang.String”);
fields.put(“Quant”、“java.lang.Float”);
fields.put(“price”、“java.lang.Float”);
fields.put(“local”、“java.lang.Float”);
fields.put(“usd”、“java.lang.Float”);
fields.put(“trcy”、“java.lang.String”);
fields.put(“Count”、“java.lang.Integer”);
fields.put(“Type”、“java.lang.String”);
fields.put(“Category”、“java.lang.String”);
fields.put(“Subcategory”、“java.lang.String”);
fields.put(“Country”、“java.lang.String”);
fields.put(“ecocountry”、“java.lang.String”);
fields.put(“Desc”、“java.lang.String”);
fields.put(“扇区”、“java.lang.String”);
fields.put(“isector”、“java.lang.String”);
fields.put(“Flag”、“java.lang.String”);
fields.put(“Region”、“java.lang.String”);
fields.put(“rowNum”、“java.lang.Long”);
qryEntity.设置字段(字段);
//列出索引。
集合索引=新的ArrayList(3);
添加(新的查询索引(“sid”);
添加(新的查询索引(“区域”));
添加(新的查询索引(“cnumber”);
添加(新的查询索引(“EconCountry”);
qryEntity.setIndexes(索引);
qryEntity.add(qryEntity);
ccfg.设置查询实体(QRY实体);
返回ccfg;
}
}
OutputReportStore.java:

public class OutputReportStore implements CacheStore<Long, OutputReport> {
    //@SpringResource(resourceName = "dataSource")
    private DataSource dataSource = DataSources.dataSource;
    // This method is called whenever IgniteCache.loadCache() method is called.
    @Override
    public void loadCache(IgniteBiInClosure<Long, OutputReport> clo, @Nullable Object... objects) throws CacheLoaderException {
        System.out.println(">> Loading cache from store...");
        try (Connection conn = dataSource.getConnection()) {
            try (PreparedStatement st = conn.prepareStatement("select * from OUTPUTREPORT")) {
                try (ResultSet rs = st.executeQuery()) {
                    while (rs.next()) {
                        OutputReport outputreport = new OutputReport(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6), rs.getString(7), rs.getString(8), rs.getString(9), rs.getString(10), rs.getFloat(11), rs.getFloat(12), rs.getFloat(13), rs.getFloat(14), rs.getString(15), rs.getInt(16), rs.getString(17), rs.getString(18), rs.getString(19), rs.getString(20), rs.getString(21), rs.getString(22), rs.getString(23), rs.getString(24), rs.getString(25), rs.getString(26), rs.getLong(27));
                        clo.apply(outputreport.getrowNum(), outputreport);
                    }
                }
            }
        }
        catch (SQLException e) {
            throw new CacheLoaderException("Failed to load values from cache store.", e);
        }
    }

    // Other CacheStore method implementations.
    @Override
    public OutputReport load(Long arg0) throws CacheLoaderException {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public void delete(Object arg0) throws CacheWriterException {
        // TODO Auto-generated method stub

    }
    @Override
    public void write(Entry<? extends Long, ? extends OutputReport> arg0)
            throws CacheWriterException {
        // TODO Auto-generated method stub

    }
    @Override
    public Map<Long, OutputReport> loadAll(Iterable<? extends Long> arg0)
            throws CacheLoaderException {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public void deleteAll(Collection<?> arg0) throws CacheWriterException {
        // TODO Auto-generated method stub

    }
    @Override
    public void writeAll(
            Collection<Entry<? extends Long, ? extends OutputReport>> arg0)
            throws CacheWriterException {
        // TODO Auto-generated method stub

    }
    @Override
    public void sessionEnd(boolean arg0) throws CacheWriterException {
        // TODO Auto-generated method stub

    }

}
公共类OutputReportStore实现CacheStore{
//@SpringResource(resourceName=“数据源”)
私有DataSource DataSource=DataSources.DataSource;
//每当调用IgniteCache.loadCache()方法时,都会调用此方法。
@凌驾
public void loadCache(IgniteBiInClosure clo,@Nullable Object…objects)引发CacheLoaderException{
System.out.println(“>>正在从存储区加载缓存…”);
try(Connection conn=dataSource.getConnection()){
try(PreparedStatement st=conn.prepareStatement(“从输出报告中选择*)){
try(ResultSet rs=st.executeQuery()){
while(rs.next()){
OutputReport OutputReport=newoutputreport(rs.getString(1)、rs.getString(2)、rs.getString(3)、rs.getString(4)、rs.getString(5)、rs.getString(6)、rs.getString(7)、rs.getString(8)、rs.getString(9)、rs.getString(10)、rs.getFloat(11)、rs.getFloat(12)、rs.getFloat(13)、rs.getFloat(14)、rs.getString(15)、rs.getInt(16)、rs.getString(17)、rs.getString(18) 、rs.getString(19)、rs.getString(20)、rs.getString(21)、rs.getString(22)、rs.getString(23)、rs.getString(24)、rs.getString(25)、rs.getString(26)、rs.getLong(27));
apply(outputreport.getrowNum(),outputreport);
}
}
}
}
捕获(SQLE异常){
抛出新的CacheLoaderException(“未能从缓存存储区加载值。”,e);
}
}
//其他CacheStore方法实现。
@凌驾
公共输出报告加载(长arg0)引发CacheLoaderException{
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共空间
public class LoadCaches {
    //Load caches from database.
    //1. Start cluster
    //2. Start this utility and wait while load complete

    public static void main(String[] args) throws Exception {
        try (Ignite ignite = Ignition.start(Configuration.createConfiguration())) {

            System.out.println(">>> Loading cache: OutputReportCache");
            IgniteCache<Long, OutputReport> cache = ignite.getOrCreateCache("OutputReportCache");
    cache.loadCache(null);

    System.out.println(">>> Cache loaded!");

    QueryCursor<List<?>> cursor = cache.query(new SqlFieldsQuery("select count(*) from outputreport"));
    System.out.println(cursor.getAll());
        }
    }
}
JdbcType storeType = new JdbcType;
storeType.setDatabaseSchema("Your-custom-schema");
storeType.setDatabaseTable("Table-name");
storeType.setKeyType(Long.class);
storeType.setValueType(OutputReport.class);
storeType.setValueFields(new JdbcTypeField(Types.VARCHAR, "sName", String.class, null));
...

cacheStoreFactory.setTypes(storeType);