gpt4 book ai didi

oracle - Liferay portlet 非liferay JNDI 数据源null

转载 作者:行者123 更新时间:2023-12-04 20:38:36 25 4
gpt4 key购买 nike

对于访问非 liferay Oracle 数据库的 Liferay 6.2 自定义 portlet,我们遇到了返回数据源为空的问题。

我们已经配置了tomcat/conf/context.xml

<!-- Adding custom New non liferay datasource -->
<Resource name="jdbc/NewPool"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbservernameorip)(PORT = 9999))
(CONNECT_DATA = (SERVER = DEDICATED)
(SERVICE_NAME = dbSIDorservicename)))"
username="user"
password="pwd"
maxActive="35"
maxIdle="10"
maxWait="20000"
removeAbandoned="true"
logAbandoned="true"
minEvictableIdleTimeMillis="3600000"
timeBetweenEvictionRunsMillis="1800000"
testOnBorrow="true"
testOnReturn="false"
/>

portlet web.xml 包含:
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/NewPool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

查找的代码是:
String JNDI = "jdbc/NewPool"
_log.debug("JNDI Name is: " + JNDI);
_log.debug("dataSource in dbConnect is :" + dataSource);
Context context = new InitialContext();
Context envContext = (Context)context.lookup("java:/comp/env");
_log.debug("envContext in dbConnect is :" + envContext);
try {
DataSource ds = (DataSource)envContext.lookup(JNDI);

Liferay 可以成功地将 context.xml 资源与 Liferay Oracle 数据库的类似数据源一起使用。

Liferay portlet 是否需要其他一些连接来建立到另一个数据库的连接?

相同的 portlet 代码可以在 weblogic 上运行,而无需更改 web.xml。类似的 JNDI 数据源查找代码和配置适用于 vanilla tomcat(没有 liferay)和一个普通的 war(非 liferay portlet)文件。

更新:

我已经使用 netstat -an|grep dbport 检查了服务器上的数据库连接。这不显示已建立的连接。

我还尝试在portal-ext.properties 中设置portal.security.manager.strategy=none。这也不起作用。

任何见解都非常感谢,因为我们有点卡在这里。

谢谢!

最佳答案

我们在使用资源和池时也遇到了一些问题。由于我们处理的请求很少,而且我们的场景不关心性能,因此我们直接使用 JDBC 连接而不使用池,并且它工作正常(我们正在连接到 MS Sql 服务器)

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String url = "jdbc:jtds:sqlserver://host/dbname";
String driver = "net.sourceforge.jtds.jdbc.Driver";
String db_userName = PropsUtil.get("jdbc.default.username");
String db_password = PropsUtil.get("jdbc.default.password");

try {
Class.forName(driver);
conn = DriverManager.getConnection(url, db_userName, db_password);

String sql = "SELECT * FROM Users";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()){
// DO WHAT YOU WANT
return true;
}
rs.close();
}catch(SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}catch(Exception e){
//Handle errors for Class.forName
e.printStackTrace();
}finally{
//finally block used to close resources
try{
if(stmt!=null)
conn.close();
}catch(SQLException se){
}// do nothing
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}//end finally try
}//end try

它工作正常。用户名和密码在portal-ext.properties中配置(我们使用的是liferay自己的db所用的同一个账号)

希望这可以帮助

关于oracle - Liferay portlet 非liferay JNDI 数据源null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30672644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com