我为我的客户端(Android应用程序)编写了一个RESTful web api。
我需要实现另一个应用程序,一个本地桌面应用程序,它访问已经为服务器端实现的Databases
类。
我不知道怎么做。
具体来说,这个类用于服务器端:
public Database(String TableName, String KeyName) throws SQLException, NamingException {
mTableName = TableName;
mKeyName = KeyName;
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/nasdaq_companies");
}
现在有一个异常抛出(NoInitialContextException)非常有意义,因为我缺少context.xml或者特别是缺少这个资源
<Resource name="jdbc/nasdaq_companies" auth="Container"
type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/nasdaq_companies"
username="*****" password="*****" maxActive="20" maxIdle="10" maxWait="-1"/>
假设服务器== localhost,如何将上下文资源添加到本地Java应用程序? (或者,我如何解决这个问题?)
答案 0 :(得分:1)
如果您正在谈论运行控制台应用程序之类的东西,我通过调用Main中的方法手动设置上下文来解决它:
public static void main( String[] args ) {
setupInitialContext();
Context initContext = new InitialContext();
DataSource dataSource = (DataSource) initContext.lookup("jdbc/SomeDB");
}
编辑:
您可以先在Main中调用此方法,然后再获取这些数据源
private void sendRequestWithHttpClient(){
new Thread(new Runnable() {
@Override
public void run() {
try {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("");
HttpResponse httpResponse = httpClient.execute(httpGet);
if(httpResponse.getStatusLine().getStatusCode()==200){
HttpEntity entity = httpResponse.getEntity();
String response = EntityUtils.toString(entity,"utf-8");
parseJSON(response);
}
}catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
private void parseJSON(String jsonData) {
try {
JSONArray jsonArray = new JSONArray(jsonData);
String[] a = new String[jsonArray.length()];
String[] b = new String[jsonArray.length()];
for (int i=0 ; i < jsonArray.length() ; i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
String title = jsonObject.getString("title");
String main = jsonObject.getString("main");
a[i] = title;
b[i] = main;
}
}catch (Exception e) {
e.printStackTrace();
}
}
PS:我认为我在StackOverflow上也发现了这种方式,但老实说不记得哪里:(