Как настроить EAR для доступа к существующей Websphere Shared Lib? - PullRequest
6 голосов
/ 25 июля 2011

Я использую JSF2 с Websphere 7. Я успешно создал общую библиотеку и указал приложение, использующее консоль администратора Webpsphere, и оно успешно работает. Но то, что мы действительно хотим сделать, это не указывать на этот Shared Lib через консоль администратора WAS, а иметь какую-то конфигурацию уровня приложения, например, в deploy.xml и т. Д., Которую мы можем указать на имя этого Shared Isolated Lib и использовать его. , Я прошел через SO и Google, но не нашел ничего, что делает это. Я однако знаю, что есть коммерческое приложение, делающее это, но не знаю как.
Этот вопрос из Как мне указать ссылку на общую библиотеку на уровне веб-модуля в дескрипторах развертывания Websphere 6.1? - это то, что мне нужно, но я не хочу указывать номера версий или имена фляг в качестве состояния ответа

Ответы [ 3 ]

9 голосов
/ 26 июля 2011

Я нашел способ, просто следуя тому, что на самом деле делает консоль администратора WAS.

Создайте файл deploy.xml в файле EAR, если у вас его еще нет.Вы найдете ссылку на загрузчик классов, как показано ниже:

<classloader xmi:id="Classloader_1311552732281" mode="PARENT_FIRST">

Измените ее и добавьте ссылку на общую библиотеку, созданную на сервере, как показано ниже.

 <classloader xmi:id="Classloader_1311552732281" mode="PARENT_FIRST">
        <libraries libraryName="JSF2_SHARED_LIB" sharedClassloader="true"/>
 </classloader>

@ dbreaux также показал путь.Принятие моего собственного ответа, который лучше соответствует моим потребностям, но большое спасибо dbreaux за совет.

4 голосов
/ 25 июля 2011

Проблема только в том, что вам не нужно настраивать каждое приложение отдельно или вы вообще не хотите использовать консоль администратора? Вы можете связать общую библиотеку со всем сервером , что может быть предпочтительнее, чем делать это для каждого приложения.

Другой способ создания этих ассоциаций приложений заключается в специфичных для WebSphere файлах развертывания .xmi. Они создаются при развертывании, но также могут быть включены в файлы WAR / EAR. Я не знаю, поможет ли это вам вообще. Если это так, то официальным способом их создания заранее является использование одного из средств развертывания , но, поскольку они представляют собой просто XML, вы можете создать их вручную.

2 голосов
/ 27 ноября 2014

Чтобы добавить дополнительную информацию к ответу Шахзеба: Моя среда: Websphere 8.5; Windows 7; (Eclipse Luna для создания тестового .war-файла)

Я установил файл war, экспортированный из eclipse на сервер websphere с помощью консоли websphere. Затем снова экспортируйте его и распакуйте, чтобы увидеть, что websphere автоматически добавит к нему для генерации EAR.

[folder]META-INF
  [folder]ibmconfig
  [file]application.xml
  [file]ibm-application-bnd.xmi
  [file]ibm-application-runtime.props
  [file]MANIFEST.MF
  [file]was.module
  [file]was.policy
  [file]was.webmodule

[file]myWAR.war

И файл deploy.xml помещается в .. \ ibmconfig \ клетки \ defaultCell \ приложения \ defaultApp \ развертываний \ defaultApp \

чье содержание в виде


<?xml version="1.0" encoding="UTF-8"?>
<appdeployment:Deployment xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:appdeployment="http://www.ibm.com/websphere/appserver/schemas/5.0/appdeployment.xmi" xmi:id="Deployment_1417052686904">
  <deployedObject xmi:type="appdeployment:ApplicationDeployment" xmi:id="ApplicationDeployment_1417052686904" deploymentId="0" startingWeight="1" binariesURL="$(APP_INSTALL_ROOT)/[server service name]Cell/myWAR.ear" useMetadataFromBinaries="false" enableDistribution="true" createMBeansForResources="true" reloadEnabled="false" appContextIDForSecurity="href:[server service name]Cell/myWAR" filePermission=".*\.dll=755#.*\.so=755#.*\.a=755#.*\.sl=755" allowDispatchRemoteInclude="false" allowServiceRemoteInclude="false" asyncRequestDispatchType="DISABLED" standaloneModule="true" enableClientModule="false">
    <targetMappings xmi:id="DeploymentTargetMapping_1417052686904" enable="true" target="ServerTarget_1417052686904"/>
    <classloader xmi:id="Classloader_1417052686904" mode="PARENT_FIRST"/>
    <modules xmi:type="appdeployment:WebModuleDeployment" xmi:id="WebModuleDeployment_1417052686904" deploymentId="1" startingWeight="10000" uri="myWAR.war" containsEJBContent="0">
      <targetMappings xmi:id="DeploymentTargetMapping_1417052686905" target="ServerTarget_1417052686904"/>
      <classloader xmi:id="Classloader_1417052686905"/>
    </modules>
    <properties xmi:id="Property_1417052686904" name="metadata.complete" value="true"/>
  </deployedObject>
  <deploymentTargets xmi:type="appdeployment:ServerTarget" xmi:id="ServerTarget_1417052686904" name="server1" nodeName="[server service name]"/>
</appdeployment:Deployment>

(Поскольку у меня нет репутации, я должен сделать все это в тексте ..)

...