Oracle Coherence
Я новичок в Oracle Coherence. Я прочитал документацию и сделал практический с помощью командной строки. У меня нет проблем в понимании. Затем я загрузил затмение с помощью инструментов согласованности оракула. Я создал клиент приложения для согласованности оракула, как указано ниже http://docs.oracle.com/cd/E18686_01/coh.37/e18692/installjdev.htm
Я бегал так же. Это работало нормально, как я делал в своем консольном приложении. Затем я создал новый проект в той же рабочей области, создал основной класс, получивший доступ к именованному кешу, поместил и получил некоторые значения, используя приведенный ниже код:
package coherenceClient;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;
public class Main {
public static void main(String[] args) {
NamedCache cache = CacheFactory.getCache("myCache");
cache.put("MyFirstCacheObject", "This is my first Cache Object");
System.out.println(cache.get("MyFirstCacheObject"));
}
}
Я выбрал ту же стоимость. Затем я создал другой класс, попытался получить то же значение, но оно возвращало ноль. Есть ли ошибки в коде?
package coherenceClient;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;
public class Recevier {
public static void main(String[] args) {
NamedCache cache = CacheFactory.getCache("myCache");
System.out.println(cache.get("MyFirstCacheObject"));
}
}
3 ответа
Если кеш когерентности находится в JVM (он не запускается как отдельный сервер), то все данные удаляются после завершения вашей программы (вы используете хранилище в памяти). Попробуйте поставить Thread.sleep(200000); до конца первой программы, а затем запустить второй экземпляр в течение тайм-аута.
В командной строке вы запустили сервер (как автономный), и клиенты присоединились к серверу. Таким образом, все данные в кеше будут доступны до тех пор, пока сервер не остановится, даже если клиент, вставивший данные в кеш, покинет сеанс сервера.
Но в приведенном выше случае кэш когерентности находится в самой JVM(Eclipse), а не в качестве отдельного сервера. Таким образом, вы получаете нулевое значение, когда программа существует.
При запуске второй JVM проверьте исходный stdout узла сервера кэша когерентности, чтобы увидеть, действительно ли вы видите присоединение нового члена в кластере (проверьте MemberSet). Вы можете просто запустить две отдельные JVM, которые совершенно не знают друг друга; следовательно, CacheFactory.getCache("myCache") создает кэш в каждой JVM.
Чтобы обойти это, используйте cache-server.cmd, чтобы запустить сервер кэша когерентности, а затем запустить программу eclipse с распределенной / секционированной или реплицированной схемой. Таким образом, даже когда ваша программа завершает работу, фактические данные будут храниться на сервере когерентного кэша, который вторая JVM будет извлекать, когда она присоединяется к "тому же кластеру".