Karaf - TransactionRequiredException - java

I am running Karaf, I have a DataSource in persistence.xml (pointing to a SQL Server DB), and I am trying to execute an insert query.
But I am getting this exception:
javax.persistence.TransactionRequiredException: Executing an update/delete query at
org.hibernate.jpa.spi.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:71)
My transaction-type is set to JTA.
I think I need to configure some transactions but I am not very familiar with this. I think it's something simple but I don't find many ideas when googling.
What do I need to change in my XML descriptors (persistence.xml or blueprints.xml)?
Please provide some sample XML snippet. Many thanks in advance.
71 | Active | 80 | 2.3.0 | Apache Aries JPA Container API
73 | Active | 80 | 2.3.0 | Apache Aries JPA container
74 | Active | 80 | 2.3.0 | Apache Aries JPA support
76 | Active | 80 | 1.1.1 | Apache Aries Transaction Blueprint
77 | Active | 80 | 2.1.0 | Apache Aries Transaction Blueprint
78 | Active | 80 | 1.3.0 | Apache Aries Transaction Manager

Take a look at the aries jpa examples. There are examples for blueprint and declarative services. For blueprint there is support for standard annotations like #PersistenceContext and #Transactional.
For DS you can use the JPATemplate to run code in a transaction and with an EntityManager.

Related

How to undo a migration using Flyway?

I am working on a Spring project and I have FlyWay as a dependency to manage my migrations, I made a mistake on the SQL command. When I ran the project I got an error showing a problem with the script, a silly mistake that was easy to fix, I misspelled a column name. However, the undo command from the flyway is not working.
I was trying to undo a migration using FlyWay and I follow the tutorial from FlyWay documentation: link-flyway
However, I got this output:
C:\Users\leonardo.freitas\Documents\workspace\api>C:\Users\leonardo.freitas\Documents\workspace\flyway-9.8.1\flyway undo
A new version of Flyway is available
Upgrade to Flyway 9.8.2: https://rd.gt/2X0gakb
ERROR: The command 'undo' was not recognized. Make sure you have added 'flyway-proprietary' as a dependency.
Caused by: No command extension found to handle command: undo
That's my migration history:
C:\Users\leonardo.freitas\Documents\workspace\api>C:\Users\leonardo.freitas\Documents\workspace\flyway-9.8.1\flyway info
A new version of Flyway is available
Upgrade to Flyway 9.8.2: https://rd.gt/2X0gakb
Flyway Community Edition 9.8.1 by Redgate
See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#9.8.1
ERROR: Skipping filesystem location: sql (not found)
Database: jdbc:mysql://localhost:3306/volimed (MySQL 8.0)
Schema version: 5
+-----------+---------+----------------------------------------+------+---------------------+-----------------+----------+
| Category | Version | Description | Type | Installed On | State | Undoable |
C:\Users\leonardo.freitas\Documents\workspace\api>C:\Users\leonardo.freitas\Documents\workspace\flyway-9.8.1\flyway info
A new version of Flyway is available
Upgrade to Flyway 9.8.2: https://rd.gt/2X0gakb
Flyway Community Edition 9.8.1 by Redgate
See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#9.8.1
ERROR: Skipping filesystem location: sql (not found)
Database: jdbc:mysql://localhost:3306/volimed (MySQL 8.0)
Schema version: 5
+-----------+---------+----------------------------------------+------+---------------------+-----------------+----------+
| Category | Version | Description | Type | Installed On | State | Undoable |
+-----------+---------+----------------------------------------+------+---------------------+-----------------+----------+
| Versioned | 1 | create-table-medicos | SQL | 2022-11-19 03:12:19 | Future | No |
| Versioned | 2 | alter-table-medicos-add-telefone | SQL | 2022-11-19 13:32:45 | Future | No |
| Versioned | 3 | create-table-pacientes | SQL | 2022-11-19 13:46:17 | Future | No |
| Versioned | 4 | alter-table-medicos-add-column-active | SQL | 2022-11-19 15:28:46 | Future | No |
| Versioned | 5 | alter-table-paciente-add-column-active | SQL | 2022-11-19 15:45:28 | Failed (Future) | No |
+-----------+---------+----------------------------------------+------+---------------------+-----------------+----------+
And I want to redu the last migration.
Undo command is supported in both the Teams and Enterprise edition . Flyway Enterprise is the only version with auto generation of Undo scripts though. Bill, could you point me towards where the information is conflicting?
I find out a way to resolve this problem, I went to the FlyWay table and deleted the last row, when I ran the project the FlyWay applied the migration again.

Camel route with AMQP consumer runs ok in Eclipse, hangs in karaf

I am using Camel 2.17.3 and karaf 4.0.7 (also tried 4.0.1).
I have a Camel route that runs fine in Eclipse when a junit test starts it, but hangs when deployed to karaf. If I change the amqp: 'from' component to timer: the route runs fine in karaf.
My AMQP setup in the routebuilder is:
#Override
public void configure() throws Exception {
getContext().addComponent("amqp", AMQPComponent.amqpComponent(String.format("amqp://%s:%s?amqp.saslMechanisms=ANONYMOUS", AMQP_SERVICE_HOST, AMQP_SERVICE_PORT)));
Even this route will hang karaf, and run fine in Eclipse:
from("amqp:queue:myqueue").routeId("myRoute")
.log("temp")
In Karaf, when I say "hang", I observe these things:
If I try to exit karaf, it hangs - I need to kill the process.
If I try to stop the bundle, karaf hangs - I need to kill the process.
Neither camel:context-list nor camel:route-list return anything
I do not get a "route consuming from..." message in the log. This is all
the output from starting the bundle:
2016-10-08 23:46:00,593 | INFO | nsole user karaf | bundle
| 90 - org.apache.aries.spifly.dynamic.bundle - 1.0.1 | Bundle
Considered for SPI providers: mis-routes 2016-10-08 23:46:00,593 |
INFO | nsole user karaf | bundle | 90 -
org.apache.aries.spifly.dynamic.bundle - 1.0.1 | No 'SPI-Provider'
Manifest header. Skipping bundle: mis-routes 2016-10-08 23:46:05,595 |
INFO | ool-130-thread-1 | OsgiDefaultCamelContext | 56 -
org.apache.camel.camel-core - 2.17.3 | Apache Camel 2.17.3
(CamelContext: mis-routes) is starting 2016-10-08 23:46:05,599 | INFO
| ool-130-thread-1 | OsgiDefaultCamelContext | 56 -
org.apache.camel.camel-core - 2.17.3 | MDC logging is enabled on
CamelContext: mis-routes 2016-10-08 23:46:05,601 | INFO |
ool-130-thread-1 | ManagedManagementStrategy | 56 -
org.apache.camel.camel-core - 2.17.3 | JMX is enabled 2016-10-08
23:46:05,708 | INFO | ool-130-thread-1 |
DefaultRuntimeEndpointRegistry | 56 - org.apache.camel.camel-core -
2.17.3 | Runtime endpoint registry is in extended mode gathering usage statistics of all incoming and outgoing endpoints (cache limit: 1000)
2016-10-08 23:46:05,804 | INFO | ool-130-thread-1 |
OsgiDefaultCamelContext | 56 - org.apache.camel.camel-core -
2.17.3 | AllowUseOriginalMessage is enabled. If access to the original message is not needed, then its recommended to turn this option off as
it may improve performance. 2016-10-08 23:46:05,805 | INFO |
ool-130-thread-1 | OsgiDefaultCamelContext | 56 -
org.apache.camel.camel-core - 2.17.3 | StreamCaching is not in use. If
using streams then its recommended to enable stream caching. See more
details at http://camel.apache.org/stream-caching.html
Any help would be hugely appreciated. Thanks!
The reason should be related to this issue in Camel JIRA: https://issues.apache.org/jira/browse/CAMEL-10278
The main problem is proton-j 0.10 is incompatible with qpid-jms-client version 0.8. We upgraded the dependency to proton-j 0.12.0 and the fix will be available in the Camel 2.17.4 release.
For the moment you can use Camel 2.17.4-SNAPSHOT or upgrade the dependency in the Camel-Amqp Karaf feature.

How to install Hibernate 5 into Apache Karaf v4

I've installed Apache Karaf v4.03 and queried the list of available features for Hibernate, as listed below. Unfortunately, I am using Hibernate v5.
hibernate | 3.3.2.GA | | Uninstalled | enterprise-4.0.3 | Hibernate 3.x JPA persistence engine support
hibernate | 4.2.15.Final | | Uninstalled | enterprise-4.0.3 | Hibernate 4.2.x JPA persistence engine support
hibernate-envers | 4.2.15.Final | | Uninstalled | enterprise-4.0.3 | Hibernate Envers 4.2.x
hibernate | 4.3.6.Final | | Uninstalled | enterprise-4.0.3 | Hibernate 4.3.x JPA persistence engine support
hibernate-envers | 4.3.6.Final | | Uninstalled | enterprise-4.0.3 | Hibernate Envers 4.3.x
hibernate-validator | 5.0.3.Final | | Uninstalled | enterprise-4.0.3 | Hibernate Validator support
I am unable to find instructions for installing Hibernate v5 into Karaf v4. Are there published instructions for performing this task, and perhaps a downloadable features file?
Latest hibernate-release comes Karaf ready already:
If you download the hibernate-release-5.0.5.Final.zip from hibernate's page (http://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.5.Final/hibernate-release-5.0.5.Final.zip/download) and decompress the file, you will see an osgi folder.
There you can find an already prepared feauture: hibernate-osgi-5.0.5.Final-karaf.xml.
You can just copy it to Karaf's deploy folder and then execute:
feature:install hibernate-orm
It should be installed without any problem.
Another way to install hibernate 5.0.5 feature is to add a repo to features with the command:
feature:repo-add command.
Here you can see the list of hibernate's features and the one I have installed:
karaf#root()> feature:list | grep hibernate
hibernate | 3.3.2.GA | | Uninstalled | enterprise-4.0.3 | Hibernate 3.x JPA persistence engine support
hibernate | 4.2.15.Final | | Uninstalled | enterprise-4.0.3 | Hibernate 4.2.x JPA persistence engine support
hibernate-envers | 4.2.15.Final | | Uninstalled | enterprise-4.0.3 | Hibernate Envers 4.2.x
hibernate | 4.3.6.Final | | Uninstalled | enterprise-4.0.3 | Hibernate 4.3.x JPA persistence engine support
hibernate-envers | 4.3.6.Final | | Uninstalled | enterprise-4.0.3 | Hibernate Envers 4.3.x
hibernate-validator | 5.0.3.Final | | Uninstalled | enterprise-4.0.3 | Hibernate Validator support
hibernate-orm | 5.0.5.Final | x | Started | hibernate-osgi | Combines all Hibernate core dependencies and requ
hibernate-envers | 5.0.5.Final | | Uninstalled | hibernate-osgi | Feature for easily adding Envers support to hiber
hibernate-infinispan | 5.0.5.Final | | Uninstalled | hibernate-osgi | Feature for easily adding Infinispan-based cachin
hibernate-ehcache | 5.0.5.Final | | Uninstalled | hibernate-osgi | Feature for easily adding Ehcache-based caching s
karaf#root()>
Run the following commands on Karaf shell to get Hibernate 5.1.0.Final working on Karaf 4.0.x:
feature:repo-add mvn:org.hibernate/hibernate-osgi/5.1.0.Final/xml/karaf
feature:install hibernate-orm
Hibernate 5 already provides a feature that is also available from maven central. Recent karaf versions provide a nice shortcut to install such features:
feature:repo-add hibernate 5.0.5.Final
feature:install hibernate-orm
So there is no need to manually download the hibernate zip.
If you build your own feature that needs hibernate 5 then you need to provide a element in it that points to the full hibernate feature url.
mvn:org.hibernate/hibernate-osgi/5.0.5.Final/xml/karaf

Servicemix 5.4 waiting for unsatisfied dependencies [[&transactionManager, &userTransaction]

I want to upgrade servicemix 4.5.2 to servicemix 5.4 I already resolve dependency issues but I come across with problem in reference to service. When my hibernate bundle is started it can't get access to services transactionManager and userTransaction.
I tested both configuration(spring and blueprint) form https://access.redhat.com/documentation/en-US/Fuse_ESB_Enterprise/7.0/html/EIP_Transactions_Guide/XaTM-Access.html but I cant get these services.
In osgi:list I see:
[102] [Active ] [ ] [ ] [ 50] Apache Aries Transaction Manager (1.0.0)
In my feature.xml in my hibernate bundle configuration I have <feature>transaction</feature>
In log file I see :
2015-06-16 15:03:58,868 | INFO | ExtenderThread-2 | OsgiBundleXmlApplicationContext | ? ? | 80 - org.apache.servicemix.bundles.spring-context - 3.2.11.RELEASE_1 | Application Context service already unpublished
2015-06-16 15:03:58,871 | INFO | ExtenderThread-2 | XmlBeanDefinitionReader | ? ? | 78 - org.apache.servicemix.bundles.spring-beans - 3.2.11.RELEASE_1 | Loading XML bean definitions from URL [bundle://230.0:0/META-INF/spring/beans.xml]
2015-06-16 15:03:58,905 | INFO | ExtenderThread-2 | DependencyServiceManager | ? ? | 123 - org.springframework.osgi.extender - 1.2.1 | Adding OSGi service dependency for importer [&transactionManager] matching OSGi filter [(objectClass=javax.transaction.TransactionManager)]
2015-06-16 15:03:58,905 | INFO | ExtenderThread-2 | DependencyServiceManager | ? ? | 123 - org.springframework.osgi.extender - 1.2.1 | Adding OSGi service dependency for importer [&userTransaction] matching OSGi filter [(objectClass=javax.transaction.UserTransaction)]
2015-06-16 15:03:58,905 | INFO | ExtenderThread-2 | DependencyServiceManager | ? ? | 123 - org.springframework.osgi.extender - 1.2.1 | OsgiBundleXmlApplicationContext(bundle=*****, config=osgibundle:/META-INF/spring/*.xml) is waiting for unsatisfied dependencies [[&transactionManager, &userTransaction]]
After timeout i get:
2015-06-16 15:08:58,911 | ERROR | Timer-1 | WaiterApplicationContextExecutor | ? ? | 123 - org.springframework.osgi.extender - 1.2.1 | Unable to create application context for [******], unsatisfied dependencies: Dependency on [(objectClass=javax.transaction.TransactionManager)] (from bean [&transactionManager]), Dependency on F[(objectClass=javax.transaction.UserTransaction)] (from bean [&userTransaction])
org.springframework.context.ApplicationContextException: Application context initialization for '*******' has timed out
at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.timeout(DependencyWaiterApplicationContextExecutor.java:454)[123:org.springframework.osgi.extender:1.2.1]
at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.access$000(DependencyWaiterApplicationContextExecutor.java:50)[123:org.springframework.osgi.extender:1.2.1]
at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$WatchDogTask.run(DependencyWaiterApplicationContextExecutor.java:105)[123:org.springframework.osgi.extender:1.2.1]
at java.util.TimerThread.mainLoop(Timer.java:555)[:1.7.0_21]
at java.util.TimerThread.run(Timer.java:505)[:1.7.0_21]
2015-06-16 15:08:58,914 | ERROR | Timer-1 | ContextLoaderListener | ? ? | 123 - org.springframework.osgi.extender - 1.2.1 | Application context refresh failed (OsgiBundleXmlApplicationContext(bundle=******, config=osgibundle:/META-INF/spring/*.xml))
org.springframework.context.ApplicationContextException: Application context initialization for '*******' has timed out
at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.timeout(DependencyWaiterApplicationContextExecutor.java:454)[123:org.springframework.osgi.extender:1.2.1]
at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.access$000(DependencyWaiterApplicationContextExecutor.java:50)[123:org.springframework.osgi.extender:1.2.1]
at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$WatchDogTask.run(DependencyWaiterApplicationContextExecutor.java:105)[123:org.springframework.osgi.extender:1.2.1]
at java.util.TimerThread.mainLoop(Timer.java:555)[:1.7.0_21]
at java.util.TimerThread.run(Timer.java:505)[:1.7.0_21]
And:
karaf#root> bundle-services 102
You are about to access system bundle 102. Do you wish to continue (yes/no): yes
org.apache.aries.transaction.manager provides:
----------------------------------
[org.osgi.service.cm.ManagedService]
[javax.transaction.TransactionManager, javax.transaction.TransactionSynchronizationRegistry, javax.transaction.UserTransaction, org.apache.geronimo.transaction.manager.RecoverableTransactionManager, org.springframework.transaction.PlatformTransactionManager]
Solved by modifying the future.xml file on my hibernate bundle i added 'dependency="true"'. But still this is very strange behavior...

Jpa-hibernate error while starting the service

Below is the error from the log that i see after starting the service... can you help resolving this issue.
2013-08-22 10:35:37,111 | DEBUG | l Console Thread | AbstractServiceReferenceRecipe | r.AbstractServiceReferenceRecipe 143 | 7 - org.apache.aries.blueprint.core - 1.1.0 | Found initial references null for OSGi service (&(&(org.apache.aries.jpa.proxy.factory=true)(osgi.unit.name=tenant))(objectClass=javax.persistence.EntityManagerFactory))
2013-08-22 10:35:37,111 | DEBUG | l Console Thread | BlueprintContainerImpl | container.BlueprintContainerImpl 280 | 7 - org.apache.aries.blueprint.core - 1.1.0 | Running blueprint container for bundle com.igt.arcus.framework.jta.arcus-framework-feature-service in state WaitForInitialReferences
2013-08-22 10:35:37,111 | INFO | l Console Thread | BlueprintContainerImpl | container.BlueprintContainerImpl 344 | 7 - org.apache.aries.blueprint.core - 1.1.0 | Bundle com.igt.arcus.framework.jta.arcus-framework-feature-service is waiting for dependencies [(&(&(org.apache.aries.jpa.proxy.factory=true)(osgi.unit.name=tenant))(objectClass=javax.persistence.EntityManagerFactory))]
2013-08-22 10:35:37,112 | DEBUG | l Console Thread | BlueprintEventDispatcher | ntainer.BlueprintEventDispatcher 136 | 7 - org.apache.aries.blueprint.core - 1.1.0 | Sending blueprint container event BlueprintEvent[type=GRACE_PERIOD, dependencies=[(&(&(org.apache.aries.jpa.proxy.factory=true)(osgi.unit.name=tenant))(objectClass=javax.persistence.EntityManagerFactory))]] for bundle com.igt.arcus.framework.jta.arcus-framework-feature-service
In case you use Aries JPA you should see two EntityManagerFactory services:
jpa-container picks up your bundle with the persistence.xml and creates an Entity manager factory
jpa-container-context picks up every EntityManagerFactory service and makes a new managed EntityManagerFactory service with the (org.apache.aries.jpa.proxy.factory=true) service property key-value pair
The second does not exist in your environment. There can be two causes:
aries-jpa-container-context is not in your OSGi environment or it is not in ACTIVE state
The original EntityManagerFactory service is not registered as some dependency is missing
You can check it if you open an OSGi console and check what services available. If there is no EntityManagerFactory service at all, the second is your problem.
Check if all of your bundles are active! If they are, check if you have all the services that jpa-container needs: TransactionManager, DataSource or DataSourceFactory and a javax.persistence.spi.PersistenceProvider service for Hibernate. If any of the services are missing aries-jpa-container will pick up your bundle but will never create the EntityManagerFactory.
I implemented an own jpa-container that works almost the same way as aries-jpa-container. If you replace the aries-jpa-container (only that one, the jpa-container-context should be left there) it will log more messages at INFO level for you what is missing. The container is available here. A sample application is available that uses hibernate is available at https://github.com/everit-org/osgi-hibernate. After running "mvn install" you will find itests/core/target/eosgi-itests-dist/equinox a subfolder where you can start the working application with on equinox server with bin/runconsole.sh.
The current aries jpa container jar 1.0.0 has a bug that makes it swallow exceptions on creating the EntityManager. A colleague of me opened the aries bug: https://issues.apache.org/jira/browse/ARIES-1160
I created a second patch that can be applied to the 1.0.0 sources to create a jar that correctly logs the exception. Check out the 1.0.0 tag of aries jpa container, apply the patch and build.
When you then run in karaf you should see the real source of the error.

Categories