Hi. Our plugin stopped working in vCenter 6.7 Update 2 on the HTML 5 client only (the Flex client still works fine). When deploying the plug-in and logging in to the HTML 5 client, I am getting an error in the task pane that says "Deploy plug-in: Cannot complete the operation. See the event logs for details". I am looking at the logs at c:\ProgramData\VMware\vCenterServer\logs\vsphere-ui\logs\vsphere_client_virgo.log and see the following relevant lines:
[2019-07-02T14:18:54.726+03:00] [INFO ] vc-extensionmanager-pool-181 70000051 100019 200002 com.vmware.vise.vim.extension.PluginStatusTaskManager DOWNLOADING: Downloading plugin package com.infinidat.powertools.develop.arnons.mbp:5.0.0.5 from https://172.16.10.212:8081/vwc/vwc.zip ... [2019-07-02T14:18:54.793+03:00] [INFO ] vc-extensionmanager-pool-181 70000051 100019 200002 com.vmware.vise.vim.commons.vcservice.impl.VcServiceImpl loginByToken successful on vc https://vcenter-ci14.lab.il.infinidat.com:443/sdk [2019-07-02T14:18:54.793+03:00] [INFO ] vc-extensionmanager-pool-181 70000051 100019 200002 com.vmware.vise.vim.commons.vcservice.impl.VcServiceImpl logged in VC with id 3000005 [2019-07-02T14:18:54.793+03:00] [INFO ] vc-extensionmanager-pool-181 70000051 100019 200002 com.vmware.vise.vim.commons.vcservice.impl.VcServiceImpl Successfully logged into VC https://vcenter-ci14.lab.il.infinidat.com:443/sdk for session: 100019 [2019-07-02T14:18:54.949+03:00] [INFO ] vc-extensionmanager-pool-181 70000051 100019 200002 com.vmware.vise.vim.extension.util.VcExtensionUtil No proxy server configured. [2019-07-02T14:18:54.950+03:00] [INFO ] vc-extensionmanager-pool-181 70000051 100019 200002 com.vmware.vise.vim.extension.VcExtensionManager Downloading plugin package from https://172.16.10.212:8081/vwc/vwc.zip (no proxy defined) [2019-07-02T14:18:55.099+03:00] [INFO ] taskExecutor-1 70000051 100019 200002 c.vmware.license.client.management.adapter.LicenseInventoryCache Retrieved 2 licenses. [2019-07-02T14:18:55.119+03:00] [INFO ] vc-extensionmanager-pool-181 70000051 100019 200002 com.vmware.vise.vim.extension.VcExtensionManager Done downloading plugin package from https://172.16.10.212:8081/vwc/vwc.zip [2019-07-02T14:18:55.120+03:00] [WARN ] vc-extensionmanager-pool-181 70000051 100019 200002 com.vmware.vise.vim.extension.VcExtensionManager Detected an invalid signature for plugin: com.infinidat.powertools.develop.arnons.mbp:5.0.0.5 - com.vmware.vise.extensionfw.signing.PluginSignatureException: No META-INF/MANIFEST.MF entry found in the plugin zip file. [2019-07-02T14:18:55.318+03:00] [INFO ] vc-extensionmanager-pool-181 70000051 100019 200002 com.vmware.vise.vim.extension.VcExtensionManager Done expanding plugin package to C:\ProgramData\VMware\vCenterServer\cfg\vsphere-ui\vc-packages\vsphere-client-serenity\com.infinidat.powertools.develop.arnons.mbp-5.0.0.5 [2019-07-02T14:18:55.319+03:00] [INFO ] vc-extensionmanager-pool-181 70000051 100019 200002 com.vmware.vise.vim.extension.PluginStatusTaskManager DOWNLOADED: Downloaded plugin package com.infinidat.powertools.develop.arnons.mbp:5.0.0.5 from https://172.16.10.212:8081/vwc/vwc.zip successfully. [2019-07-02T14:18:55.332+03:00] [INFO ] vc-extensionmanager-pool-181 70000051 100019 200002 com.vmware.vise.vim.extension.PluginStatusTaskManager DEPLOYING: Deploying plugin package com.infinidat.powertools.develop.arnons.mbp:5.0.0.5 ... [2019-07-02T14:18:56.037+03:00] [INFO ] plugin-deploy10 com.vmware.vise.extensionfw.impl.PackagesDeployer Deploying plugin package 'com.infinidat.powertools.develop.arnons.mbp:5.0.0.5'. [2019-07-02T14:18:56.037+03:00] [INFO ] plugin-deploy10 com.vmware.vise.extensionfw.impl.DeploymentEventLoggerImpl Event=PACKAGE_DEPLOY_BEGIN; Params=com.infinidat.powertools.develop.arnons.mbp, 5.0.0.5 [2019-07-02T14:18:56.065+03:00] [WARN ] -0:0:0:0:0:0:0:1-5090-exec-3 70000058 100019 200002 com.vmware.vise.mvc.tree.TreeNodeStateManagerImpl Failed to load user preferences. [2019-07-02T14:18:56.310+03:00] [INFO ] plugin-deploy10 c.v.v.client.iconslabels.IconsLabelsPropertyProviderAdapter got plugin event, icons update version: 8 [2019-07-02T14:18:56.310+03:00] [INFO ] plugin-deploy10 c.v.v.client.iconslabels.IconsLabelsPropertyProviderAdapter Actually running update with version: 8 [2019-07-02T14:18:56.327+03:00] [INFO ] plugin-deploy10 c.v.v.client.iconslabels.IconsLabelsPropertyProviderAdapter Creating Type Info for properties: inventoryservice:InventoryServiceCategory, ClusterComputeResource, DistributedVirtualSwitch, com.vmware.content.library.Item, VmwareDistributedVirtualSwitch, inventoryservice:InventoryServiceTag, PbmRequirementStorageProfile, ResourcePool, Folder, DistributedVirtualPortgroup, VirtualApp, StoragePod, Datastore, HostProfile, PbmDataServiceStorageProfile, Network, com.vmware.content.Library, Datacenter, HostSystem, VcExtension, OpaqueNetwork, VirtualMachine, [2019-07-02T14:18:56.327+03:00] [INFO ] plugin-deploy10 c.v.v.client.iconslabels.IconsLabelsPropertyProviderAdapter Completed update with version: 8 [2019-07-02T14:18:56.328+03:00] [INFO ] plugin-deploy10 com.vmware.vise.vim.extension.PluginStatusTaskManager BUNDLE_DEPLOYED: Deployed plugin bundle com.infinidat.powertools.develop.arnons.mbp:1.0.0 successfully. [2019-07-02T14:18:56.330+03:00] [WARN ] plugin-deploy10 com.vmware.vise.mvc.relateditems.RelatedItemsManagerImpl Skipping processing of ObjectRelationSetSpec for type vsphere:vSphereClientInstance, since relationsViewId is null [2019-07-02T14:18:56.330+03:00] [WARN ] plugin-deploy10 com.vmware.vise.mvc.relateditems.RelatedItemsManagerImpl Skipping processing of ObjectRelationSetSpec for type Folder, since relationsViewId is null [2019-07-02T14:18:56.337+03:00] [WARN ] blueprint-postprocessor-39 com.vmware.o6jia.context.web.WebXmlParser error-page exception-type is still not supported, skipping! [2019-07-02T14:18:56.386+03:00] [INFO ] 0:0:0:0:0:0:0:1-5090-exec-10 com.vmware.vise.util.session.SessionUtil Generated hashed session id: 100020 [2019-07-02T14:18:56.386+03:00] [INFO ] 0:0:0:0:0:0:0:1-5090-exec-10 70000065 100020 200002 com.vmware.vise.util.session.SessionUtil Mapping: /websocket: sessionid to -> 100020 with clientId: 200002 [2019-07-02T14:18:56.539+03:00] [INFO ] data-service-pool-88 com.vmware.vise.util.session.SessionUtil Generated hashed session id: 100021 [2019-07-02T14:18:56.540+03:00] [INFO ] data-service-pool-88 com.vmware.vise.util.session.SessionUtil Mapping: /websocket: sessionid to -> 100021 with clientId: 200002 [2019-07-02T14:18:56.593+03:00] [ERROR] plugin-deploy10 com.vmware.vise.extensionfw.impl.PackagesDeployer Error deploying one of more bundles for the plugin package C:\ProgramData\VMware\vCenterServer\cfg\vsphere-ui\vc-packages\vsphere-client-serenity\com.infinidat.powertools.develop.arnons.mbp-5.0.0.5 java.lang.Exception: java.lang.ClassNotFoundException: com.infinidat.proxyServlet.ProxyServlet cannot be found by com.infinidat.powertools.develop.arnons.mbp_1.0.0 at com.vmware.vise.extensionfw.impl.BundleLifeCycleListenerImpl.onStartFailed(BundleLifeCycleListenerImpl.java:92) at com.vmware.o6jia.context.web.BlueprintActivator.notifyBundleLifecycleListenersForExceptions(BlueprintActivator.java:303) at com.vmware.o6jia.context.web.BlueprintActivator.initializeContextFor(BlueprintActivator.java:217) at com.vmware.o6jia.context.web.BlueprintActivator.lambda$postProcessBundle$1(BlueprintActivator.java:203) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.ClassNotFoundException: com.infinidat.proxyServlet.ProxyServlet cannot be found by com.infinidat.powertools.develop.arnons.mbp_1.0.0 at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:372) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:364) at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:161) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at com.vmware.o6jia.context.web.HttpServiceHelper.extractServletClass(HttpServiceHelper.java:489) at com.vmware.o6jia.context.web.HttpServiceHelper.prepareServletInstance(HttpServiceHelper.java:458) at com.vmware.o6jia.context.web.HttpServiceHelper.register(HttpServiceHelper.java:168) at com.vmware.o6jia.context.web.BlueprintActivator.doCreateContextFor(BlueprintActivator.java:262) at com.vmware.o6jia.context.web.BlueprintActivator.initializeContextFor(BlueprintActivator.java:214) ... 6 common frames omitted [2019-07-02T14:18:56.657+03:00] [INFO ] plugin-deploy10 com.vmware.vise.extensionfw.impl.plugin.PluginExtensionManager Plugin data for com.infinidat.powertools.develop.arnons.mbp:5.0.0.5 was not removed fromthe cache as it was not found. [2019-07-02T14:18:56.657+03:00] [INFO ] plugin-deploy10 com.vmware.vise.extensionfw.impl.plugin.PluginExtensionManager Extensions for plugin com.infinidat.powertools.develop.arnons.mbp:5.0.0.5 were not removed from the cache as they were not found. [2019-07-02T14:18:56.657+03:00] [WARN ] plugin-deploy10 com.vmware.vise.extensionfw.impl.plugin.PluginStyleManagerImpl Plugin com.infinidat.powertools.develop.arnons.mbp:5.0.0.5 is not registered! [2019-07-02T14:18:56.658+03:00] [WARN ] plugin-deploy10 c.v.vise.extensionfw.impl.plugin.PluginLocalizationManagerImpl Plugin 'com.infinidat.powertools.develop.arnons.mbp:5.0.0.5' has been previously removed. [2019-07-02T14:18:56.804+03:00] [INFO ] plugin-deploy10 com.vmware.vise.extensionfw.impl.OsgiBundleDeployer Waiting for FrameworkWiring refresh... [2019-07-02T14:18:56.840+03:00] [INFO ] plugin-deploy10 com.vmware.vise.extensionfw.impl.OsgiBundleDeployer FrameworkWiring refreshed successfully. [2019-07-02T14:18:56.840+03:00] [ERROR] plugin-deploy10 com.vmware.vise.extensionfw.impl.DeploymentEventLoggerImpl Event=PACKAGE_DEPLOY_FAIL; Params=com.infinidat.powertools.develop.arnons.mbp, 5.0.0.5 [2019-07-02T14:18:56.854+03:00] [ERROR] vc-extensionmanager-pool-181 70000051 100019 200002 com.vmware.vise.vim.extension.PluginStatusTaskManager DEPLOYMENT_FAILED: Error deploying plugin package com.infinidat.powertools.develop.arnons.mbp:5.0.0.5. Reason: Deployment error. [2019-07-02T14:18:56.891+03:00] [INFO ] plugin-validation1 com.vmware.vise.extensionfw.impl.OsgiUsageValidationService Started validation of OSGi bad practices. [2019-07-02T14:18:56.891+03:00] [INFO ] plugin-validation1 com.vmware.vise.extensionfw.impl.OsgiUsageValidationService OSGi validation skipped for plugin package com.infinidat.powertools.develop.arnons.mbp:5.0.0.5. It is not deployed. [2019-07-02T14:18:56.891+03:00] [INFO ] plugin-validation1 com.vmware.vise.extensionfw.impl.OsgiUsageValidationService Finished validation of OSGi bad practices.
Hello,
We are looking into this.
Could you please:
1) Send us the whole contents of the vsphere-ui logs folder
2) If possible, PM me the plugin zip so we can try to run it locally
Regards,
Plam
Hello,
Unfortunately, the logs do not reveal too much - you plugin's ProxyServlet should be on the bundle's classpath and thus discoverable. We can't really reproduce with our own plugins though (things are working fine in the same scenario)... so it might be specific to your war. I still haven't received a PM - would you please double check if you sent me the plugin zip, as it will help us a lot in figure out what's going on.
Regards,
Plam
Hi. I can't seem to be able to send a PM from this platform (I'm getting a Javascript error...) or attach a file to the PM.
Can you please let me know if there is another option to send our plugin's zip file? Thanks.
Hello,
Please contact plugin@vmware.com. Then we'll get back to you on how to transfer the file.
Thanks,
Plam
Hello,
It seems like a broken war file. We checked out the zipping info of the war and it seems that an entry for "WEB-INF/classes" is missing from the zip metadata, thus Java fails to find the ProxyServlet class which is located inside the "WEB-INF/classes" folder of the zip.
We were literally able to fix the plugin by just getting the contents of the zip and zipping them in a new war file.
How did you produce this war? Also, can you please try re-zipping the contents with some stardard OS utility and see if it fixes the problem?
Regards,
Plam
Thank you very much! This indeed seems to be the problem. I am using Python's "zipfile" module to dynamically create the war file (its contents are dynamic), and I didn't know I needed to add entries for the directories (it was never an issue). Adding them now makes the plugin deploy correctly.
Unfortunately, I am now facing a different issue where the content, in the tab we add to the client, fails to load and instead shows a Java NullPointerException stack trace. Again, the content shows up correctly in the FLEX client and in older versions of vSphere, so this must be yet another change that breaks our compatibility. Should I create a new post for this problem? Can you try to reproduce this problem with the plugin that we sent?
Thank you very much for looking into this. I appreciate the help from the VMware team.
Arnon
Hi Arnon,
The reason for this is that your servlet is not really fulfilling the Servlet interface contract - in particular, the getServletConfig() method is the problematic one. As per the Servlet interface, getServletConfig() "returns a {@link ServletConfig} object, which contains initialization and startup parameters for this servlet. The <code>ServletConfig</code> object returned is the one passed to the <code>init</code> method. <p>Implementations of this interface are responsible for storing the <code>ServletConfig</code> object so that this method can return it. The {@link GenericServlet} class, which implements this interface, already does this.".
What this means is that whenever the servlet container has computed your servlet config and is ready to initialize your servlet (by calling the init() method), it will pass the servlet config and you are responsible for storing it and returning it on subsequent getServletConfig() calls (see the GenericServlet implementation, for example).
Please try this out to verify that this is indeed the case.
Regards,
Plam
Hi.
Thank you again very much for your help! I got the plugin to work now after saving the "config" object from "init" and returning it from getServletConfig.
Arnon