Java rmi не находит интерфейс класса [duplicate]

В основном это - сводная таблица.

Хороший учебник о том, как этого достичь, можно найти здесь: http://www.artfulsoftware.com/

Обновить

g15]

После того, как ссылка выше в настоящее время недоступна, я чувствую себя обязанным предоставить дополнительную информацию для всех вас, ищущих ответы на mysql pivot. У него действительно было огромное количество информации, и я не буду вкладывать все оттуда сюда (еще больше, так как я просто не хочу копировать свои обширные знания), но я дам несколько советов о том, как справляться с точкой опоры таблицы sql в общем случае с примером из peku, который задал вопрос в первую очередь.

Возможно, ссылка скоро вернется, я буду следить за ней.

Метод электронной таблицы ...

Для этой цели многие используют инструмент MSExcel, OpenOffice или другие инструменты для работы с электронными таблицами. Это действительное решение, просто скопируйте данные и используйте инструменты, предлагаемые графическим интерфейсом для решения этой проблемы.

Но ... это был не вопрос, и это могло бы даже привести к некоторым недостаткам, например, как получить данные в электронную таблицу, проблемное масштабирование и т. д.

Путь SQL ...

Учитывая, что его таблица выглядит примерно так:

CREATE TABLE `test_pivot` (
  `pid` bigint(20) NOT NULL AUTO_INCREMENT,
  `company_name` varchar(32) DEFAULT NULL,
  `action` varchar(16) DEFAULT NULL,
  `pagecount` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`pid`)
) ENGINE=MyISAM;

Теперь загляните в его / ее желаемую таблицу:

company_name    EMAIL   PRINT 1 pages   PRINT 2 pages   PRINT 3 pages
-------------------------------------------------------------
CompanyA        0       0               1               3
CompanyB        1       1               2               0

Строки (EMAIL, PRINT x pages) напоминают условия. Основная группировка - company_name.

Чтобы настроить условия, это скорее кричит для использования CASE -стратега. Чтобы группировать что-то, хорошо, используйте ... GROUP BY.

Основной SQL, предоставляющий этот опорный элемент, может выглядеть примерно так:

SELECT  P.`company_name`,
    COUNT(
        CASE 
            WHEN P.`action`='EMAIL' 
            THEN 1 
            ELSE NULL 
        END
    ) AS 'EMAIL',
    COUNT(
        CASE 
            WHEN P.`action`='PRINT' AND P.`pagecount` = '1' 
            THEN P.`pagecount` 
            ELSE NULL 
        END
    ) AS 'PRINT 1 pages',
    COUNT(
        CASE 
            WHEN P.`action`='PRINT' AND P.`pagecount` = '2' 
            THEN P.`pagecount` 
            ELSE NULL 
        END
    ) AS 'PRINT 2 pages',
    COUNT(
        CASE 
            WHEN P.`action`='PRINT' AND P.`pagecount` = '3' 
            THEN P.`pagecount` 
            ELSE NULL 
        END
    ) AS 'PRINT 3 pages'
FROM    test_pivot P
GROUP BY P.`company_name`;

Это должно обеспечить желаемый результат очень быстрый. Главным недостатком такого подхода является то, что чем больше строк вы хотите в сводной таблице, тем больше условий вам необходимо определить в вашем SQL-заявлении.

Это также может быть рассмотрено, поэтому люди склонны использовать подготовленные операторов, подпрограмм, счетчиков и т. д.

Некоторые дополнительные ссылки по этой теме:

8
задан user207421 31 March 2015 в 00:08
поделиться

3 ответа

Вы можете запустить rmiregistry из любого места, но вы должны убедиться, что скомпилированные классы уже находятся в вашем пути к классам. Например: -

E:\ARMSRemoteUpdater\WebContent\WEB-INF\classes>set classpath=%classpath%;E:\ARMSRemoteUpdater\WebContent\WEB-INF\classes <ENTER>

E:\ARMSRemoteUpdater\WebContent\WEB-INF\classes>c: <ENTER>

C:\>rmiregistry

И выше должно работать нормально.

В общем случае, если вы запускаете rmiregistry из корневого расположения скомпилированных классов (пример выше E: \ ARMSRemoteUpdater \ WebContent \ WEB-INF \ classes), который будет работать, потому что. (dot-current directory) уже установлен в вашем пути к классам.

Но как только вы удалите. (dot-current directory) из вашего пути к классам, вышеуказанное рабочее условие также потерпит неудачу.

Надеюсь, что я подробно объяснил.

12
ответ дан user207421 22 August 2018 в 05:30
поделиться
  • 1
    Проблема решена, но нам все еще нужен файл заглушки? – Suhail Gupta 3 March 2012 в 09:39
  • 2
    @SuhailGupta См. Преамбулу к java.rmi.server.UnicastRemoteObject. Вам нужно всего лишь создать класс заглушки, если вы используете Java & lt; 1.5, или вы не следуете этим рекомендациям. Поскольку у вас есть это исключение, очевидно, что одно из этих двух истинно. – user207421 3 March 2012 в 11:07
  • 3
    Я использую java & gt; 1.5. И мой класс расширяет UnicastRemoteObject. Я несколько устарел. Вот небольшой код, который я использовал – Suhail Gupta 3 March 2012 в 17:52
  • 4
    @SuhailGupta См. Документацию, которую я привел. Пока вы указываете номер порта, даже ноль, при экспорте вам не нужен заглушка. – user207421 4 March 2012 в 01:42
  • 5
    @EJP Мне удалось запустить мою работу, установив CLASSPATH с помощью export CLASSPATH=myLib.jar:myLib2.jar. перед запуском rmiregistry. Но я работаю над производственным развертыванием, и я заметил ваш комментарий к другому сообщению о том, что CLASSPATH предназначен для разработки, а конфигурация кодовой базы более подходит для развертывания. Понимаете ли вы, что CLASSPATH должен быть очищен для развертывания, и все сервер и клиенты, использующие rmi, будут использовать базу кода в конфигурации развертывания? – simgineer 27 October 2017 в 19:09

Есть три случая этого исключения.

  1. При экспорте: вы не запускали 'rmic', и вы не делали шаги, описанные в преамбуле к Javadoc для UnicastRemoteObject, чтобы сделать это ненужным.
  2. При привязке: в реестре нет заглушки или удаленного интерфейса или что-то, от чего они зависят от его пути к классам.
  3. при поиске: клиент

Это случай 2. Реестр не может найти именованный класс.

Существует четыре решения:

  1. Запустите реестр с помощью CLASSPATH, который включает соответствующие JAR или каталоги.
  2. Запустите реестр на вашем сервере JVM через LocateRegistry.createRegistry().
  3. Используйте динамический как описано в преамбуле к Javadoc из UnicastRemoteObject.. Однако вы все равно можете столкнуться с той же проблемой с самим удаленным интерфейсом или классом, от которого он зависит, и в этом случае 1-3 выше все еще применяются к этому классу / эти классы.
  4. Используйте функцию codebase. Это действительно вариант развертывания и IMO, чего следует избегать на начальной стадии разработки.
12
ответ дан user207421 22 August 2018 в 06:22
поделиться
  • 1
    Проблема решена, но нам все еще нужен файл заглушки? – Suhail Gupta 3 March 2012 в 09:39
  • 2
    @SuhailGupta См. Преамбулу к java.rmi.server.UnicastRemoteObject. Вам нужно всего лишь создать класс заглушки, если вы используете Java & lt; 1.5, или вы не следуете этим рекомендациям. Поскольку у вас есть это исключение, очевидно, что одно из этих двух истинно. – user207421 3 March 2012 в 11:07
  • 3
    Я использую java & gt; 1.5. И мой класс расширяет UnicastRemoteObject. Я несколько устарел. Вот небольшой код, который я использовал – Suhail Gupta 3 March 2012 в 17:52
  • 4
    @SuhailGupta См. Документацию, которую я привел. Пока вы указываете номер порта, даже ноль, при экспорте вам не нужен заглушка. – user207421 4 March 2012 в 01:42
  • 5
    @EJP Мне удалось запустить мою работу, установив CLASSPATH с помощью export CLASSPATH=myLib.jar:myLib2.jar. перед запуском rmiregistry. Но я работаю над производственным развертыванием, и я заметил ваш комментарий к другому сообщению о том, что CLASSPATH предназначен для разработки, а конфигурация кодовой базы более подходит для развертывания. Понимаете ли вы, что CLASSPATH должен быть очищен для развертывания, и все сервер и клиенты, использующие rmi, будут использовать базу кода в конфигурации развертывания? – simgineer 27 October 2017 в 19:09
Remote Server Error:RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: mathInterface

Ошибка, которую очень просто решить, выполнить следующие шаги:

  • Например, ваш java-файл рассмотрит D-диск
  • Запустите rmiregistry D drive (пример D : \ start rmiregistry), то не запускайте rmiregistry на других дисках, это приведет к указанной выше ошибке

(Где бы ни находился ваш файл, запустите rmiregistry)

3
ответ дан j0k 22 August 2018 в 05:30
поделиться
  • 1
    вау, это действительно сработало для меня ... хотя я не знаю почему? может ли кто-нибудь объяснить, что здесь происходит? – ultrajohn 1 August 2013 в 14:58
  • 2
    @ultrajohn См. мой ответ. Это работает, потому что он помещает требуемый класс в CLASSPATH реестра, но только если этот класс не находится в пакете. Если бы это было так, это не сработало бы. -1 из-за отсутствия объяснений и решения для особых случаев. – user207421 26 August 2014 в 07:06
Другие вопросы по тегам:

Похожие вопросы: