How do I get my module onto my server?

I can’t seem to properly get my module installed on my server. The correct folders and Application.xml files are all in their proper places.

It works locally. I can run the simulated server through the eclipse debugger and use my app just fine.

However, when attempt to move it to my actual EC2 instance (that is, the officially-provided AMI available here), it breaks in one of two ways:

  1. No error message on the server or the client. The client simply hangs trying to connect.

  2. This error message appears on the server

loadModFunctions[recorder/_definst_]: Module class not found or could not be loaded. Check [install-dir]/conf/recorder/Application.xml to be sure all Modules/Module/Class paths are correct: name:RecorderModule class:com.xxxxxxxxx.recorder.RecorderModules

The client can connect and publish streams, but it cannot use any of the functionality contained in the module.

I can produce problem #1 when I just copy my .jar file over and put it in the lib folder. I think my problem here is similar to the one in this thread.

So I, based on that, I tried to combine my dependencies in with my .jar, and all attempts so far led to error message #2. I even attempted to edit my META-INF/MANIFEST.MF file of the combined .jar to include the “Main-Class” of my application as it is in the debug settings of Eclipse, which is “com.wowza.wms.bootstrap.Bootstrap”, but that didn’t help.

I’ve tried to use both a Runnable Jar file and a regular Jar archive through Eclipse, but I was not able to get my module working on my server.

So how am I supposed to do this?

Hi,

Let’s continue to work through the ticket that you have opened with support.

For reference this is Ticket # 104695

Daren

Thank you for updating the thread.

Matt

I hope you do not resent me getting help from the community during your off hours

When it breaks in way #1, I get this error:

Exception in thread "ServerHandler.12" java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentialsProvider
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:190)
        at com.wowza.wms.util.ModuleUtils.addModuleToApp(ModuleUtils.java:32)
        at com.wowza.wms.util.ApplicationUtils.a(ApplicationUtils.java:183)
        at com.wowza.wms.util.ApplicationUtils.loadConfigFile(ApplicationUtils.java:321)
        at com.wowza.wms.application.ApplicationInstance.a(ApplicationInstance.java:646)
        at com.wowza.wms.application.ApplicationInstance.<init>(ApplicationInstance.java:269)
        at com.wowza.wms.application.Application.getAppInstance(Application.java:569)
        at com.wowza.wms.module.ModuleConnect.connect(ModuleConnect.java:1072)
        at com.wowza.wms.request.RequestProcessFunctions.processFunctions(RequestProcessFunctions.java:89)
        at com.wowza.wms.request.RequestProcessData.flushFunction(RequestProcessData.java:58)
        at com.wowza.wms.request.RequestProcessData.processNextRequest(RequestProcessData.java:852)
        at com.wowza.wms.request.RTMPRequestAdapter.service(RTMPRequestAdapter.java:570)
        at com.wowza.wms.server.ServerHandler.a(ServerHandler.java:653)
        at com.wowza.wms.server.ServerHandler.a(ServerHandler.java:375)
        at com.wowza.wms.server.ServerHandler.messageReceived(ServerHandler.java:487)
        at com.wowza.wms.server.ServerHandlerThreadedSession.run(ServerHandlerThreadedSession.java:108)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentialsProvider
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... 31 more

I resolved it by installing everything differently on a new server.

I took by auto-generated .jar file, and the two jar files that it depended on, commons-codec-1.9 and aws-java-sdk-1.4.7, and installed them using the “startup package” method.

And everything worked fine.