Wowza Modules should be loaded by separate classloaders

Recently I faced with the same problem described here http://stackoverflow.com/questions/28785085/how-to-prevent-hangs-on-socketinputstream-socketread0-in-java

In short any blocked-socket library including apache HttpClient may be blocked forever because of following reported but still not fixed issues:

https://bugs.openjdk.java.net/browse/JDK-8049846

https://bugs.openjdk.java.net/browse/JDK-8075484

I’ve switched to HttpAsyncClient 4.1.1 but faced with following issue: Wowza Streaming Engine include org.apache.http.* components inside wms-restlet-2.2.2. My HttpAsyncClient 4.1.1 requires httpcore-4.4.4 and I included all necessary dependencies into my module jar manifest

but it looks like Wowza includes lower version and my code failed due to the fact that Wowza classloader load all classes: wowza system classes and all module classes. This way one module cannot have it’s own library version necessary. So it’s impossible to have two complex Modules installed on one server as each Module uses different library version. Getting more and more complex Wowza starts using common java libraries itself and this problem getting more and more important for us. Our Module still supports all Wowza versions starting from 2.2.4 and we cannot upgrade our dependencies since out Module has common dependency with Wowza.

To build our Module we use maven template https://github.com/WMSPanel/wowza-maven-template/blob/master/pom.xml and one of the build step is to copy all module’ dependencies into separate folder in wowza/lib like wowza/lib/wmspanel-lib.

I’m pleased developing many years for wonderful Wowza server. Wowza as well as modules getting more and more complex and it looks like there is only one way to avoid these problems - wowza have to use separate classloader for each Module and shouldn’t include it’s own dependencies into classpath as Module or it’s dependencies may depend on another version of the same libraries. This way a Module or Wowza core may depend on different versions and all will works perfect. Of course wowza should include wowza api classes into Module classloader.

There is another way though. Each Module can implement it’s own classloader. I think it’s bad idea as it’s very complex task for individual Module authors.

Wowza team what do you think about this proposal ? Can we expect to have this functionality in the next server version ?

Hello

Thank you for the input and feedback. I have forwarded on this request for review by our engineering team.

Thanks,

Matt

Hi Matt,

is there any news ? New good example arrives with one client feedback.

He still use 4.0.3 and there is wms-restlet-2.1.6.jar there. wms-restlet-2.1.6.jar has apache httpcore with version older than httpcore-4.3.3. And he cannot install my module even

though module has all necessary dependencies. And cannot skip using HttpAsyncClient 4.1.1 due to java bug I described above.

Per my understanding the only way to prevent Wowza from jar hell is to use separate class loader for all modules.

I’m ready to help with that. We’re planning to proceed development for Wowza and this feature MUST HAVE for any application server. Wowza is not just media server with simple modules support - it’s already application server.

Andy,

thanks a lot. We’re ready to help with implementation/consulting if necessary as it’s very important for us

Hi,

The feature you have requested has been added to the developer backlog and is under consideration. However there is no definitive timeframe as to when we will support it. I will make sure to pass on your feedback to our product management team. Please do check back in periodically to our Software Updates page to see if your feature request has been deployed.

Regards,

Andy_E