- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个在 bluemix 云服务器上运行的 java 应用程序,我最初是在 tomcat 服务器上本地开发的,然后决定迁移到云端。随处建议的选项是使用 liberty 和 sqldb 服务,经过一番努力后,我在我的 bluemix 帐户上进行了设置,并将名为 SQL-RCT 的 sql 数据库绑定(bind)为我的 java 应用程序的服务。
运行以下代码时遇到的问题:
@WebServlet({ "/LoginServlet", "/" })
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private Connection conn;
@Resource(lookup="jdbc/SQL-RCT")
private DataSource myDataSource;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
try {
if(myDataSource == null){
throw new Exception("no data source");
}
conn = myDataSource.getConnection();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
当我尝试加载 servlet 时,我收到一个错误,指出我的 init 函数中存在空指针异常,我很快就能够将其范围缩小到我的 myDataSource 对象为空。
我已经检查了 server.xml 并使用了正确的名称进行查找,但查找似乎不起作用,我们将不胜感激。
server.xml
<server>
<featureManager>
<feature>beanValidation-1.1</feature>
<feature>cdi-1.2</feature>
<feature>ejbLite-3.2</feature>
<feature>el-3.0</feature>
<feature>jaxrs-2.0</feature>
<feature>jdbc-4.1</feature>
<feature>jndi-1.0</feature>
<feature>jpa-2.1</feature>
<feature>jsf-2.2</feature>
<feature>jsonp-1.0</feature>
<feature>jsp-2.3</feature>
<feature>managedBeans-1.0</feature>
<feature>servlet-3.1</feature>
<feature>websocket-1.1</feature>
<feature>icap:managementConnector-1.0</feature>
<feature>appstate-1.0</feature>
<feature>cloudAutowiring-1.0</feature>
</featureManager>
<application name='myapp' location='myapp.war' type='war' context-root='/'/>
<cdi12 enableImplicitBeanArchives='false'/>
<httpEndpoint id='defaultHttpEndpoint' host='*' httpPort='${port}'/>
<webContainer trustHostHeaderPort='true' extractHostHeaderPort='true'/>
<include location='runtime-vars.xml'/>
<logging logDirectory='${application.log.dir}' consoleLogLevel='INFO'/>
<httpDispatcher enableWelcomePage='false'/>
<applicationMonitor dropinsEnabled='false' updateTrigger='mbean'/>
<config updateTrigger='mbean'/>
<appstate appName='myapp' markerPath='${home}/../.liberty.state'/>
<dataSource id='db2-SQL-RCT' jdbcDriverRef='db2-driver' jndiName='jdbc/SQL-RCT' statementCacheSize='30' transactional='true'>
<properties.db2.jcc id='db2-SQL-RCT-props' databaseName='${cloud.services.SQL-RCT.connection.db}' user='${cloud.services.SQL-RCT.connection.username}' password='${cloud.services.SQL-RCT.connection.password}' portNumber='${cloud.services.SQL-RCT.connection.port}' serverName='${cloud.services.SQL-RCT.connection.host}'/>
</dataSource>
<jdbcDriver id='db2-driver' libraryRef='db2-library'/>
<library id='db2-library'>
<fileset id='db2-fileset' dir='${server.config.dir}/lib' includes='db2jcc4.jar db2jcc_license_cu.jar'/>
</library>
</server>
最佳答案
注入(inject)的资源在 servlet 构造函数中不可用,因为在 servlet 实例完全初始化之前资源不会被注入(inject)。
相反,覆盖 javax.servlet.GenericServlet init() 方法并在那里获取您的连接。此生命周期方法将为您提供与您当前尝试在servlet 构造函数。
示例代码:
@WebServlet({ "/LoginServlet", "/" })
public class LoginServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
private Connection conn;
@Resource(lookup="jdbc/SQL-RCT")
private DataSource myDataSource;
@Override
public void init() throws ServletException {
super.init();
try {
conn = myDataSource.getConnection();
} catch (Exception e) {
throw new ServletException(e);
}
}
}
作为旁注:
由于 Liberty 池连接,因此没有必要在类范围内存储连接。如果您在需要时获得连接并在使用完后关闭它们,您应该看不到任何性能差异。如果您想在 servlet 初始化代码中获取连接作为一种急切获取连接的方式,那很好,但它会影响您的 servlet 加载时间。
关于java - 无法在 bluemix 上使用 java 注释初始化数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33754849/
我是 IBM Bluemix 的新手,到目前为止,应用程序(Spring-Hibernate-Rest App)运行在 Oracle 生态系统的 Tomcat Apache 服务器上,但由于一些需求变
我正在尝试使用Kubenetes插件安装最新的Bluemix容器服务。但是,我得到以下消息。跟着DOC - container service ocmbpro:~ ochen$ bx plugin i
我有一个连接 Bluemix Message Hub 的 liberty 应用程序。它在本地运行良好,但是当我从 Bluemix Liberty 运行 liberty 应用程序时,它永远不会运行。我正
我正在尝试连接 Bluemix Liberty 容器并使用 Bluemix session 缓存服务。 到目前为止我做了什么: 创建桥接应用程序并添加 session 缓存服务 创建 Liberty
我有一个部署到 IBM Bluemix (IBM Cloud) 的 Node JS Cloud Foundry 应用程序,我正在为它使用我自己的个人域。使用 letsencrypt 创建证书,我为 B
这是一个我要自己回答的问题,因为我已经看过无数次了,它确实应该算作一个FAQ。 假设您已经创建了一个 Flask 或 Django 应用程序,并且它在您的测试环境中工作 - 在 bluemix 之外和
我已经在 IBM Bluemix 上创建了一个 ClearDB MySQL 实例。我可以在不将实例绑定(bind)到 Bluemix 上运行的应用程序的情况下查看凭据(主机名、用户名、密码等)吗? 谢
我正在尝试使用 Bluemix 作为服务器开发一个 Android 应用程序。请向我展示示例代码以及从 android 客户端注册以将数据存储在 cloudant 数据库中的简单用例。我对安卓客户端很
我正在 Bluemix 中部署 node.js,基本上是从 parse.com 迁移到 Bluemix。 下面的错误是什么意思?我该如何解决?我正在使用 CF 命令行工具。下面附上日志。///////
我有一个 bluemix 应用程序,当前通过 PHP 使用 ClearDB MySQL 3rd party bluemix 服务进行设置。该服务运行良好,但我注意到免费版本的空间限制为 5mb(您可以
我们尝试通过运行来测试 IBM Bluemix Cloud 和 Watson Cloud 我们帐户中的几个 Watson Cloud 演示 node.js 应用程序,我们 注意到以下情况: 在我们的帐
我有一个在 IBM Bluemix 上运行的简单 JSF 应用程序,与以下 J2EE 依赖项配合良好。 javax javaee-web-api 6.
我正在使用公共(public) Bluemix。我在 Bluemix 中使用我的 IBM ID 供应了一个 dashDB 服务实例。我还提供了对象存储服务。我想将文件从对象存储加载到 dashDB。
每个组织是否允许多个空间? 空间是用来分隔项目的吗? 在 Bluemix 上使用组织和空间的最佳实践是什么? 通过 eclipse : 通过浏览器: 最佳答案 居然还有Bluemix document
我在登录 IBM Bluemix 时遇到注册失败即使我创建了一个 IBM 有效帐户。我已经提供了我的电话号码和有效的电子邮件地址。我通过 Bluemix 中的有效 IBM ID 登录。 最佳答案 st
当我尝试将公共(public) IP 地址分配给我的容器时(这是一个 Nginx 代理容器,因此我公开了端口 80 和 443),我在让公共(public) IP 地址实际工作方面遇到了相当大的问题。
有谁知道为什么 NodeJS 实例会在 Next tick 或 Mongoose pre 错误时崩溃?当我们努力识别所有错误时,有哪些想法可以创建更稳定的应用程序? IBM 是否计划提高弹性? 我想我
我正在尝试创建一个移动应用程序并使用一些 Bluemix 服务。 我在我的 bluemix 帐户中看到“移动”部分,其中包括: 移动应用内容管理器 移动客户端访问 移动基础 移动质量保证 推送通知 动
我有一个纯 Java 应用程序,目前使用基于 .jks 的 key 和信任库。据我了解,Bluemix 下的 SSL 协议(protocol)处理是在网络端使用单个端口和用于主机和域标识的通配符证书完
我正在使用 IBM Bluemix 开发一个 CF 应用程序。提供服务并将其绑定(bind)到应用后,是否需要它提供的凭据引用可公开访问的 URL 或 IP 地址? 我问是因为我一直在试验 Cloud
我是一名优秀的程序员,十分优秀!