1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.jboss.as.quickstarts.ejb.multi.server.app;
18
19 import java.security.Principal;
20 import java.util.Hashtable;
21
22 import javax.annotation.PostConstruct;
23 import javax.annotation.Resource;
24 import javax.ejb.EJB;
25 import javax.ejb.SessionContext;
26 import javax.ejb.Stateless;
27 import javax.naming.Context;
28 import javax.naming.InitialContext;
29 import javax.naming.NamingException;
30
31 import org.jboss.logging.Logger;
32
33
34
35
36
37
38
39
40 @Stateless
41 public class MainAppBean implements MainApp {
42 private static final Logger LOGGER = Logger.getLogger(MainAppBean.class);
43 @Resource
44 SessionContext context;
45
46
47
48
49 private InitialContext iCtx;
50
51 @EJB(lookup = "ejb:jboss-ejb-multi-server-app-one/ejb//AppOneBean!org.jboss.as.quickstarts.ejb.multi.server.app.AppOne")
52 AppOne appOneProxy;
53 @EJB(lookup = "ejb:jboss-ejb-multi-server-app-two/ejb//AppTwoBean!org.jboss.as.quickstarts.ejb.multi.server.app.AppTwo")
54 AppTwo appTwoProxy;
55
56
57
58
59 @PostConstruct
60 public void init() {
61 try {
62 final Hashtable<String, String> p = new Hashtable<String, String>();
63 p.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
64 this.iCtx = new InitialContext(p);
65 }catch (NamingException e) {
66 throw new RuntimeException("Could not initialize context", e);
67 }
68 }
69
70 @Override
71 public String getJBossNodeName() {
72 return System.getProperty("jboss.node.name");
73 }
74
75 @Override
76 public String invokeAll(String text) {
77 Principal caller = context.getCallerPrincipal();
78 LOGGER.info("[" + caller.getName() + "] " + text);
79 final StringBuilder result = new StringBuilder("MainApp[" + caller.getName() + "]@" + System.getProperty("jboss.node.name"));
80
81
82 try {
83 result.append(" > [ " + invokeAppOne(text));
84 }catch (Exception e) {
85 LOGGER.error("Could not invoke AppOne", e);
86 }
87
88 String lookup = "";
89
90 try {
91 lookup = "ejb:jboss-ejb-multi-server-app-two/ejb//AppTwoBean!" + AppTwo.class.getName();
92 result.append(" > " + invokeAppTwo(lookup, text));
93 LOGGER.info("Invoke '" + lookup + " OK");
94 }catch (Exception e) {
95 LOGGER.error("Could not invoke apptwo '" + lookup + "'", e);
96 }
97
98
99
100 try {
101 lookup = "java:comp/env/AppTwoAlias";
102 result.append(" ; " + invokeAppTwo(lookup, text));
103 LOGGER.info("Invoke '" + lookup + " OK");
104 }catch (Exception e) {
105 LOGGER.error("Could not invoke apptwo '" + lookup + "'", e);
106 }
107
108 result.append(" ]");
109
110 return result.toString();
111 }
112
113
114
115
116
117
118
119
120
121 private String invokeAppOne(String text) {
122 try {
123
124 final String appOneResult = this.appOneProxy.invoke(text);
125
126 LOGGER.info("AppOne return : " + appOneResult);
127 return appOneResult;
128 }catch (Exception e) {
129 throw new RuntimeException("Could not invoke appOne", e);
130 }
131 }
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149 private String invokeAppTwo(String lookup, String text) throws NamingException {
150 final AppTwo bean = (AppTwo) iCtx.lookup(lookup);
151
152
153 final String appTwoResult = bean.invoke(text);
154
155 LOGGER.info("AppTwo return : " + appTwoResult);
156 return appTwoResult;
157 }
158 }