Java中的关联与聚合与组合

我试图理解这些术语的含义。 我带来了几个例子: 聚合:Facebook 有一个用户 组成:facebook 中的每个用户都有一个会话。 协会:人们使用浏览器 但是我很困惑,并且使用了我的例子。 为什么不能用户使用 Facebook帐户或Facebook 使用会话来validation用户? 在OOP方面是错误的吗? 我错过了什么概念?

单身模式(Bill Pugh的解决方案)

我正在阅读关于单身模式的维基,我不确定我是否理解这一点: https : //en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom正确部分。 为了简单起见 : 为什么Bill Pugh的解决方案比上面的例子更好? 是因为VM在实际使用之前没有加载静态类或类似的东西,所以在转向getInstance()方法之前我们不创建对象? 那个方法线程安全只是在初始化对象的程度吗?

Rijndael在Java中的支持

我们需要在Java中进行一些Rijndael开发。 对文章,图书馆等有什么建议可以帮助我们吗? 任何指向密钥库维护的指针以及如何安全地存储密钥? 编辑: 它需要是开源的。 从本质上讲,它只是使用Rijndael对数据进行标准加密/解密。

使用枚举值和注释进行Java字符串validation

我想使用注释针对一组值validation字符串。 我想要的基本上就是这个 @ValidateString(enumClass=com.co.enum) String dataType; int maxValue; int minValue; int precision; 要么 @ValidateString(values={“String”,”Boolean”, “Integer”}) String dataType; int maxValue; int minValue; int precision; 我还想根据dataType中设置的值对其他变量进行一些validation, if(dataType =“String”)maxValue,minValue,precision all应为null或0。 我想不出通过自定义注释实现这一目标的方法。 。 有人请帮帮我

如何在maven-shade-plugin创建的Jar中包含测试类?

我正在尝试使用Maven将我的测试类打包到一个带有依赖项的可执行jar中,但我很难做到这一点。 到目前为止这是我的pom.xml: 4.0.0 com.c0deattack executable-tests 1.0 jar executable-tests info.cukes cucumber-java 1.0.0 info.cukes cucumber-junit 1.0.0 org.seleniumhq.selenium selenium-java 2.21.0 junit junit 4.10 org.apache.maven.plugins maven-jar-plugin 2.4 test-jar org.apache.maven.plugins maven-shade-plugin 1.6 package shade cucumber-tests cucumber.cli.Main info.cukes:* com.c0deattack executable-tests 1.0 test-jar 当我执行mvn clean package ,构建会创建3个jar: executable-tests-1.0.jar //由mvn包阶段构建 executable-tests-1.0-teststjar //由jar-plugin构建 cucumber-tests.jar //由shade-plugin构建 Cucumber-tests.jar包含info.cuke依赖项,但它不包含executable-tests-1.0-tests.jar 。 我已经做了各种各样的尝试,包括测试课程,但没有任何工作,我缺少什么? 编辑:我已经将我的示例项目推送到GitHub,如果有人想玩它的话:) https://github.com/C0deAttack/ExecutableTests

使用Maven和IntelliJ,“-Dmaven.multiModuleProjectDirectory未设置”问题

我花了很长时间试图弄清楚我做错了什么,并希望有人可以提供帮助。 我目前的设置是运行Maven 3.3.3(通过自制程序)和Java 1.8。 IntelliJ 13是首选的IDE。 运行mvn -version产生以下结果: Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04- 22T12:57:37+01:00) Maven home: /usr/local/Cellar/maven/3.3.3/libexec Java version: 1.8.0_45, vendor: Oracle Corporation Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre Default locale: en_US, platform encoding: UTF-8 OS name: “mac os x”, version: “10.10.2”, arch: “x86_64”, family: “mac” 我认为这意味着一切正常,但是当我进入我的IDE并尝试运行Maven项目时,我收到此错误: /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin/java -Dmaven.home=/usr/local/Cellar/maven/3.3.3/libexec -Dclassworlds.conf=/usr/local/Cellar/maven/3.3.3/libexec/bin/m2.conf -Didea.launcher.port=7539 “-Didea.launcher.bin.path=/Applications/IntelliJ IDEA 13.app/bin” -Dfile.encoding=UTF-8 -classpath “/usr/local/Cellar/maven/3.3.3/libexec/boot/plexus-classworlds-2.5.2.jar:/Applications/IntelliJ IDEA […]

如何在不同的日志文件中记录多个线程?

我有一个JAVA类,它启动具有唯一ID的各种线程。 每个线程都应该登录一个以ID.log命名的唯一日志文件。 因为我只在运行时获取唯一ID,所以我必须以编程方式配置Log4J: // Get the jobID myJobID = aJobID; // Initialize the logger myLogger = Logger.getLogger(myJobID); FileAppender myFileAppender; try { myFileAppender = new FileAppender(new SimpleLayout(), myJobID + “.log”, false); BasicConfigurator.resetConfiguration(); BasicConfigurator.configure(myFileAppender); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } 现在,如果我按顺序启动作业,这可以正常工作 – 但是当我同时启动2个线程(同一类)时,会创建两个日志,但日志会混淆:第二个线程会记录到第一个和第二个日志中。 我怎样才能确保每个实例都是唯一的? 我已经尝试为每个记录器实例提供一个唯一的名称,但它没有改变任何东西。

HttpsUrlConnection和keep-alive

我在我当前的项目中使用com.sun.net.httpserver.HttpsServer处理客户端身份validation等。目前它只打印出客户端地址/端口,以便我可以检查是否有一个TCP连接用于多个请求( keep-alive )或者是否为每个请求建立了新连接(因此每次都进行新的SSL握手)。 当我使用FireFox对服务器发出多个请求时,我可以看到keep-alive正在运行。 因此,服务器部分可以正常使用GET和POST请求。 如果我使用HttpURLConnection对服务器发出请求(在这种情况下不使用SSL), keep-alive也会起作用:只为多个顺序启动的请求建立一个连接。 但是,如果我使用HttpsURLConnection (使用完全相同的代码,但使用 SSL),那么keep-alive将不再起作用。 因此,对于每个请求,都建立了一个新连接,尽管我使用相同的SSLContext (和SSLSocketFactory ): // URL myUrl = … // SSLContext mySsl = … HttpsURLConnection conn = (HttpsURLConnection) myUrl.openConnection(); conn.setUseCaches(false); conn.setSSLSocketFactory(mySsl.getSocketFactory()); conn.setRequestMethod(“POST”); // send Data // receive Data 如何强制HttpsURLConnection使用keep-alive因为许多请求会导致许多SSL握手,这是一个真正的性能问题? 更新(2012-04-02):我没有每次调用mySsl.getSocketFactory() ,而是尝试缓存SSLSocketFactory 。 但没有改变。 问题依然存在。

Hibernate枚举映射

我需要事先将未实现接口的枚举映射到现有数据库,现有数据库使用@Enumerated(EnumType.STRING)将枚举存储在与所有者类相同的表中。 class A { HasName name; } interface HasName { String getName(); } enum X implements HasName { John, Mary; public String getName() { return this.name(); } } enum Y implements HasName { Tom, Ann; public String getName() { return this.name(); } } 在这种情况下应该如何处理映射? 持久化到数据库不会改变,因为实现接口的所有枚举都将具有不同的值,但我不确定如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化枚举使用指定的枚举类?Hibernate本身是否支持此function?)。

Long vs BigInteger

我知道java.lang.Long和java.math.BigInteger都可以包含非常大的自然数。 我也知道Long的最大值,但BigInteger的最大值是多少? 除了容量之外,BigInteger在处理仍然落在Long范围内的一般大整数时会表现得更好吗? 题 唯一的考虑因素是:我的价值对于龙来说太大了吗?