Eclipse WTP中不同类型的Java EE项目之间有什么不同?
有:
我以前写了一个JCA资源适配器.
然而,现在我发现自己处于一个不得不单独写一个来访问BootstrapContext它及其相关的位置WorkManager,并且没有其他原因.
如果我正确地阅读了规范 - 这就是我的问题 - 看起来如果我希望有人能够以符合规范的方式使用我的资源适配器,我仍然需要实现ManagedConnectionFactory,因为它看起来只是按ManagedConnectionFactory实现方式提供的用户连接工厂可通过@Resource注释进行注入.
来吧,再看一遍; 我会等.:-)
在一个完美的世界中,我想编写我的ResourceAdapter实现,注释它@Connector,指定所有@ConfigProperty位,将其打包在一个.rar文件中,并完成它.
但是,在我看来,规范有效地强制要求消费者(在我的情况下是无状态EJB)和资源适配器模块之间的所有通信都应该通过用户连接工厂来完成.
例如,第6.10.1节说:
资源适配器必须提供以下接口的实现:
- javax.resource.spi.ManagedConnectionFactory
- javax.resource.spi.ManagedConnection
- javax.resource.spi.ManagedConnectionMetaData
但是第18节 - 关于注释的部分 - 似乎没有规定以任何有意义的方式强制执行.
确实如此吗?我想它一定是,但我很想听听那些组装了1.6资源适配器的人.
我们的应用程序通常通过Web服务,MQ,JDBC,专有(直接通过套接字)和其他传输孩子连接到不同的后端之王.我们已经有许多实现允许我们从应用程序连接到这些后端,虽然所有这些实现都实现了公共java接口,但它们不共享任何其他内容.
我们已经意识到所有这些特定连接器实现都有共同的代码部分代码,我们决定通过一个通用连接器简化未来连接器的开发.此连接器将能够将消息格式化为后端预期的格式,并使用可用的传输机制发送它们.例如:MQ或超过套接字的固定长度消息格式.
我们面临的困境之一是这种连接器最合适的技术.到目前为止,我们的连接器是实现常见Java接口的基本java类.由于我们通常在某些Java EE应用程序服务器中托管我们的应用程序,因此Java Connector Architecture似乎是最适合此软件的技术.但是,实现符合JCA标准的连接器似乎相对复杂.采用标准有什么明显的好处 - JCA并且有益于额外的努力吗?
我需要开发一个JCA适配器,我正在寻找一些参考.我在亚马逊上搜索过,发现只有2本JCA书籍,其中一本书的评论非常糟糕.所以我想这只留下了一本书.
所以我想知道是否有任何JCA适配器的示例实现将有助于我的开发.我在谷歌搜索但只设法找到一些非常简单的例子.提前致谢.
我希望使用JCA在TLS中支持以下密码套件:
它们在JDK7中可用,但不在JDK6中,而不是BouncyCastle.
如果我想在JDK6中获得支持,我是否可以使用SPI,JSSE的提供程序和回调方法扩展JCA以实现对这些PSK扩展的支持.我已经可以在运行时重新定义或添加新的密码实现,但我不确定JCA是否提供足够的粒度来在TLS中添加新的密码套件.
我读到JCA用于遗留EIS集成.这个规范适用于供应商而不是应用程序开发人员吗?我很想知道开发人员编写JCA适配器以解决技术或业务问题的用例.
我有一个RSA私钥文件(OCkey.pem).使用java我必须从这个文件中获取私钥.使用下面的openssl命令生成此密钥.注意:我无法在下面的openssl命令中进行任何更改.
openssl> req -newkey rsa:1024 -sha1 -keyout OCkey.pem -out OCreq.pem -subj "/C=country/L=city/O=OC/OU=myLab/CN=OCserverName/" -config req.conf
Run Code Online (Sandbox Code Playgroud)
证书如下所示.
////////////////////////////////////////////////// /////////
bash-3.00 $ less OCkey.pem
----- BEGIN RSA PRIVATE KEY -----
Proc-Type:4,ENCRYPTED
DEK-Info:DES-EDE3-CBC,EA1DBF8D142621BFBYyZuqyqq9 + L0UT8UxwkDHX7P7YxpKugTXE8NCLQWhdS3EksMsv4xNQsZSVrJxE3
Ft9veWuk + PlFVQG2utZlWxTYsUVIJg4KF7EgCbyPbN1cyjsi9FMfmlPXQyCJ72rd
...
...
cBlG80PT4t27h01gcCFRCBGHxiidh5LAATkApZMSfe6BBv4hYjkCmg ==
----- END RSA私钥-----
///////////////////// /////////////////////////////////////////
以下就是我的尝试
byte[] privKeyBytes = new byte[(int)new File("C:/OCkey.pem").length()];
PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(privKeyBytes));
Run Code Online (Sandbox Code Playgroud)
但得到
"java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:无效的密钥格式"
请帮忙.
我有一个56位二进制字符串,我想用它作为DES加密的密钥.
我在JCA docs网站上找到了以下代码
byte[] desKeyData = { (byte)0x01, (byte)0x02, (byte)0x03,
(byte)0x04, (byte)0x05, (byte)0x06, (byte)0x07, (byte)0x08 };
DESKeySpec desKeySpec = new DESKeySpec(desKeyData);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Run Code Online (Sandbox Code Playgroud)
但是,它使用8个字节作为密钥(而不是7个).不清楚desKeyData [0]是对应于最低有效字节还是最高有效字节.另外,是否可以直接使用56位字符串来生成可用于此目的的字节数组?
我认为JCA替代JCE很简单.但是,编写一些测试代码以获取我系统上的所有提供程序后显示情况并非如此.
我注意到以下几点:
MD5withRSA是SunRsaSign和SunJSSE)type超出JCE中的算法第1项是有道理的,因为JCA(对我来说)作为JCE提供者的库/数组来挑选.
第2项有点令人困惑,因为它表明JCA不是一组"相同的"JCE提供者; 对于任何和所有"类型"的提供者来说,它都是某种水坑,JCE接口与否.
那么,JCA,它的供应商和JCE之间的工作关系是什么?提供者是否也存在于独立的孤岛中,或者它们是否相互"构建"/它们之间是否存在依赖关系?
对于那些对代码感兴趣的人和提出这个问题的结果,下面列出了它
import java.security.Provider;
import java.security.Security;
import java.util.ArrayList;
public class ConsoleListJca
{
public static void main(String[] args)
{
for (Provider provider : Security.getProviders())
{
System.out.println("Provider: " + provider.getName() + " (ver " + provider.getVersion() + ")");
System.out.print(" Algorithms: ");
ArrayList<String> algos = new ArrayList<String>();
for (Provider.Service service : provider.getServices())
{
algos.add(String.format( "%s (%s)", service.getAlgorithm(), service.getType()));
}
java.util.Collections.sort(algos);
String algorsStr = algos.toString();
// remove [ …Run Code Online (Sandbox Code Playgroud) 我正在创建一个Java EE应用程序,允许用户从Web界面添加/删除"socketinfo"表(存储在数据库中).如果用户从Web界面启用"socketinfo",则应用程序服务器必须为传入的数据包创建套接字侦听器并处理数据.如果用户禁用或删除"socketinfo",则必须删除套接字侦听器.整个产品必须包含在一只耳朵中,并且最好是顺从的.我考虑过但遇到问题的一些方法是:
为套接字创建JCA资源适配器并使用MDB作为侦听器.我遇到的问题是,当用户添加MDB时,我无法弄清楚如何以编程方式为不同的套接字部署MDB.
创建一个@ Singleton/@ Service ejb,通过仔细同步来管理守护程序线程.单例ejb可以注入业务层,以便在正确的工作流程中进行CRUD操作和套接字操作.这里的问题是,据说从EJB创建线程被认为是一种不好的做法,并且不符合规范(即使正确处理了单例生命周期并且有适当的同步机制?).
将线程放在域模型中(另一个单例?)并让EJB使用该模型.这是所有这些中最糟糕的,因为应用程序服务器往往有多个类加载器,一般来说容器支持较少,而且这样做会受到影响.
知道如何在Java EE中正确处理这种情况吗?
编辑:这个问题的扩展:假设我决定像ewernli在他的解决方案3中所建议的那样处理这个问题,我在JCA(使用自定义接口添加内部线程)中做到这一点,我不会从中获得(精心设计的单身人士?虽然创建一个资源适配器看起来并不是一个可怕的任务,但它似乎并不是完全无关紧要的,可能需要花费一些时间(对于其他开发人员来说可能更难以遵循).