小编Hau*_*uke的帖子

使用Maven和Eclipse Helios创建完整的EAR项目

我阅读了一些关于如何设置eclipse和maven以创建一个新的空耳项目的文章,但所有解决方案都不完整或已经过时.

我相信我需要创建三个pom.xml文件/或三个项目:

  1. 具有WEB-APP结构的客户端项目(如常规动态Web项目).这应该导致WAR文件.
  2. 服务器项目与ejbs.这应该是一个JAR文件.
  3. 耳朵项目将两个项目连接在一起.

我在eclipse中使用集成的maven插件尝试了这个.由于(我相信Helios)maven已经集成在eclipse中.所以我去了

file - > new - > maven - > maven project

并取消选中"创建一个简单的项目"复选框.在另一边,我得到了原型目录.为了创建客户端项目,我查找了maven-archetype-webapp版本1.0.但是缺少WebContent\META-INF等所有文件夹.

那么如何创建所有三个项目都是将它们组合在一起?

非常感谢,Hauke

PS.:我在问题5668710中读到关于创建没有maven的项目并激活依赖关系管理.但这是正确的方法吗?我不这么认为.

eclipse ear maven-2 web-applications maven-ear-plugin

17
推荐指数
1
解决办法
6万
查看次数

Hibernate JPA创建表类型= InnoDB问题

我在JBoss上部署了一个带有一些实体类的EJB项目.

一旦我部署EJB Jboss就会给我这个例外:

create table service_db (id integer not null auto_increment, ipAddress varchar(255),      
primary key (id)) type=InnoDB
Unsuccessful: create table service_db (id integer not null auto_increment, 
ipAddress varchar(255), primary key (id)) type=InnoDB
2011-08-17 11:38:59,997 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=InnoDB' at line 1....
Run Code Online (Sandbox Code Playgroud)

不应该是引擎= InnoDB而不是类型?我试图在没有运气的情况下在mysql中执行此语句(同样的错误).如果我用引擎移除或更换类型,它正在工作.

我的问题是,我可以改变谁?

这是我的persistance.xml(如果它很重要)

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> …
Run Code Online (Sandbox Code Playgroud)

java mysql jboss hibernate jpa

9
推荐指数
1
解决办法
1万
查看次数

用于更新具有空值或 null 值的信息的 REST API

我有一个关于如何最好地构建可以修改数据库中记录的 API 的一般性问题。

假设我们有一个包含 10 列的表,我们可以使用 REST (GET) 查询这 10 列。JSON 响应将包含所有 10 个字段。这很简单并且工作起来没有问题。

下一步是有人想要通过 POST 创建新记录。在这种情况下,该人仅发送 JSON 请求中 10 个字段中的 8 个。然后我们只填充数据库中的 8 个字段(其余为 NULL)。这也没有问题。

但是如果有人想要更新记录怎么办?我们在这里看到了不同的可能性,各有优缺点。

  1. 仅发送应更新的内容。问题:如何显式清空/删除字段?如果在 JSON 中传递“NULL”,我们会在对象中得到 NULL,但任何其他未传递的字段也为 NULL。因此我们无法区分哪些字段可以删除,哪些字段不能触及。

  2. 完整的对象已发送。问题:这里的对象之前可以通过 GET 获取,相应地更改并通过 PUT 返回。现在我们取回了所有信息,并且可以将信息直接写回到数据库中。因为空字段要么之前已经为空,要么被用户清除。

如果通过更新 API 来扩展对象,会发生什么情况。假设我们将数据库再扩展五个字段。API 的用户进行 GET,获取 15 个字段,但只能读取他页面上他知道的 10 个字段(因为他还没有更新他的一侧)。然后他更改了 10 个字段中的一些字段并通过 PUT 将它们发回。然后,我们将仅更新网站上的 10 个字段,并且 5 个新字段将从数据库中清空。

或者您是否必须为每个字段创建一个单独的端点?我们也考虑过创建一个带有键/值的映射,到底应该改变什么。

关于技术:我们使用Wildfly 15 with Resteasy and Jackson.

例如:

数据库一开始

+----+----------+---------------+-----+--------+-------+
| ID | Name     | Country       | Age | Weight | Phone |
+----+----------+---------------+-----+--------+-------+ …
Run Code Online (Sandbox Code Playgroud)

java rest resteasy jackson

9
推荐指数
1
解决办法
2万
查看次数

从 Java 8 迁移后 Java 11 的内存问题

每个人,

几周前,我们将后台应用程序从 Oracle Java 8 更改为采用 JDK 11(热点)。在最初的几周和几个月里,我们没有注意到任何事情,但现在我们的数据中心正在等待更新。在测试系统中我们注意到存在内存问题。

我们在一台服务器上运行最多 30 个应用程序实例。每一个都与 Tanuiksoft Service Wrapper 一起运行,并根据实例分配了不同数量的 XMX 内存。

我们的服务每 10 分钟打印一次以下信息

    double total = Runtime.getRuntime().totalMemory() / 1024;
    double max = Runtime.getRuntime().maxMemory() / 1024;
    double free = Runtime.getRuntime().freeMemory() / 1024;

    int activeThreads = Thread.activeCount();
    
    logger.info("Memory: [total={0}] [max={1}] [free={2}] [active threads={3}]", //
            total, max, free, activeThreads);
Run Code Online (Sandbox Code Playgroud)

这是 Java 8 的输出,其中总内存减少。

如果我理解正确的话,totalMemory 是虚拟机让操作系统保留的内存 - 那么该内存将不再可供操作系统使用。最大内存被理解为服务包装器中的 XMX 参数。freeMemory 是totalMemory 中仍然空闲的内存。

当时的输出看起来像这样

Memory: [total=278,016] [max=466,432] [free=183,895] [active threads=33]
Memory: [total=278,016] [max=466,432] [free=176,264] [active threads=33]
Memory: [total=259,072] …
Run Code Online (Sandbox Code Playgroud)

java memory-leaks java-service-wrapper

9
推荐指数
0
解决办法
8355
查看次数

在RunTime期间生成JAR文件

我刚刚创建了一个简单的java应用程序,它将为我们的数据库生成实体类.我将保存到本地光盘的那些java类.到目前为止一切正常.

现在我想从我的主应用程序中的那些java类生成一个JAR文件.我知道,我可以操作jar文件,我还读到了在运行时将类添加到jar文件.

但就我而言,我的构建路径中没有类.我需要的是从刚刚创建的java文件创建类文件并将它们放入我的jar文件中.

这可能在我的java应用程序中吗?

我这样做的原因是我们的数据库将一直由许多人扩展,我不想手动将这些字段添加到我的实体.所以我想创建一个从我们的数据库中扫描systables的应用程序,并从这些信息中生成java实体文件.但是现在我需要在生成它们之后在类文件中编译这些java文件并将它们添加到我的最终jar文件中.

感谢您提供有关此问题的任何帮助和/或信息.

许多问候,霍克

java jar

7
推荐指数
1
解决办法
6209
查看次数

从Hibernate 3迁移到4会降低启动速度

我们正在尝试将我们的项目从hibernate 3迁移到hibernate 4.一切都运行良好,但问题是启动.

我们不使用JPA,我们使用直接hibernate与xml文件和映射文件.

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>

        <property name="hibernate.connection.driver_class">com.informix.jdbc.IfxDriver</property>
        <property name="hibernate.connection.url">jdbc:informix-sqli://xxx:xxx/xxx:INFORMIXSERVER=xxx</property>
        <property name="hibernate.connection.username">xxx</property>
        <property name="hibernate.connection.password">xxx</property>
        <property name="hibernate.dialect">org.hibernate.dialect.InformixDialect</property>
        <property name="hibernate.format_sql">true</property>
        <property name="hibernate.show_sql">false</property>        


        <property name="generated.mappingFile">dev.xml</property>
   </session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)

generated.mappingFile属性是一个自己的属性.启动时,将加载该文件(dev.xml).这个文件看起来像这样:

        <mapping resource="de/cargosoft/edi/cargoservice/entities/aart/Aart_DEV.hbm.xml" />
        <mapping resource="de/cargosoft/edi/cargoservice/entities/abteilung/Abteilung_DEV.hbm.xml" />
        <mapping resource="de/cargosoft/edi/cargoservice/entities/adr/Adr_DEV.hbm.xml" />
        <mapping resource="de/cargosoft/edi/cargoservice/entities/adraesort/Adraesort_DEV.hbm.xml" />
        <mapping resource="de/cargosoft/edi/cargoservice/entities/adrakte/Adrakte_DEV.hbm.xml" />
        ...
        <mapping resource="de/cargosoft/edi/cargoservice/entities/zollanmtxt/Zollanmtxt_DEV.hbm.xml" />
        <mapping resource="de/cargosoft/edi/cargoservice/entities/sstbasis/Sstbasis_DEV.hbm.xml" />
        <mapping resource="de/cargosoft/edi/cargoservice/entities/sststruktur/Sststruktur_DEV.hbm.xml" />
        <mapping resource="de/cargosoft/edi/cargoservice/entities/ssthandler/Ssthandler_DEV.hbm.xml" />
        <mapping resource="de/cargosoft/edi/cargoservice/entities/sstproperty/Sstproperty_DEV.hbm.xml" />
        <mapping resource="de/cargosoft/edi/cargoservice/entities/sstprophandler/Sstprophandler_DEV.hbm.xml" />
        <mapping resource="de/cargosoft/edi/cargoservice/entities/sstneustart/Sstneustart_DEV.hbm.xml" />
Run Code Online (Sandbox Code Playgroud)

我们减少了这篇文章中的映射数量.我们目前有超过500个映射.

使用hibernate 3 …

java performance orm configuration hibernate

6
推荐指数
1
解决办法
811
查看次数

使用JGit的PullCommand进行身份验证

我正在使用JGit并希望从远程存储库拉到我的本地存储库.

第一个approch是克隆存储库,并且工作正常:

CredentialsProvider cp = new UsernamePasswordCredentialsProvider(username, password);
try (Git result = Git.cloneRepository()
    .setURI("http://172.20.1.2/team/myrepo.git")
    .setDirectory(new File("c:\\temp\\gittest"))
    .setCredentialsProvider(cp)
    .call()) {
        System.out.println("Having repository: " + result.getRepository().getDirectory());
    }
Run Code Online (Sandbox Code Playgroud)

但是在第二次调用之后,不需要再次克隆存储库.所以我觉得我需要拉

Git git = Git.open(new File("c:\\temp\\gittest"));
git.pull().call();
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

org.eclipse.jgit.api.errors.TransportException: http://172.20.1.2/team/myrepo.git: Authentication is required but no CredentialsProvider has been registered
Run Code Online (Sandbox Code Playgroud)

我不知道在哪里可以传递pull命令的凭据.

java git jgit

5
推荐指数
1
解决办法
6555
查看次数

以动画方式将组件添加到窗格

我想在我的应用程序中实现某种通知系统,但在计算通知的实际位置时遇到问题。所有通知都应出现在单独的阶段中,并且每个通知应相互对齐,并且每个通知都是一个带有两个标签(标题和消息)的简单 VBox。

我创建了一个小的独立应用程序来解决我遇到的问题。

一旦您按下主舞台上的按钮,就会创建一个 VBox 并将其添加到第二个通知舞台。一旦需要添加秒通知,第二个通知应位于第一个通知下方,依此类推。因此,我需要找到第一个通知的高度,以便将第二个通知放置在下面。

我知道我可以使用 VBox,但在我的应用程序中,通知应该制作平滑的动画,并将其他通知进一步向下推。我删除了整个动画并删除了部分通知,以便示例保持尽可能小。

问题是所有通知框都具有相同的高度 - 但它们并非如此(如果您修改文本并使其更长/更小)。

package whatever;

import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class NotificationTest {

    private Stage notificationStage;

    private Pane contentPane;

    private static final Integer NOTIFICATION_WIDTH = 250;

    private Double notificationOffset = 0.0;

    private static final Integer SPACING_BETWEEN_NOTIFICATIONS = 20;

    public void start() {
        Stage mainStage = new Stage();
        TextField textField = new TextField("Some long text for testing …
Run Code Online (Sandbox Code Playgroud)

java javafx

4
推荐指数
1
解决办法
140
查看次数

具有单例和工厂模式的空指针

我有一个我一生都无法理解的问题。为什么我在这里得到一个空指针?

原则上我有三个班级。一个单例类,一个工厂类和一个主类。在 Main 中,我调用了 Singleton 类一次,让我输出一些东西。

然后我在工厂上调用一个静态方法。在这个工厂类中有一个静态块,它依次访问单例类。然而,此时单例类的实例为空。

我真的不明白这一点,因为使用调试器我也看到变量为空,但调用流程实际上是预期的。

主程序

package testing;

public class Main {

    public static void main(String[] args) {
        Singleton.getInstance().getValue();

        Factory.build();
    }
}
Run Code Online (Sandbox Code Playgroud)

单例.java

package testing;

public class Singleton {

    private static final Singleton INSTANCE = new Singleton();

    private String value;

    public static Singleton getInstance() {
        return INSTANCE;
    }

    private Singleton() {
        configureSingleton();

        Factory.build();
    }

    private void configureSingleton() {
        value = "TEST";
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value; …
Run Code Online (Sandbox Code Playgroud)

java

3
推荐指数
1
解决办法
284
查看次数

使用 ServletContext 加载 Applicationscoped Bean

我创建了一个类 StartupListener 实现 ServletContextListener。里面

@Override
public void contextInitialized(ServletContextEvent contextEvent) {
Run Code Online (Sandbox Code Playgroud)

我创建了一个计时器,每 30 秒执行一次。在这个计时器内,我想从我的 @ApplicationScoped - Bean 设置一个参数,以便将计时器中的信息显示到我的网站。

这是我到目前为止所做的:

启动监听器.java

package de.whatever;

import java.util.Timer;
import javax.naming.Context;

public class CargoServiceStartupListener implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent contextEvent) {

    ....        

        ModuleScannerTask task = new ModuleScannerTask(contextEvent.getServletContext());
        Timer timer = new Timer("Scanner");
        timer.schedule(task, 0, 10000);
Run Code Online (Sandbox Code Playgroud)

ModuleScannerTask.java

package de.whatever;

import java.util.Enumeration;

public class ModuleScannerTask extends TimerTask{

private ServletContext context;

public ModuleScannerTask (ServletContext context) {
    this.context = context;
}

@Override
public void run() {
      System.out.println("Start scanning …
Run Code Online (Sandbox Code Playgroud)

java jsf jboss servlets

2
推荐指数
1
解决办法
3105
查看次数

Bash LeftPad 变量内带有空格的字符串

我想要这样的东西:

  CUSTOMERNAME="THIS IS A TEST"
  printf "| %-30s " $CUSTOMERNAME
Run Code Online (Sandbox Code Playgroud)

但问题是,值CUSTOMERNAME有一些空间。输出如下所示:

 | THIS                           | IS                             | A                              | TEST
Run Code Online (Sandbox Code Playgroud)

但我想要这样的东西

 | THIS IS A TEST                |
Run Code Online (Sandbox Code Playgroud)

我能做些什么?有任何想法吗?

谢谢,豪克

linux bash

2
推荐指数
1
解决办法
1485
查看次数

JavaFX 组合框绑定

可以说我有两个模型。老师和学生,每个学生可以有一个老师(不是几个)。所以我想在我的学生窗格上有一个组合框,我可以在其中选择一位老师。

两个模型也都存储在数据库中,我只希望教师的数据库 ID 出现在学生的模型中,但在组合框中应该出现教师的名字。

模型也应该绑定到组合框,所以如果有人改变了组合框中的老师,模型(学生的)也应该刷新。使用文本字段,我可以将它们绑定到 StringProperty 对象,但在这种情况下,我需要将组合框项 (Teacher.java) 绑定到我的 Student.java 中的一个整数属性。

我还考虑将教师模型作为我学生班级中的一个属性,但我认为这无济于事,因为那时我需要将组合框项(teacher.java)与我的学生模型中的教师对象绑定,但只有属性可以绑定对象。

教师.java

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

public class Teacher {

    private Integer databaseID;

    private StringProperty name = new SimpleStringProperty();

    private IntegerProperty age = new SimpleIntegerProperty();


    public Teacher (Integer databaseID) {
        // load data from database and fill into model
    }

    public void store() {
        // write model to database
    }

    // getters and setters ...

    @Override
    public String toString() {
        return name.get();
    } …
Run Code Online (Sandbox Code Playgroud)

javafx

2
推荐指数
1
解决办法
1万
查看次数

JavaFX 时间线周期监听器

有没有办法在下一轮循环开始时获取信息?时间线的 onFinish 方法不适用于无限循环。

我唯一的想法是使用 currentTimeProperty 并检查值是否增加或减少。

感谢您的帮助豪克

javafx

1
推荐指数
1
解决办法
764
查看次数