рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ
рдПрдХ рдУрдПрд╕рдЬреАрдЖрдИ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдкрд╛рдардХ рдХреЛ рднреЗрдЬ рд░рд╣рд╛ рд╣реВрдВ
, рдЬреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
рддреЛ рдмрд╛рдд рд╣реИред рдХреНрд▓рд╛рд╕рд┐рдХ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╣реИ рдФрд░ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣
рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
рдЧреНрд░рд╛рд╣рдХ <-> рдкрд░рд┐рд╡рд╣рди <-> рд░рд┐рд╕реАрд╡рд░ <-> рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ / deserializer <-> рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рд╡рд┐рдзрд┐ред
рдПрдХ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЛ рдПрдХ рдмрджрд▓реА рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП JSON рдореЗрдВ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХреАрдХрд░рдг рдпрд╛ XML рдореЗрдВ рдХреНрд░рдорд╛рдВрдХрдиред
рдЖрдк рдмрд╛рдж рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд░рд┐рд╕реАрд╡рд░ рдФрд░ рд╕реАрд░рд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рд╕рд░реНрд╡рд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рд┐рд╕реАрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕реАрд░рд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП, рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
interface ISerializer {
String selialize(Object obj);
}
рдШрдЯрдХреЛрдВ рдХреЛ рдмрд╛рдБрдзрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧрдлреНрд░реИрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдлрд┐рд░ рд╕реЗ
рд▓рд┐рдВрдХ рдкрд░ рд▓реМрдЯрдирд╛, рдЬрд╣рд╛рдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрдВрдЬреЗрдХреНрд╢рди рдПрдиреЛрдЯреЗрд╢рди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рд╕рд░реНрд╡рд▓реЗрдЯ рдЗрд╕ рддрд░рд╣ рд╡рд░реНрдгрд┐рдд рд╣реИ
@Component
public class TestServlet extends HttpServlet {
@Autowired
private ISerializer serializer;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// ...
// Object result;
res.setContentType("text/plain");
PrintWriter out = res.getWriter();
out.println(serializer.serialize(obj));
}
}
рдореИрдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЖрдХрд╕реНрдорд┐рдХ рдФрд░ рдХреНрд░рдордмрджреНрдзрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд╖реНрдЯрддрдо рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди
рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЛ рдПрдХ рд╕рд░реНрд╡рд▓реЗрдЯ рд╕реЗ рдмрд╛рдВрдзрдирд╛ рдкреНрд░рд╢рдВрд╕рдиреАрдп рд╣реИред
рд╕рдм рдХреБрдЫ рдЕрдкрд╛рдЪреЗ рдлреЗрд▓рд┐рдХреНрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рд╢реБрд░реВ рд╣реБрдЖ рдЬрд┐рд╕рдореЗрдВ рдЬреЗрдорд┐рдиреА-рдмреНрд▓реВрдкреНрд░рд┐рдВрдЯ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рдереЗред
[INFO] Started jetty 6.1.x at port(s) HTTP:8080
____________________________
Welcome to Apache Felix Gogo
g! lb
START LEVEL 1
ID|State |Level|Name
0|Active | 0|System Bundle (4.0.1)
1|Active | 1|AOP Alliance API (1.0.0)
2|Active | 1|Apache Log4J (1.2.16)
3|Active | 1|SLF4J API (1.6.1)
4|Resolved | 1|SLF4J Log4J Binding (1.6.1)
5|Active | 1|SLF4J Jakarta Commons Logging Over SLF4J Binding (1.6.1)
6|Active | 1|gemini-blueprint-core (1.0.0.RELEASE)
7|Active | 1|gemini-blueprint-extender (1.0.0.RELEASE)
8|Active | 1|gemini-blueprint-io (1.0.0.RELEASE)
9|Active | 1|Apache Felix Bundle Repository (1.6.6)
10|Active | 1|Apache Felix Gogo Command (0.12.0)
11|Active | 1|Apache Felix Gogo Runtime (0.10.0)
12|Active | 1|Apache Felix Gogo Shell (0.10.0)
13|Active | 1|Apache Felix Http Jetty (2.2.0)
14|Active | 1|Apache Felix Http Whiteboard (2.2.0)
15|Active | 1|Spring AOP (3.1.0.RC1)
16|Active | 1|Spring ASM (3.1.0.RC1)
17|Active | 1|Spring Aspects (3.1.0.RC1)
18|Active | 1|Spring Beans (3.1.0.RC1)
19|Active | 1|Spring Context (3.1.0.RC1)
20|Active | 1|Spring Context Support (3.1.0.RC1)
21|Active | 1|Spring Core (3.1.0.RC1)
22|Active | 1|Spring Expression Language (3.1.0.RC1)
рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░ред рдЬреЗрдЯрд┐рдХреНрд╕ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдлреЗрд▓рд┐рдХреНрд╕ 4.0.1 рдХреЗ рд╕рд╛рде рднреЗрдЬ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг 6.1 рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдЬрд╛рд╡рд╛-рдИ -6 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реЗрдмрдХреЗрд╡рд▓реЗрдЯ рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЬреЗрдЯреНрдЯреА 8 рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдордХреНрдЦреА рдкрд░ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред
рдЗрд╕рд▓рд┐рдП, рдореЗрд░реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд▓рд┐рдП, рдкреИрдХреЗрдЬ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЬреЗрдЯреНрдЯреА рд╕реЗ 404 рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдФрд░ рдореИрдкрд┐рдВрдЧ рдХреА рдХрдореА рдкрд░ рд╕рдм рдХреБрдЫ рдбрдВрдк рдХрд░ рджрд┐рдпрд╛ред
Googling рдиреЗ рдорджрдж рдХреА рдФрд░ рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрдЯрд┐рд╡реЗрдЯрд░ рдХреНрд▓рд╛рд╕ рдХреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛:
public class Activator implements BundleActivator {
private ServiceRegistration reg;
@Override
public void start(BundleContext context) throws Exception {
Dictionary<String, String> props = new Hashtable<>();
props.put("alias", "/");
this.reg = context.registerService(Servlet.class.getName(), new TestServlet(), props);
}
@Override
public void stop(BundleContext context) throws Exception {
this.reg.unregister();
}
}
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд╕рд░реНрд╡рд▓реЗрдЯ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реЗрд▓рд┐рдпрд╛рд▓рд┐рдЬрд╝рд░ рдЪрд░ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рдЕрд╢рдХреНрдд рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд▓реЗрдЯ рдкрд░ @Component рдПрдиреЛрдЯреЗрд╢рди рдиреЗ рднреА рдЕрдкрдирд╛ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рд╛ред рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рджреЛ рд╕рд░реНрд╡рд▓реЗрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдереЗред рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рджреВрд╕рд░рд╛ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдПрдХреНрдЯрд┐рд╡рд┐рдЯрд░ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ @Autowired рдПрдиреЛрдЯреЗрд╢рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред рдЙрд╕ рд╕реЗрд╡рд╛ рдХреА рдЦреЛрдЬ рдЬреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕реЗ ISerializer рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рдЕрд╕рдлрд▓ рд░рд╣реА, рдХреНрдпреЛрдВрдХрд┐ рдПрдХреНрдЯреАрд╡реЗрдЯрд░ рдХреЙрд▓ рдЙрд╕ рд╕реЗрд╡рд╛ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЬрд╝рд░реВрд░рдд рдереА, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдереАред
рдЕрдЧрд▓реЗ Google рд╕реЗ рдЖрдЧреЗ, рдЬрд┐рд╕рдиреЗ рдЕрдВрддрддрдГ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред
рдпрджрд┐ рд╡рд░реНрдЧ рдХреЛ @ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ @PostConstruct рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рд╡рд┐рдзрд┐ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВ, рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВ)ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рддреЛ, рд╣рдо рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдЬреЗрдЯреА рдореЗрдВ рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдЧреАред
@PostConstruct
public void postConstruct() {
BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
Dictionary props = new Properties();
props.put("alias", "/");
context.registerService(Servlet.class.getName(), this, props);
}
рд╕рд░реНрд╡рд▓реЗрдЯ-OSGi рдмрдВрдбрд▓ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ,
рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрдм рдореЙрдбреНрдпреВрд▓ рдЙрддрд╛рд░рдирд╛ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛:
//
ServiceRegistration reg = context.registerService(Servlet.class.getName(), this, props);
//
reg.unregister();
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, deregistration рдХреЙрд▓ (рдореИрдВрдиреЗ рдирд╖реНрдЯ () рд╡рд┐рдзрд┐ рд╕реЗ рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛)
рдПрдХ рддреНрд░реБрдЯрд┐ рдЬрд┐рд╕рдиреЗ рдХрд╣рд╛ рдХрд┐ рд╕реЗрд╡рд╛ рдЕрдм рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЕрд░реНрдерд╛рдд рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдВрдЬреАрдХреГрддред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░
@Component рдПрдиреЛрдЯреЗрд╢рди рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИред рдЗрд╕ рдкрд░ рдореИрдВ рд╢рд╛рдВрдд рд╣реЛ рдЧрдпрд╛ред
рдПрдХ рд╕рдХреНрд░рд┐рдп рд╡рд░реНрдЧ рдЕрдм рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╕рд░реНрд╡рд▓реЗрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдФрд░ рдпрд╣ рд╕рдм рдердХрд╛рдК рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди XML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд┐рдирд╛ред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдиреЗрдЯ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд▓рдВрдмреА рдЦреЛрдЬ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред
рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрд░реЛрдд
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рд▓реЗрдЦ