|
前段时间研究了下webos 开发, 随便请教了几位前辈 , 大致了解了webos的前后台调用机制(即:javascript 调用 java service) .有几位朋友询问过相关问题,我就不一一回复了, 就在这里献丑了...
0 A/ N" ^) _ U8 Z. a, P* g一:java service 开发:
0 Z0 ]+ Y. o7 c$ E6 }9 k) R9 w% \: p0 i- s. S
jar :
+ b% i6 ~/ x6 `" @0 V serviceframework.jar , json.jar (在palm 模拟器里面有 抱歉 少了个 lunaservice.jar 这个是处理异常的)- 5 F8 G3 ^3 U4 l% o( T
- code : MyService.java4 U q9 R7 G* Y
- " }# Z" x/ X8 a1 _% P9 }' p0 F ~
- package palm.greenwoods.demo/ W9 x& z5 [& W
- import com.palm.luna.LSException;
! U6 x+ b- n7 T* e2 O& T - import com.palm.luna.service.LunaServiceThread;
2 {# g. B v/ \( ~8 x4 c - import com.palm.luna.service.ServiceMessage;) j2 x# L/ J& a
- import org.json.JSONException;' l; b% v) v6 O8 E9 v. A
- import org.json.JSONObject;
) F* x+ B& V3 ~ ?. A# Y - & p! K( j( n: k- `, k1 ^
- public class MyService extends LunaServiceThread { n5 v1 V7 H1 E
- public MyService () throws IOException {
/ C* g; }# @& `/ j# \' Q8 r7 k1 } - //code% @- {4 A {$ t# C8 D& Z- g
- }+ f: l% w$ L8 x
- % P4 l4 b- `9 S, }% x, N
- @LunaServiceThread.PublicMethod //新的service 接口: o- E3 S3 X' z
- public void status(ServiceMessage msg) throws JSONException, LSException,
# A! r4 t+ n, |0 C" \( | - InterruptedException, IOException {
1 p( h1 J# v- }# U9 L+ E - JSONObject reply = new JSONObject();: ]6 d* K6 X2 S H: ]
- reply.put("action","status");1 L: }: I6 m1 b
- reply.put("status", status);
. W9 o( ^; K0 S" P6 [ - msg.respond(reply.toString()) ;//ServiceMessage msg 这个是前端的 请求对象 respond 方法可以返回数据到前端 js
# k" [# J* @. D, i - }
/ I6 I6 b. Q2 h9 q - }
复制代码 Export => MyService.jar ) s# m2 t% E1 R8 x9 ?2 ]
0 [0 L4 _* \( E% D& H/ J& [
5 ~ p: s+ U6 q2 B: T. h
二:java service 打包:
4 E- }% M+ A7 p0 X5 j
D: G- @0 F6 K# ^, D, J目录结构- pack \
, Y7 V- Y( I" I$ s! K - CONTROL\
, u' a4 ^ ^6 N7 a - #配置问题 palm.greenwoods.demo 为服务唯一ID/ u7 {# K" i, o! l# v$ q. M
- control
: Y; S2 Q; s" a8 h' w - Package: palm.greenwoods.demo" ^" O6 c2 L3 C9 Y f, d1 V* F
- Priority: optional
, c! w% e3 p: L( t7 ?4 w - Section: Network
" w5 n7 p7 \& P+ p - Version: 1.0
+ E2 W6 [' b1 G Q - Architecture: all
0 H) X+ ]- o# x/ A8 e, C - Maintainer: GreenWoods [email]yulim.wang@gmail.com[/email]
2 I0 v+ j- _, x8 C7 \* s - Depends: - V! \$ e& w1 H5 a# v; z5 i$ k; T
- Description: MyServer Service
- U" Q0 }( v5 |. n( 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"}
! u, a2 r( ^3 N - #服务安装执行脚本
- c& P% Z# {$ m4 M' J" [' X - postinst
2 j8 }5 X! z0 O0 U) E - #!/bin/sh9 H* S" @( ~9 B0 k$ Y- ^9 h
- start on started java-serviceboot
8 v2 f; N/ _0 |/ G" T( C7 w - ) s& f9 \3 I( I: T1 }/ M) }3 m
- mount -o remount,ro /
6 |0 N( R5 o5 s# V
& n" |3 K" W+ a1 G) U( [- APP_PATH=/media/cryptofs/apps/palm.greenwoods.demo
1 [8 ~% _' C# P% E" e
$ R+ u4 Z0 H/ G+ w3 g+ r/ m* F6 i- /bin/cp -f $APP_PATH/usr/lib/luna/java/MyService.jar /usr/lib/luna/java/MyService.jar1 g2 U" ~8 c, Q/ B0 |
- # C% L4 ?4 A( [: ]
- /bin/cp -f $APP_PATH/usr/share/dbus-1/system-services/palm.greenwoods.demo.service /usr/share/dbus-1/system-services/palm.greenwoods.demo.service9 J; {; a( L! Q% {& W+ F3 W/ W
- ! ~9 F0 [0 |! h0 X3 n% g) I
- /bin/cp -f $APP_PATH/etc/event.d/palm.greenwoods.demo /etc/event.d/palm.greenwoods.demo
/ O' X! f4 i; H4 D' E8 d% b
r( ~$ }* P$ ?- [! X- if [ -z "$IPKG_OFFLINE_ROOT" ]; then
% I; e# F& j! s! u - killall -9 java& q" I, H" X, j/ @8 z( e4 i, } C+ t% M$ F
- mount -o remount,ro /
8 J- ^5 x" g2 l: C, ?0 `$ ]& {- J5 ] - fi
! h8 c- E5 I% `! D: ? - 9 w: q) ]3 h# g1 U2 Z' D1 B
- stop java-serviceboot! Z) p5 ~; N0 q* q- }! F
- start java-serviceboot9 {! Q1 H: l/ L- q: X2 G- p
- start palm.greenwoods.demo
" u( o* x2 c; d3 ]+ O - 2 f) |+ l" `6 P0 L {1 N
- exit 0
5 b. Z1 ?$ z$ Q$ n. e: ] - preinst
/ t! T9 l W. I9 l4 h - mount -o remount,rw /
1 B3 l6 Q1 S2 a4 ]& u: L2 |2 m, ` - #卸载服务脚本( W) g' t: \( n$ e
- prerm! B! v! g3 ~' ?% G3 a' M
- #!/bin/sh
- X! W9 G6 s- |9 ]2 t, s - mount -o remount,rw /* Y) T. E5 Q2 U0 `' t
- & y! B# T |1 o6 s7 h
- stop java-serviceboot4 R0 e) l& c* N; j$ p. w( M
- stop palm.greenwoods.demo
' `( T- m1 A! p! B' X" Y
8 R6 ^. |4 m* I% k) U& |% B8 p- /bin/rm -f /usr/lib/luna/java/MyService.jar
: u9 M$ ?( f+ x. j. |" N
* K m; C# |5 J) i" L; n: G- /bin/rm -f /usr/share/dbus-1/system-services/palm.greenwoods.demo.service, w' |5 L; \ m( v& a
- ' e- e6 z: U' {
- /bin/rm -f /etc/event.d/palm.greenwoods.demo) `# c* C* H8 r' U9 @
# y t. c# V' E+ `* y8 L5 b A y- start java-serviceboot
+ ^& H6 u5 F8 L& u1 G1 L$ F, ~& q - etc\event.d\
7 D( b; d N3 O( f0 X - #启动服务器 文件名必须和 服务唯一ID 一致' ~' s) ~% k, i- s U8 `4 h
- palm.greenwoods.demo
1 @# s5 F9 f$ C# ?* O - description "MyServer Service", W1 R& w, g8 C( P
4 d6 p1 g) @* m# c9 q3 y8 r* X) F- start on started java-serviceboot- s2 Q8 k: O7 e
" M/ n5 j( m3 [& e( r" K/ }- script
; T1 v0 E' s# h5 d+ Z/ ~ - sleep 100 l, i" e0 f) Y0 [8 R6 |( g
- returnTrue=0
; o5 g2 J: m8 Y( q g0 c - tries=06 P+ C! M1 U/ n1 D# O+ F
- while [ $returnTrue -eq 0 -a $tries -le 20 ]
; i( X; n5 O E7 w - do: U) p" {+ ~; B& g8 ~* w
- returnVal=$(luna-send -n 1 luna://palm.greenwoods.demo/status '{}' 2>&1)
1 e1 g6 @! \5 T - tries=`expr $tries + 1`1 N1 U( O7 ?) s5 S+ D3 C, ~9 h
- if [ "$returnVal" = "** Message: serviceResponse Handling: 2, {"returnValue":true}" ]9 g. ^# M+ l% X: Y1 g
- then, n& ^0 E; c7 C5 [: w' Q9 u
- returnTrue=1/ q$ j) I* i) F' p) N' B
- else7 J" ^8 u0 B9 E* ~; X' T2 h
- sleep 102 l) R3 r/ w4 Z$ n/ }& y
- fi
: t3 L: L w2 ]. I1 C2 B8 z# P - done
- H/ c9 K7 x4 `0 J! O* k - end script3 N" {) y4 M; i" r
- usr\
; ~7 T& o4 ^& ~/ J, ^) | - lib\luna\java\& K' m8 Z, y7 x/ v2 J# N2 K
- MyService.jar$ B" N$ i3 r! v# `/ B
- share\dbus-1\system-services\
& C. o3 ~7 q+ `3 z8 P7 { - palm.greenwoods.demo.service6 c6 f2 G0 N; \ u9 y
- [D-BUS Service]9 }/ Y1 S3 O4 {$ x% Q6 R" G
- Name=palm.greenwoods.demo- v& H5 R' T8 x9 ?
- Exec=/usr/bin/luna-helper 'luna://com.palm.vm/launch' '{"serviceName":"palm.greenwoods.demo","className":"palm.greenwoods.demo.MyService"}'
复制代码 所需打包工具 Ipk Packager.jar 选择 pack 所在目录 入图所示# _% R( K9 R0 a* f& ?9 R& Z
(不好意思 无法传图片 请看附件 )) A3 @* \- q4 C8 U9 ^! K; N
三 : 前台调用- new Mojo.Service.Request("palm://palm.greenwoods.demo/", {
$ T! Y+ d3 Y) Y/ l - method: "status",) e4 M/ p- b3 N
- onSuccess: this.listenStatus.bind(this),
$ Q7 _5 E& e" h" J, w8 ]& F - onFailure: this.serverFail.bind(this)8 R7 G' z- u8 p$ N: D
- });
复制代码 注:以上为个人见解 , 可能有不完善之处 ,还望高手指正 ! 献于 Plamer 谢谢. |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?加入我们
×
评分
-
查看全部评分
|