2012-03-06 3 views
4

Разочарованный проклятым ужасным API, предоставляемым сервером WebSphere Admin Server, я пишу свою собственную оболочку DSL Java. Мои Jython файлы теперь просто читать:Где в мире com.ibm.ws.scripting.adminCommand.AdminTask?

from my.package import MyDSL 
config = MyDSL(AdminConfig, AdminTask) 
config.goGoGadgetSkates() # or something like that 

Существенная часть является то, что я посылаю через (#% $$ @ #!) Бог объектов AdminConfig и AdminTask так, что DSL может использовать их для выполнения операций в WAS.

Чтобы скомпилировать DSL, мне нужно включить файлы классов для этих двух объектов. Я найти их сначала установив конструктор как:

public MyDSL(Object a, Object b) { 
    System.out.println(a.getClass()); 
    System.out.println(b.getClass()); 
} 

Выход показал, что объект AdminConfig является экземпляром com.ibm.ws.scripting.AdminConfigClient. Я легко нашел банку, которая содержит этот класс, и все хорошо.

Но AdminTask - это пример com.ibm.ws.scripting.adminCommand.AdminTask. Несмотря на то, что он присутствует во время выполнения, этот класс не существует нигде в моем пути к классам или даже где-либо на жестком диске моего компьютера.

Я могу только предположить, что com.ibm.ws.scripting.adminCommand.AdminTask построен магически WSAdmin в слое jython. Возможно, он определен как класс python?

Перед тем, как я resort to reflection, может кто-нибудь объяснить, где может жить com.ibm.ws.scripting.adminCommand.AdminTask, и как я могу извлечь копию файла класса?

+1

Очень интересно. Я могу подтвердить, что с помощью тестового JSP для поиска классов по пути класса времени выполнения WAS первая найдена, а последняя - нет. (Https://www.ibm.com/developerworks/mydeveloperworks/blogs/Dougclectica/entry/revive_finding_a_java_class_in_your_servlet_container2) – dbreaux

+0

Это может помочь вам найти: Я не уверен, что WAS и что путь к классам WASadmin классов идентичны или что они должны быть. В любом случае, когда у вас есть новый профиль WebSphere, и вы начинаете wsadmin.sh (или .bat), вы можете увидеть список используемых банками. Возможно, они могут помочь вам. – user967710

+1

google сказал мне, что это не наш мир. – cn1h

ответ

1

Класс AdminConfigClient не является API/SPI, поэтому вы создаете хрупкую инфраструктуру, полагаясь на этот класс. Входная точка API/SPI: ConfigServiceFactory.

Объект AdminTask подкрепляется данными в CommandMgr. Должно быть возможно использовать CommandMgr, чтобы делать все, что вы можете сделать с AdminTask.