嘿伙计们,我正在开发一个使用Google App Engine的项目。要从我的设备获取数据,我们正在使用MQTT。 org.eclipse.paho.client.mqttv3。*库使用“client.connect()”启动一个Thread。 经过一些研究,我发现在使用GAE时你不能简单地创建线程。显示以下错误: java.security.AccessControlException:拒绝访问(“java.lang.RuntimePermission”“modifyThreadGroup”)
所以我继续搜索,有人告诉使用以下代码而不是“正常”线程:
线程monitoringThread = ThreadManager.createThreadForCurrentRequest(new Runnable(){..}
所以我反编译了paho库,查找创建Thread的位置并更改它。 我创建了一个新类,将其导出为mymqttclient.jar 在eclipse中,我改变了我在构建的构建顺序 - > Java构建路径 - >顺序和导出所以mymqttclient.jar在mqtt-client-0.4.0.jar之前加载所以它将使用我创建的函数和monitoringThread。
但是我怎样才能改变web-inf / lib中.jar的顺序?
非常感谢你的回答,直到现在我还找不到有用的东西。
答案 0 :(得分:0)
首先,无需反编译任何可从here获得的Paho代码。
既然您现在可以获得干净的源代码,为什么不只是修改原始类并重建jar文件,那么您不必担心搞乱Classpath以使您的类首先加载?
答案 1 :(得分:0)
好吧,如果有人遇到同样的问题,我会找到答案。
在appengine-web.xml中,您可以指定类似
的顺序<class-loader-config>
<priority-specifier filename="mailapi.jar"/>
</class-loader-config>
mailapi.jar现在将优先考虑。
来源:https://cloud.google.com/appengine/docs/java/runtime?hl=en#Java_Class_loader_JAR_ordering