|
前段时间研究了下webos 开发, 随便请教了几位前辈 , 大致了解了webos的前后台调用机制(即:javascript 调用 java service) .有几位朋友询问过相关问题,我就不一一回复了, 就在这里献丑了.../ _+ I2 L j% b. ^$ v2 W2 y
一:java service 开发:5 c! ^! y# y; a0 T! K
- E7 V/ F; ^: }: _jar :! h# P: e, K* z6 O3 E& M, ]0 j* M
serviceframework.jar , json.jar (在palm 模拟器里面有 抱歉 少了个 lunaservice.jar 这个是处理异常的)
2 _& w8 O V* c- code : MyService.java3 t* J8 U! R4 O. b1 p6 M; d2 s" r
- G) v- x0 P0 x( ?5 X- package palm.greenwoods.demo _ L' R& u6 f8 g7 X
- import com.palm.luna.LSException;+ P& n. Y$ u; a; Q6 z) i E
- import com.palm.luna.service.LunaServiceThread;
* G7 t& v1 O4 a( [7 N& r - import com.palm.luna.service.ServiceMessage;* e, m' v+ `) p9 H
- import org.json.JSONException;* z j1 I6 \0 ~
- import org.json.JSONObject;
2 I$ `) h" v' u) ~& T - , k3 o8 y% N2 x$ T8 r
- public class MyService extends LunaServiceThread {+ C/ C# g0 R" I/ m! R f* s2 G
- public MyService () throws IOException {
7 ^7 I! e; x" D; G - //code
$ [$ ]3 t* k7 L - }
) n* b9 ~1 p8 L8 G& z -
^4 H: B, ]( K8 J - @LunaServiceThread.PublicMethod //新的service 接口
8 E- m& D9 e( }* M0 X$ i- N - public void status(ServiceMessage msg) throws JSONException, LSException,
5 }4 Y! a. [+ r, P - InterruptedException, IOException {
6 t5 b' t4 R- f! G - JSONObject reply = new JSONObject();
2 s4 _) H, l7 s6 G( X - reply.put("action","status");
# U( G0 Q4 j& t( B! M! D$ k I# h - reply.put("status", status);1 X8 u) V) c$ j" q
- msg.respond(reply.toString()) ;//ServiceMessage msg 这个是前端的 请求对象 respond 方法可以返回数据到前端 js; j9 _, i/ ]' p9 t( U4 `
- }- I; i* j% o. p2 i" f0 L. S
- }
复制代码 Export => MyService.jar 6 t9 l9 W' A9 m, ]; X$ |% d, o1 G1 k
# w. @2 @" B5 b5 G* y4 \) ^$ i7 A
/ ?; g- Y0 t5 P6 f' V二:java service 打包:
) {) c) Y9 G7 H. ~
6 n8 M0 [) D& A% e/ @目录结构- pack \
! L1 N1 C" f6 J* D! g! ?0 M9 N - CONTROL\4 g! w2 W0 R9 f% M8 |2 O1 Z
- #配置问题 palm.greenwoods.demo 为服务唯一ID3 B! Q) R A3 B& W8 l) U' G& O. H' o
- control ( W8 o1 g1 W5 ` T
- Package: palm.greenwoods.demo3 D0 [, v1 Y# V& c' w' |
- Priority: optional- G/ Y$ u7 T2 o6 O- B; a
- Section: Network; p8 w* B* ^2 u9 n. Z# v
- Version: 1.02 X. U4 U2 J% T/ t
- Architecture: all
6 a5 |! _% l. q2 ~" f - Maintainer: GreenWoods [email]yulim.wang@gmail.com[/email]7 i3 k5 J2 I( `, w7 ?$ @3 U
- Depends:
- R1 G0 o/ Z6 p% I. B - Description: MyServer Service+ w9 w( G3 p0 @8 D
- Source: {"Source":"http://user.qzone.qq.com/86121652/","Homepage":"http://user.qzone.qq.com/86121652/","Category":"Services","License":"GNU GPLv2","Type":"Service","FullDescription":"MyService.","PostRemoveFlags":"RestartJava","PostUpdateFlags":"RestartJava","Title":"GeXinService","PostInstallFlags":"RestartJava"}
* |% W8 f6 d0 u+ X0 v- k8 I1 [ - #服务安装执行脚本2 }# f+ P$ E$ Z7 O: T
- postinst+ Q7 N0 h* W6 i9 w; [4 Z7 }5 D
- #!/bin/sh! Z: N7 b" l8 L: l. x7 j
- start on started java-serviceboot+ x/ H6 v5 ?' ]) l- M# i' P/ x
4 D) P4 ]2 {/ {4 k4 }- mount -o remount,ro /
" @8 A3 z$ k: I - 2 ?' W/ s/ E$ S7 a! q7 P# R/ F' O
- APP_PATH=/media/cryptofs/apps/palm.greenwoods.demo
9 n, I$ K- [! Y% s: O; r/ ` - & {6 @6 V p$ c6 S, s7 J W
- /bin/cp -f $APP_PATH/usr/lib/luna/java/MyService.jar /usr/lib/luna/java/MyService.jar
, h: x" q- `; b1 _- p' x
( W3 |% t9 o6 t" I8 G- /bin/cp -f $APP_PATH/usr/share/dbus-1/system-services/palm.greenwoods.demo.service /usr/share/dbus-1/system-services/palm.greenwoods.demo.service2 n: h- x O: W( l5 v) e7 o
- 2 l& M+ ~& I( B4 y) w
- /bin/cp -f $APP_PATH/etc/event.d/palm.greenwoods.demo /etc/event.d/palm.greenwoods.demo! y& n2 J3 X% a; L+ s, U
9 {+ \& r3 w$ q. r% F3 e- if [ -z "$IPKG_OFFLINE_ROOT" ]; then
, z- L/ Y3 ~2 B. t4 o3 b - killall -9 java
) j" Y+ e' A$ N& I- L' z+ m - mount -o remount,ro /
* g* `! t+ z' U7 O, X - fi
1 V9 H- v; T$ f! l0 r- t6 | - 1 c" |) X8 E' K8 q4 {
- stop java-serviceboot4 P( c' V4 E# q
- start java-serviceboot
) X& N+ E6 [2 r/ H, j1 g I - start palm.greenwoods.demo2 J8 I" G/ T- a
- 3 ^3 @# C6 h2 j, z7 Z N6 j- ^
- exit 0
5 `* p5 w: e0 |) i( M - preinst$ |+ F& B6 u/ [/ W- g0 L" ` p
- mount -o remount,rw /! Z% E& ~1 p) ^% n& e9 r" c9 ]
- #卸载服务脚本
9 A" e# o& Y/ m& T. y3 a) { - prerm& j! l+ w5 t) Q! {. \# P ^
- #!/bin/sh
4 {: V$ c' S1 l( p0 f9 B* m - mount -o remount,rw /: s+ t3 R; @* j4 a$ n+ Q" ` K
) h& `9 q9 a {& p; d- stop java-serviceboot
0 Y6 c3 ^, Q5 K1 a, b# W3 \ - stop palm.greenwoods.demo# c' \: R+ g t* r/ S, V; \! b+ ^
- - G+ x* P% y+ g7 n
- /bin/rm -f /usr/lib/luna/java/MyService.jar
$ B# D" e! e/ L8 R& X
" g0 \* M5 F# E |# U& n' Q( f- /bin/rm -f /usr/share/dbus-1/system-services/palm.greenwoods.demo.service
4 @* w+ G& p8 I3 d+ ~ - ! C& n; _- K# i# }: G
- /bin/rm -f /etc/event.d/palm.greenwoods.demo+ m( `( C6 O! W
- 2 j0 Q# L. ~0 w6 \
- start java-serviceboot
/ C7 ?" U1 b: a - etc\event.d\
1 J1 ]8 P2 g$ H( F3 a; g, g3 J/ z# K# \ - #启动服务器 文件名必须和 服务唯一ID 一致, A- O7 }' `/ s. s' F
- palm.greenwoods.demo
) r: K2 R. b+ o2 T2 F - description "MyServer Service"
; l9 Q1 n8 R0 O% Y- \( R F - 0 ~* Y6 z9 ~+ l, d8 O6 q# z" \
- start on started java-serviceboot
- ^ S) [8 ]8 [ - L5 W6 M* [% e
- script
, a+ l" H1 D0 X - sleep 10
' W7 c* d% G! ]) y: Z - returnTrue=0
" d" ^3 q2 u( m' ^0 z( O- p - tries=0
7 \* w8 P7 n6 \5 Y0 p5 K0 q - while [ $returnTrue -eq 0 -a $tries -le 20 ]
) F/ a+ g \* O - do
8 S8 W3 D, p! m i* D - returnVal=$(luna-send -n 1 luna://palm.greenwoods.demo/status '{}' 2>&1): [ R3 b1 e: Y" L4 t* l3 c: p
- tries=`expr $tries + 1`2 o! ]( n; u8 \5 f# @8 v
- if [ "$returnVal" = "** Message: serviceResponse Handling: 2, {"returnValue":true}" ]
9 _* A |# z' I& R - then
# i+ ~' c5 g8 c. z' d5 m - returnTrue=1; g& W+ O* y+ e5 {' G7 Q6 ]! H
- else* ^# A6 Y8 I* `
- sleep 10# g \) Q/ H" d
- fi
& R# i8 r) _$ {# P" O - done6 e7 H! }4 S. ]$ k* P
- end script1 Q c' s3 Q% d/ d
- usr\ ]8 P v$ l$ D* V; d
- lib\luna\java\9 ^1 e/ v& {9 B* _
- MyService.jar2 o6 z1 _. u7 N5 g
- share\dbus-1\system-services\
* `; s1 { w" j$ b6 M8 v' O - palm.greenwoods.demo.service
# a% J. X3 O2 e* \/ E% e - [D-BUS Service]2 K3 X% x7 {- w) X
- Name=palm.greenwoods.demo
# { g& b% F7 `! u7 `7 n6 n3 F - Exec=/usr/bin/luna-helper 'luna://com.palm.vm/launch' '{"serviceName":"palm.greenwoods.demo","className":"palm.greenwoods.demo.MyService"}'
复制代码 所需打包工具 Ipk Packager.jar 选择 pack 所在目录 入图所示
# N4 M. u4 d9 z0 a6 M. {3 `(不好意思 无法传图片 请看附件 )5 a8 V$ F0 l1 Y4 c2 y1 Q
三 : 前台调用- new Mojo.Service.Request("palm://palm.greenwoods.demo/", {
3 y2 ^* ~0 ^7 I4 C* U* Z' M - method: "status",+ O2 }5 v" N4 K2 L- z
- onSuccess: this.listenStatus.bind(this),
) Z( v* Y4 B# X" u9 s - onFailure: this.serverFail.bind(this)
! L( ~" {# Y/ ~! S" C - });
复制代码 注:以上为个人见解 , 可能有不完善之处 ,还望高手指正 ! 献于 Plamer 谢谢. |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?加入我们
×
评分
-
查看全部评分
|