我很困惑为什么这不起作用。环境是带有Tomcat 7的Liferay 6.1实例,数据库不是Liferay的默认数据库。它是用于数据的辅助服务器。所以我不确定这与Liferay是否有关。
web.xml (位于Tomcat的webapps / conf中)
<GlobalNamingResources>
<Resource name="jdbc/xxx" auth="Container" type="javax.sql.DataSource" username="a" password="y" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/xxx"
maxActive="200" maxIdle="25" />
</GlobalNamingResources>
server.xml (位于Tomcat的webapps / conf中)
<context>
<ResourceLink global="jdbc/xxx" name="jdbc/xxx" type="javax.sql.DataSource" />
</context>
context.xml (位于Tomcat的webapps / conf中)
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/xxx");
Connection conn = ds.getConnection();
代码:
2016-12-21 19:13:04 FATAL asdasdsd:128 - Exception thrown in (removed):
javax.naming.NameNotFoundException: Name [java:comp/env/jdbc/xxx] is not bound in this Context. Unable to find [java:comp].
at org.apache.naming.NamingContext.lookup(NamingContext.java:820)
at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
错误:
protocol P {
func f()
}
extension P {
func f() { print("default implementation") }
}
enum E: P {
case Foo
}
let e = E.Foo
e.f()
我错过了什么?
修改:
还确认了以下内容:
第二次修改:
我使用相同的配置和DAO层创建了一个全新的动态Web应用程序项目,它100%运行。我觉得它现在和Liferay有关。不幸的是..
第三次修改:
尝试了所有内容,包括这篇文章:http://www.journaldev.com/2513/tomcat-datasource-jndi-example-java
这也没有用。同样的例外。在Liferay网站上缺乏关于这个问题的信息对我来说是惊人的。文档似乎非常缺乏。
答案 0 :(得分:0)
另一个解决方案是(它适用于我),从web.xml中删除resource-ref,从服务器中删除资源。 xml并从context.xml中删除ResourceLink。
将资源单独添加到context.xml,
if let img = ImageSelectorImg.image , imageSelected == true{
let urlStr = "https://post.imageshack.us/upload_api.php"
let url = URL(string: urlStr)!
let imgData = UIImageJPEGRepresentation(img, 0.2)!
let keyData = "AEHKL...66b".data(using: String.Encoding.utf8)!
let keyJSON = "json".data(using: String.Encoding.utf8)!
Alamofire.upload(.POST,url,multipartFormData: { multipartFormData in
multipartFormData.appendBodyPart(data: imgData, name: "fileupload", fileName:"image", mimeType: "image/jpg")
multipartFormData.appendBodyPart(data: keyData, name: "key")
multipartFormData.appendBodyPart(data: keyJSON, name: "format")
},
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
if let info = response.result.value as? Dictionary<String,AnyObject> {
if let links = info["links"] as? Dictionary<String,AnyObject> {
if let imgLink = links["image_link"] as? String {
self.postToFirebase(imgLink)
}
}
}
}
case.failure(let _): break
}
})
}
代码(在这种情况下,java:comp / env /是必需的):
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="20" maxIdle="10" maxWait="-1" name="jdbc/xxx" password="" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/xxx" username=""/>
答案 1 :(得分:0)
对于将来有所帮助的任何人,因为男孩这是一种痛苦而且记录不充分。
我必须将它添加到Liferay应用程序的portlet-ext.properties中:
portal.security.manager.strategy=none
找到此链接后:Liferay/Tomcat "hot-deploy" closes JNDI connection, how can I keep it open?
它最终解决了我的问题。