JBoss EAP 7.4中FTP配置方法及资源适配器需求咨询
嗨,针对你从WebLogic迁移到JBoss后配置FTP的问题,我给你梳理下具体的思路和方案哈!
关于资源适配器的必要性
首先明确说:如果想遵循Java EE标准的连接管理、池化和事务集成规范,确实需要配置FTP资源适配器。JBoss EAP本身并没有自带FTP的资源适配器,所以得引入第三方适配组件,比如基于Apache Commons Net封装的JCA适配器,或者IronJacamar提供的FTP专用适配器。
当然也有替代方案:如果你的应用代码原本就是用org.apache.commons.net.ftp.FTPClient这类API手动管理FTP连接,那也可以不用资源适配器,但这种方式没法利用JBoss的连接池管理能力,事务集成也不方便,生产环境不太推荐这么做。
配置FTP资源适配器的步骤(以IronJacamar适配器为例)
第一步:部署资源适配器包
把对应的ironjacamar-ftp.rar文件放到JBoss的standalone/deployments目录下,服务器会自动识别并部署这个资源适配器。第二步:修改JBoss配置文件(如
standalone.xml)
在配置文件里添加资源适配器和连接池的配置段,示例代码如下:<subsystem xmlns="urn:jboss:domain:resource-adapters:6.0"> <resource-adapters> <resource-adapter id="ftp-ra"> <archive>ironjacamar-ftp.rar</archive> <transaction-support>NoTransaction</transaction-support> <!-- 配置FTP服务器的基础信息 --> <config-property name="Host">你的FTP服务器地址</config-property> <config-property name="Port">21</config-property> <config-property name="Username">FTP用户名</config-property> <config-property name="Password">FTP密码</config-property> <!-- 配置连接池参数 --> <connection-definitions> <connection-definition class-name="org.jboss.jca.adapters.ftp.FTPConnectionFactory" jndi-name="java:/FtpConnectionFactory" pool-name="FtpConnectionPool"> <pool> <min-pool-size>5</min-pool-size> <max-pool-size>20</max-pool-size> </pool> </connection-definition> </connection-definitions> </resource-adapter> </resource-adapters> </subsystem>配置完成后重启JBoss,确保JNDI绑定
java:/FtpConnectionFactory生效。第三步:应用代码中调用FTP连接
通过JNDI获取连接工厂,进而获取FTP连接来执行文件收发操作,示例代码:Context ctx = new InitialContext(); FTPConnectionFactory factory = (FTPConnectionFactory) ctx.lookup("java:/FtpConnectionFactory"); FTPClient client = factory.getConnection(); // 执行FTP操作:比如上传、下载文件 client.logout(); // 记得归还连接到池里 factory.returnConnection(client);
不用资源适配器的简易方案
如果暂时不想引入资源适配器,也可以直接在应用中添加Apache Commons Net的依赖,手动编写FTP操作逻辑。但要注意自己处理连接的创建、关闭和异常,生产环境建议搭配Apache Commons Pool来实现连接池管理,避免频繁创建销毁连接带来的性能损耗。
备注:内容来源于stack exchange,提问作者Vamshi Krishna

